Beispiel #1
0
 internal void Add(Protocal.MarketCommand command)
 {
     command.SourceType = AppType.TransactionServer;
     _msgBlock.Post(command);
 }
Beispiel #2
0
        internal void ProcessMarketCommand(Protocal.MarketCommand marketCommand)
        {
            try
            {
                Logger.InfoFormat("ProcessMarketCommand, type= {0}", marketCommand.GetType().Name);
                if (marketCommand is Protocal.UpdateInstrumentTradingStatusMarketCommand)
                {
                    List <InstrumentUpdateStatusCommand> broadcastTask = new List <InstrumentUpdateStatusCommand>();
                    Protocal.UpdateInstrumentTradingStatusMarketCommand updateMarketCommand = marketCommand as Protocal.UpdateInstrumentTradingStatusMarketCommand;
                    Logger.InfoFormat("ProcessMarketCommand, content= {0}", updateMarketCommand);

                    foreach (var instrumentStatus in updateMarketCommand.InstrumentStatus)
                    {
                        foreach (var instrument in instrumentStatus.Value)
                        {
                            InstrumentStatus sendInstrumentStatus = InstrumentStatus.None;
                            switch (instrumentStatus.Key)
                            {
                            case Protocal.TradingInstrument.InstrumentStatus.DayOpen:
                                sendInstrumentStatus = InstrumentStatus.DayOpen;
                                break;

                            case Protocal.TradingInstrument.InstrumentStatus.DayClose:
                                sendInstrumentStatus = InstrumentStatus.DayClose;
                                break;

                            case Protocal.TradingInstrument.InstrumentStatus.SessionOpen:
                                sendInstrumentStatus = InstrumentStatus.SessionOpen;
                                break;

                            case Protocal.TradingInstrument.InstrumentStatus.SessionClose:
                                sendInstrumentStatus = InstrumentStatus.SessionClose;
                                break;

                            default:
                                continue;
                            }

                            broadcastTask.Add(new InstrumentUpdateStatusCommand
                            {
                                InstrumentId = instrument.Id,
                                TradeDay     = instrument.TradeDay == null ? DateTime.MaxValue : instrument.TradeDay.Value,
                                Status       = sendInstrumentStatus
                            });
                        }
                    }

                    this._broadcast.BroadcastCommands(this._token, new InstrumentsUpdateStatusCommand[] { new InstrumentsUpdateStatusCommand()
                                                                                                          {
                                                                                                              commandCollection = broadcastTask
                                                                                                          } });

                    //Protocal.UpdateInstrumentTradingStatusMarketCommand
                    //    marketCloseCommand = marketCommand as Protocal.UpdateInstrumentTradingStatusMarketCommand;

                    //Logger.InfoFormat("ProcessMarketCommand, content= {0}", marketCloseCommand);

                    //if (marketCloseCommand.InstrumentStatus.ContainsKey(Protocal.TradingInstrument.InstrumentStatus.DayClose))
                    //{
                    //    List<InstrumentTradeDayCloseCommand> broadcastTask = new List<InstrumentTradeDayCloseCommand>();

                    //    foreach (var instrumentInfo in marketCloseCommand.InstrumentStatus[Protocal.TradingInstrument.InstrumentStatus.DayClose])
                    //    {
                    //        broadcastTask.Add(new InstrumentTradeDayCloseCommand
                    //        {
                    //            InstrumentId = instrumentInfo.Id,
                    //            TradeDay = instrumentInfo.TradeDay
                    //        });
                    //    }

                    //    Logger.InfoFormat("ProcessMarketCommand, callBrodcast.");
                    //    this._broadcast.BroadcastCommands(this._token, broadcastTask.ToArray());
                    //}
                }
            }
            catch (Exception ex)
            {
                Logger.Error(string.Format("ProcessMarketCommand failed at\r\n{0}", ex));
            }
        }