public classStockRealWriter
{#region StockRealWriterQueue queue = new Queue();//use multithread write
Thread writerThread;bool threadRunning = true;const string HBASESTOCKTBLNAME = "StockRealInfo";publicStockRealWriter()
{//Start a thread for writting to HBase
Task task = newTask(WriterThreadFunction);
task.Start();
}~StockRealWriter()
{
threadRunning= false;
}#endregion
#region WriterThreadFunction
///
///WriterThreadFunction///
public voidWriterThreadFunction()
{while(threadRunning)
{if (queue.Count > 0)
{lock(queue)
{
CellSetset = newCellSet();do{
StockRealInfo stock=queue.Dequeue();this.CreateStockByRealInfos(set, stock);
}while (queue.Count > 0);
Utils.HBaseClient.StoreCellsAsync(HBASESTOCKTBLNAME,set);
}
}
Thread.Sleep(5000);
}
}#endregion
#region CreateStockByRealInfos
///
///
///
///
///
private void CreateStockByRealInfos(CellSet set, StockRealInfo info)
{string key = string.Format("{0}_{1}_{2}", info.ID, info.Date, info.Time);var row = new CellSet.Row { key =Encoding.UTF8.GetBytes(key) };var value = new Cell { column = Encoding.UTF8.GetBytes("d:ID"), data =Encoding.UTF8.GetBytes(info.ID) };
row.values.Add(value);
value= new Cell { column = Encoding.UTF8.GetBytes("d:Name"), data =Encoding.UTF8.GetBytes(info.Name) };
row.values.Add(value);//今日开盘价
value = new Cell { column = Encoding.UTF8.GetBytes("d:TodayOpen"), data =Encoding.UTF8.GetBytes(info.TodayOpen) };
row.values.Add(value);//昨日收盘价
value = new Cell { column = Encoding.UTF8.GetBytes("d:YesterdayClose"), data =Encoding.UTF8.GetBytes(info.YesterdayClose) };
row.values.Add(value);//当前价格
value = new Cell { column = Encoding.UTF8.GetBytes("d:Current"), data =Encoding.UTF8.GetBytes(info.Current) };
row.values.Add(value);//今日最高价
value = new Cell { column = Encoding.UTF8.GetBytes("d:High"), data =Encoding.UTF8.GetBytes(info.High) };
row.values.Add(value);//今日最低价
value = new Cell { column = Encoding.UTF8.GetBytes("d:Low"), data =Encoding.UTF8.GetBytes(info.Low) };
row.values.Add(value);//竟买价 买1
value = new Cell { column = Encoding.UTF8.GetBytes("d:Buy"), data =Encoding.UTF8.GetBytes(info.Buy) };
row.values.Add(value);//竟卖价 卖1
value = new Cell { column = Encoding.UTF8.GetBytes("d:Sell"), data =Encoding.UTF8.GetBytes(info.Sell) };
row.values.Add(value);//成交数 单位股数 通常除于100成为手
value = new Cell { column = Encoding.UTF8.GetBytes("d:VolAmount"), data =Encoding.UTF8.GetBytes(info.VolAmount) };
row.values.Add(value);//成交多少钱,单位元
value = new Cell { column = Encoding.UTF8.GetBytes("d:VolMoney"), data =Encoding.UTF8.GetBytes(info.VolMoney) };
row.values.Add(value);//日期
value = new Cell { column = Encoding.UTF8.GetBytes("d:Date"), data =Encoding.UTF8.GetBytes(info.Date) };
row.values.Add(value);//时间
value = new Cell { column = Encoding.UTF8.GetBytes("d:Time"), data =Encoding.UTF8.GetBytes(info.Time) };
row.values.Add(value);//差额
value = new Cell { column = Encoding.UTF8.GetBytes("d:Diff"), data =Encoding.UTF8.GetBytes(info.Diff) };
row.values.Add(value);//百分比
value = new Cell { column = Encoding.UTF8.GetBytes("d:DiffPrec"), data =Encoding.UTF8.GetBytes(info.DiffPrec) };
row.values.Add(value);
DataRow buyInfo;for(int i=0;i<5;i++)
{
buyInfo=info.BuyList.Rows[i];
value= new Cell { column = Encoding.UTF8.GetBytes(string.Format("d:Price0{0}",i.ToString())), data = Encoding.UTF8.GetBytes(Convert.ToString(buyInfo["Price"])) };
row.values.Add(value);
value= new Cell { column = Encoding.UTF8.GetBytes(string.Format("d:Amount0{0}", i.ToString())), data = Encoding.UTF8.GetBytes(Convert.ToString(buyInfo["Amount"])) };
row.values.Add(value);
}
DataRow sellInfo;for (int i = 0; i < 5; i++)
{
sellInfo=info.SellList.Rows[i];
value= new Cell { column = Encoding.UTF8.GetBytes(string.Format("d:Price1{0}", i.ToString())), data = Encoding.UTF8.GetBytes(Convert.ToString(sellInfo["Price"])) };
row.values.Add(value);
value= new Cell { column = Encoding.UTF8.GetBytes(string.Format("d:Amount1{0}", i.ToString())), data = Encoding.UTF8.GetBytes(Convert.ToString(sellInfo["Amount"])) };
row.values.Add(value);
}set.rows.Add(row);
}#endregion
#region WriteStock
///
///
///
///
public void WriteStock(ListstockInfos)
{lock(queue)
{foreach(var stockInfo instockInfos)
{
queue.Enqueue(stockInfo);
}
}
}#endregion}