/// <summary> /// send a stuts message /// </summary> /// <param name="myState"></param> /// <param name="myText"></param> public void SendStatusMessage(KaiTrade.Interfaces.Status myState, string myText) { try { driverLog.Info(Name + ":" +myState.ToString() +":" + myText); // update the base session status UpdateStatus("DriverStatus", "", "", "", myState, myText); IDriverStatusMessage myDSM; setupStatus(out myDSM, myState, myText); KaiTrade.Interfaces.IMessage statusMsg = new K2DataObjects.Message(); statusMsg.Format = "XML"; statusMsg.Label = "DriverStatus"; statusMsg.Data = JsonConvert.SerializeObject(myDSM); SendStatusMessage(statusMsg); _lastStatus = statusMsg; } catch(Exception myE) { log.Error("SendStatusMessage", myE); } }
/// <summary> /// Send a status message to all of our clients /// </summary> /// <param name="myMessage"></param> public void SendStatusMessage(KaiTrade.Interfaces.IMessage myMessage) { try { // only preserve status messages - do not save an advisory if (myMessage.Label == "DriverStatus") { _lastStatus = myMessage; } foreach (KaiTrade.Interfaces.IClient myClient in _clients) { if (myClient != null) { try { myClient.OnStatusMessage(myMessage); } catch (Exception myE) { //m_Log.Error("SendStatusMessage - invoke", myE); } } } } catch (Exception myE) { log.Error("SendStatusMessage", myE); } }
/// <summary> /// Send a FIX style status message specifing all parameters /// </summary> /// <param name="myState"></param> /// <param name="myText"></param> /// <param name="myBegin"></param> /// <param name="mySID"></param> /// <param name="myTID"></param> /// <param name="myFixName"></param> public void SendStatusMessage(KaiTrade.Interfaces.Status myState, string myText, string myBegin, string mySID, string myTID, string myFixName) { try { // Update a FIX session status UpdateStatus(myFixName, myBegin, myTID, mySID, myState, myText); IDriverStatusMessage myDSM; setupStatus(out myDSM, myState, myText); IDriverSession mySession = new DriverSession(); mySession.SessionName = myFixName; mySession.BeginString = myBegin; mySession.SID = mySID; mySession.TID = myTID; mySession.UserName = myFixName; mySession.State = myState; mySession.Text = myText; myDSM.Sessions.Add(mySession); KaiTrade.Interfaces.IMessage statusMsg = new K2DataObjects.Message(); statusMsg.Format = "XML"; statusMsg.Label = "DriverStatus"; statusMsg.Data = JsonConvert.SerializeObject(myDSM); SendStatusMessage(statusMsg); _lastStatus = statusMsg; } catch (Exception myE) { log.Error("SendStatusMessage", myE); } }
public DriverBase() { // Set up logging - will participate in the standard toolkit log log = log4net.LogManager.GetLogger("KaiTrade"); wireLog = log4net.LogManager.GetLogger("KaiTradeWireLog"); driverLog = log4net.LogManager.GetLogger("KaiDriverLog"); _state = new DriverState(); _facade = AppFacade.Instance(); _clOrdIDOrderMap = new Dictionary<string, OrderContext>(); _apiIDOrderMap = new Dictionary<string, OrderContext>(); _pXContexts = new Dictionary<string, PXUpdateContext>(); _clients = new List<KaiTrade.Interfaces.IClient>(); _publisherRegister = new Dictionary<string, KaiTrade.Interfaces.IPublisher>(); _productGenericNameRegister = new Dictionary<string, string>(); _productRegister = new Dictionary<string, KaiTrade.Interfaces.IProduct>(); _externalProduct = new Dictionary<string, object>(); _sessions = new Dictionary<string, IDriverSession>(); _priceAgregators = new Dictionary<string, List<IPriceAgregator>>(); _identity = System.Guid.NewGuid().ToString(); // setup the components info - used on status messages SetComponentInfo(out _module, this, this.m_ID, "DriverManager", 0, ""); // creat a last status object - used to report status when requested _lastStatus = new K2DataObjects.Message(); _lastStatus.Label = "Status"; _lastStatus.Data = "Loaded"; _lastStatus.AppState = (int)KaiTrade.Interfaces.Status.loaded; _activeContextMap = new Dictionary<string, OrderContext>(); _runningState = new DriverStatus(); log.Info("MainMessageHandler Created"); pxUpdates = new BlockingCollection<KaiTrade.Interfaces.IPXUpdate>(); _pxUpdateProcessor = new PxUpdateProcessor(this, pxUpdates); _pXUpdateThread = new Thread(_pxUpdateProcessor.ThreadRun); _pXUpdateThread.Start(); replaceRequests = new BlockingCollection<RequestData>(); _replaceProcessor = new OrderReplaceProcessor(this, replaceRequests); _replaceUpdateThread = new Thread(_replaceProcessor.ThreadRun); _replaceUpdateThread.Start(); //private BlockingCollection<List<KaiTrade.Interfaces.IDOMSlot>> slotUpdates; inboundMessages = new BlockingCollection<KaiTrade.Interfaces.IMessage>(); _inboundProcessor = new MessageProcessorThread(this, inboundMessages); _inboundProcessorThread = new Thread(_inboundProcessor.ThreadRun); _inboundProcessorThread.Start(); outboundMessages = new BlockingCollection<KaiTrade.Interfaces.IMessage>(); _outboundProcessor = new MessageProcessorThread(ref _clients, outboundMessages); _outboundProcessorThread = new Thread(_outboundProcessor.ThreadRun); _outboundProcessorThread.Start(); }