예제 #1
0
        public void Handle(QuickFix.Message msg)
        {
            // check message type tag, if execution report then push execution report update
            QuickFix.MsgType msgType       = new QuickFix.MsgType();
            string           msgTypeString = msg.getHeader().getField(m_msgTypeTag);

            if (msgTypeString == m_MsgTypeTagValueToHandle)
            {
                Counters.IncrementCounter(CountersConstants.RejectionMsgs);
                string txt = string.Empty;
                if (msg.isSetField(58))
                {
                    txt = msg.getField(58);
                }

                try
                {
                    if (msg.isSetField(373))
                    {
                        string rejectReasonValue = string.Empty;
                        rejectReasonValue = msg.getField(373);
                        txt += ", " + Lookups.GetSessionRejectReason(rejectReasonValue).MessageEn;
                    }
                }
                catch (Exception ex)
                {
                    Counters.IncrementCounter(CountersConstants.ExceptionMessages);
                    SystemLogger.WriteOnConsoleAsync(true, string.Format("Error getting reason of rejected message: {0}", ex.Message), ConsoleColor.Red, ConsoleColor.Black, false);
                }
                // create IResponseMessage
                SystemLogger.WriteOnConsoleAsync(true, string.Format("Order Rejected, Details {0} ,  Reason: {1} ", msg.ToXML(), txt), ConsoleColor.Red, ConsoleColor.White, false);
            }
        }
예제 #2
0
 private void Route(Message message)
 {
     try
     {
         string msgTypeString = message.getHeader().getField(m_msgTypeTag);
         // if you can extract the key (ClOrdID here)
         // then let specific processor to handle this msg by orderid
         if (message.isSetField(11))
         {
             string orderID = message.getField(11).Split(new char[] { '-' })[0];
             _router.PushMessage(orderID, message);
         }
         else // if not then send to next processor
         {
             _router.PushMessage(message);
         }
         //else if (msgTypeString == "9" || msgTypeString == "8")
         //{
         //    string orderID = message.getField(11).Split(new char[] { '-' })[0];
         //    _router.PushMessage(orderID, message);
         //}
     }
     catch (Exception ex)
     {
         _router.PushMessage(message);
         SystemLogger.WriteOnConsoleAsync(true, "error while routing response: " + ex.Message, ConsoleColor.Red, ConsoleColor.Black, true);
     }
 }
예제 #3
0
 private static void UpdateClientInternal(IReplicationResponse update)
 {
     //for (int i = 0; i < 10; i++)
     //{
     try
     {
         ReplicatedSessionSubscriberDetails user = null;
         try
         {
             user = GetDetails(update.ClientKey);
         }
         catch (Exception inex)
         {
             SystemLogger.WriteOnConsoleAsync(true, string.Format("Error UpdateClientInternal {0} , Error: {1}, Retrying to send, you will get the same error if retrial failed", update.ClientKey.ToString(), inex.Message), ConsoleColor.Red, ConsoleColor.Black, true);
             user = GetDetails(new Guid(update.ClientKey.ToString()));
         }
         user.SessionRemoteQueue.Send(update);
         //break;
         //SystemLogger.WriteOnConsole(true, string.Format("Message sent of type ({0}) to client {1}", update.GetType().ToString(), update.ClientKey), ConsoleColor.Cyan, ConsoleColor.Black, false);
     }
     catch (Exception ex)
     {
         Counters.IncrementCounter(CountersConstants.ExceptionMessages);
         SystemLogger.WriteOnConsoleAsync(true, string.Format("Error UpdateClientInternal: {0}", ex.Message), ConsoleColor.Red, ConsoleColor.Black, true);
     }
     // }
 }
예제 #4
0
 internal static void ReplicateFixMessage(QuickFix.Message msg)
 {
     try
     {
         lock (m_LockedObj)
         {
             string msgTypeString   = msg.getHeader().getField(m_msgTypeTag);
             Guid[] subscribersKeys = GetFixMsgSubscribers(msgTypeString);
             if (subscribersKeys != null && subscribersKeys.Length > 0)
             {
                 foreach (Guid key in subscribersKeys)
                 {
                     PushUpdates(new IReplicationResponse[] { new ReplicatedFixMsg()
                                                              {
                                                                  ClientKey = key, FixMessage = msg.ToString(), ResponseDateTime = DateTime.Now, FixVersion = msg.getHeader().getField(m_fixMsgVersionTag)
                                                              } });
                 }
             }
         }
     }
     catch (Exception ex)
     {
         Counters.IncrementCounter(CountersConstants.ExceptionMessages);
         SystemLogger.WriteOnConsoleAsync(true, string.Format("ReplicateFixMessage, Error: {0} ", ex.Message), ConsoleColor.Red, ConsoleColor.Black, true);
     }
 }
        internal static void RouteFixMessageToClient(string sessionCode, string ordID, Message message)
        {
            try
            {
                // get fix client session by registered ClientAllocID
                // overwrite sender and target with clients data
                // overwrite ClientAllocId (Tag 11)
                // route to client
                lock (_lockObj)
                {
                    if (!_sessionCode_sessionDetails.ContainsKey(sessionCode))
                    {
                        SystemLogger.WriteOnConsoleAsync(true, string.Format("Error routing fix msg! Session {0} not found!", sessionCode), ConsoleColor.Red, ConsoleColor.White, false);
                        return;
                    }

                    // get rep session except the session that need it as a reply
                    SessionID session = _sessionCode_sessionDetails[sessionCode].Session;
                    message.removeField(49);
                    message.removeField(56);
                    message.removeField(34);
                    message.removeField(10);
                    SystemLogger.WriteOnConsoleAsync(true, string.Format("Routing Fix Message To Client {0}", session.ToString()), ConsoleColor.Blue, ConsoleColor.White, false);
                    Session.sendToTarget(message, session);
                    Replicate(message, sessionCode);
                }
            }
            catch (Exception ex)
            {
                SystemLogger.WriteOnConsoleAsync(true, string.Format("Error routing fix msg ClientAllocID {0} : {1}", ordID, ex.ToString()), ConsoleColor.Red, ConsoleColor.Black, true);
            }
        }
        public static void InitializeServer(string settingsPath)
        {
            try
            {
                _targetCompID_SessionCode   = new Dictionary <string, string>();
                _sessionCode_sessionDetails = new Dictionary <string, SessionInfo>();
                _sessionID_sessionCode      = new Dictionary <string, string>();
                _sessionsCodesToRep         = new List <string>();

                using (DataLayer.DatabaseMethods db = new DataLayer.DatabaseMethods())
                {
                    foreach (DataRow row in db.GetTable("FixSessionCode").Rows)
                    {
                        string targetCompID = row["TargetCompID"].ToString();
                        string code         = row["Code"].ToString();
                        bool   isRep        = Convert.ToBoolean(row["IsRep"]);
                        _targetCompID_SessionCode.Add(targetCompID, code);
                        if (isRep)
                        {
                            _sessionsCodesToRep.Add(code);
                        }
                    }
                }
                SessionSettings settings = new SessionSettings(settingsPath);
                _acceptor = new SocketAcceptor(new SvcFixServer(), new FileStoreFactory(settings), settings, new FileLogFactory(settings), new DefaultMessageFactory());
                _acceptor.start();
                SystemLogger.WriteOnConsoleAsync(true, string.Format("Fix Server Started Up !"), ConsoleColor.Green, ConsoleColor.Black, false);
            }
            catch (Exception e)
            {
                SystemLogger.WriteOnConsoleAsync(true, string.Format("InitializeServer Error, Error {0}", e.ToString()), ConsoleColor.Red, ConsoleColor.Black, true);
            }
        }
        internal static void Replicate(Message message, string exceptSessionCode = null)
        {
            List <string> repSessionCodes = null;

            if (exceptSessionCode != null)
            {
                repSessionCodes = _sessionsCodesToRep.Where(y => y != exceptSessionCode).ToList();
            }
            else
            {
                repSessionCodes = _sessionsCodesToRep.ToList();// new instance
            }
            repSessionCodes.ForEach(code =>
            {
                SessionID session = _sessionCode_sessionDetails[code].Session;
                message.removeField(49);
                message.removeField(56);
                message.removeField(34);
                message.removeField(10);
                SystemLogger.WriteOnConsoleAsync(true, string.Format("Replicating Fix Message To Client {0}", session.ToString()), ConsoleColor.Blue, ConsoleColor.White, false);
                Session.sendToTarget(message, session);
            });
            repSessionCodes.Clear();
            repSessionCodes = null;
        }
예제 #8
0
 public void onLogon(SessionID sessionID)
 {
     _senderCompID = sessionID.getSenderCompID();
     _targetCompID = sessionID.getTargetCompID();
     _FixSessionStatusChangedDelegate(Beltone.Services.Fix.Entities.FixSessionStatus.Connected);
     SystemLogger.WriteOnConsoleAsync(true, "Logged In: session id " + sessionID.ToString(), ConsoleColor.Green, ConsoleColor.Yellow, false);
 }
 public void onLogon(QuickFix.SessionID value)
 {
     //_loggedOn = true;
     _sessionID = value;
     SystemLogger.WriteOnConsoleAsync(true, "Client Logged In" + value.ToString(), ConsoleColor.Green, ConsoleColor.Yellow, false);
     //Console.WriteLine("OnLogon" + value.toString());
 }
        private void HandleUpdatedAllocation(AllocRes msg)
        {
            // update might be new,increase or decrease update
            // search order
            SingleOrder foundOrd = OrdersManager.GetOrder(msg.ReqID);

            if (foundOrd == null)
            {
                SystemLogger.WriteOnConsoleAsync(true, string.Format("Allocation Response not handled because Order ReqID [{0}] not found!"), ConsoleColor.Red, ConsoleColor.White, false);
                return;
            }
            lock (foundOrd)
            {
                // check status
                // switch btw
                // if PendingNew then send new order
                string actionOnAllocResponse = foundOrd.Data[SingleOrderProperties.ActionOnAllocResponse].ToString();



                switch (actionOnAllocResponse)
                {
                case ActionOnAllocResponse.SendNewOrder:
                    OrdersManager.HandleAllocationNewOrderAccepted(foundOrd, Fix.Entities.McsdSourceMessage.McsdAccepted);
                    break;

                case ActionOnAllocResponse.ModifyOrder:
                    OrdersManager.HandleAllocationUpdateOrderAccepted(foundOrd, Fix.Entities.McsdSourceMessage.McsdAccepted);
                    break;

                case ActionOnAllocResponse.CancelOrder:
                    OrdersManager.HandleAllocationCancelOrderAccepted(foundOrd);
                    break;

                case ActionOnAllocResponse.DoNothing:
                    SystemLogger.WriteOnConsoleAsync(true, string.Format("Do nothing Allocation Response not handled ReqID [{0}] ResponseType is {1}", msg.ReqID, msg.ResType), ConsoleColor.Red, ConsoleColor.White, false);
                    break;

                default:
                    SystemLogger.WriteOnConsoleAsync(true, string.Format("Allocation Response not handled ReqID [{0}] ResponseType is {1} ", msg.ReqID, msg.ResType), ConsoleColor.Red, ConsoleColor.White, false);
                    break;
                }


                //if (status == ORD_STATUS.PendingNew)
                //    OrdersManager.HandleAllocationNewOrderAccepted(foundOrd, Fix.Entities.McsdSourceMessage.McsdAccepted);

                //else if (status == ORD_STATUS.Canceled)
                //    OrdersManager.HandleAllocationCancelOrderAccepted(foundOrd);
                //else if (isActive)
                //    OrdersManager.HandleAllocationUpdateOrderAccepted(foundOrd, Fix.Entities.McsdSourceMessage.McsdAccepted);
                //else
                //    SystemLogger.WriteOnConsoleAsync(true, string.Format("Allocation Response not handled ReqID [{0}] status [{1}]  IsActive [{2}]", msg.ReqID, status, isActive), ConsoleColor.Red, ConsoleColor.White, false);
            }
        }
예제 #11
0
        private static void CheckCallbacksAlive()
        {
            lock (m_LockedObj)
            {
                List <Guid> callbacksToDelete = new List <Guid>();
                foreach (KeyValuePair <Guid, ReplicatedSessionSubscriberDetails> callback in m_sessions)
                {
                    // remove who didnt response for configured time
                    TimeSpan diff = callback.Value.LastHeartBeatResponse > callback.Value.LastHeartBeatRequest ? callback.Value.LastHeartBeatResponse - callback.Value.LastHeartBeatRequest : callback.Value.LastHeartBeatRequest - callback.Value.LastHeartBeatResponse;
                    if (diff.TotalMilliseconds > m_SessionReqResHeartBeatDiffInMilliSec)
                    {
                        callbacksToDelete.Add(callback.Key);
                    }

                    // now check the callbacks alive
                    if (!callbacksToDelete.Contains(callback.Key))
                    {
                        try
                        {
                            callback.Value.SessionRemoteQueue.Send(new ReplicationSessionAreYouAlive()
                            {
                                ClientKey = callback.Key, ResponseDateTime = DateTime.Now
                            });
                            callback.Value.LastHeartBeatRequest = DateTime.Now;
                        }
                        catch (Exception ex)
                        {
                            callback.Value.LastHeartBeatRequest = DateTime.Now;
                            SystemLogger.WriteOnConsoleAsync(true, string.Format("Error sending HeartBeat to callback : {0}, Error: {1}", callback.Key, ex.Message), ConsoleColor.Red, ConsoleColor.Black, true);
                        }
                    }
                }

                if (callbacksToDelete.Count > 0)
                {
                    foreach (Guid callbackKey in callbacksToDelete)
                    {
                        RemoveCallback(callbackKey);
                        SystemLogger.WriteOnConsoleAsync(true, "replication session removed " + callbackKey.ToString(), ConsoleColor.Magenta, ConsoleColor.Black, false);
                    }
                }
            }
            //lock (m_callbacks)
            //{
            //    foreach (IETF_Callback callback in m_callbacks.Values.Select(b => b.Callback))
            //    {
            //        ICommunicationObject commObj = callback as ICommunicationObject;
            //        if (commObj != null && (commObj.State == CommunicationState.Closed || commObj.State == CommunicationState.Faulted))
            //        {
            //            // Code to remove callback channel from any internal lists you might have, other processing
            //        }
            //    }
            //}
        }
예제 #12
0
 private static void Unsubscribe()
 {
     try
     {
         m_clientMcsd.Unsubscribe();
     }
     catch (Exception exp)
     {
         SystemLogger.LogErrorAsync("Unsubscribtion from MCSD Service Failed. Error : " + exp.ToString());
         SystemLogger.WriteOnConsoleAsync(true, "Unsubscribtion from MCSD Service Failed. Error : " + exp.ToString(), ConsoleColor.Red, ConsoleColor.Black, true);
     }
 }
        public void Handle(QuickFix.Message msg)
        {
            // check message type tag
            QuickFix.MsgType msgType       = new QuickFix.MsgType();
            string           msgTypeString = msg.getHeader().getField(m_msgTypeTag);

            if (msgTypeString == m_MsgTypeTagValueToHandle)
            {
                SystemLogger.WriteOnConsoleAsync(true, string.Format("new message recieved, Type: {0}, Message: '{1}'", msgTypeString, msg.ToXML()), ConsoleColor.Cyan, ConsoleColor.Black, false);
                // create IResponseMessage
            }
        }
예제 #14
0
 private static void OnClientUpdate(IAsyncResult res)
 {
     try
     {
         m_iReplicatedMessageDelegate.EndInvoke(res);
     }
     catch (Exception ex)
     {
         Counters.IncrementCounter(CountersConstants.ExceptionMessages);
         SystemLogger.WriteOnConsoleAsync(true, string.Format("Error OnClientUpdate: {0}", ex.Message), ConsoleColor.Cyan, ConsoleColor.Black, false);
     }
 }
예제 #15
0
        public void Handle(QuickFix.Message msg)
        {
            // check message type tag, if execution report then push execution report update
            QuickFix.MsgType msgType       = new QuickFix.MsgType();
            string           msgTypeString = msg.getHeader().getField(m_msgTypeTag);

            if (msgTypeString == m_MsgTypeTagValueToHandle)
            {
                Counters.IncrementCounter(CountersConstants.BusinessRejectRspMsgs);
                SystemLogger.WriteOnConsoleAsync(true, string.Format("new message recieved, Type: {0}, Message: '{1}'", msgTypeString, msg.ToXML()), ConsoleColor.Cyan, ConsoleColor.Black, false);
                // create IResponseMessage
            }
        }
예제 #16
0
 static void sh_Closed(object sender, EventArgs e)
 {
     try
     {
         Counters.IncrementCounter(CountersConstants.ExceptionMessages);
         string[] cc = SystemConfigurations.GetAppSetting("SupportMailCC").Split(',');
         NotificationSender.Send(true, true, false, SystemConfigurations.GetAppSetting("SupportMailFrom"), SystemConfigurations.GetAppSetting("SupportMailTo"), cc, "Fix Orders Service Closed", "Fix Orders Service Closed",
                                 string.Format("Fix Orders Service has been closed on machine {0} at {1}", SystemConfigurations.GetMachineIP(), DateTime.Now.ToString()), null);
     }
     catch (Exception ex)
     {
         SystemLogger.WriteOnConsoleAsync(true, "Sending Mail Error: " + ex.Message, ConsoleColor.Red, ConsoleColor.Black, true);
     }
 }
예제 #17
0
 static void m_callbacksAliveChecker_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
 {
     try
     {
         CheckCallbacksAlive();
     }
     catch (Exception ex)
     {
         if (!m_sessionAliveChecker.Enabled)
         {
             m_sessionAliveChecker.Start();
         }
         SystemLogger.WriteOnConsoleAsync(true, string.Format("Error m_callbacksAliveChecker_Elapsed, Error: {0}", ex.Message), ConsoleColor.Red, ConsoleColor.Black, true);
     }
 }
예제 #18
0
 public void Process(object msg)
 {
     //ReplicationSessionSubscribersList.ReplicateFixMessage((QuickFix.Message)msg);
     foreach (IResponseMcsdMessageHandler <AllocRes> handler in m_McsdresponseHandlers)
     {
         try
         {
             handler.Handle((AllocRes)msg);
         }
         catch (Exception ex)
         {
             Counters.IncrementCounter(CountersConstants.ExceptionMessages);
             SystemLogger.WriteOnConsoleAsync(true, string.Format("Error handling mcsd response message of type {0}, Error: {1}", msg.GetType(), ex.ToString()), ConsoleColor.Red, ConsoleColor.Black, true);
         }
     }
 }
예제 #19
0
        private static void InitializeService()
        {
            AdminSvcHost          = new ServiceHost(typeof(FixAdminSvc));
            AdminSvcHost.Closed  += new EventHandler(shAdmin_Closed);
            AdminSvcHost.Faulted += new EventHandler(shAdmin_Faulted);
            AdminSvcHost.Open();
            SystemLogger.WriteOnConsoleAsync(true, "Admin Service started up successfully!", ConsoleColor.Green, ConsoleColor.Black, false);

            OrdSvcHost          = new ServiceHost(typeof(FixOrdSvc));
            OrdSvcHost.Opened  += new EventHandler(sh_Opened);
            OrdSvcHost.Closed  += new EventHandler(sh_Closed);
            OrdSvcHost.Faulted += new EventHandler(sh_Faulted);
            OrdSvcHost.UnknownMessageReceived += new EventHandler <UnknownMessageReceivedEventArgs>(sh_UnknownMessageReceived);
            OrdSvcHost.Open();
            SystemLogger.WriteOnConsoleAsync(true, "Orders Service started up successfully!", ConsoleColor.Green, ConsoleColor.Black, false);
        }
예제 #20
0
            private void Route(Message message)
            {
                // Route To WCF Client or FIX Client
                try
                {
                    // if you can extract the OrdID (Tag 11)
                    if (message.isSetField(11))
                    {
                        bool     isWcf  = true;
                        string[] msgArr = message.getField(11).Split(new string[] { _msgSplit }, StringSplitOptions.None);
                        string   prefix = msgArr[0];
                        if (prefix == _fixPrefixCode)
                        {
                            isWcf = false;
                        }
                        //else(prefix == _wcfPrefixCode)

                        message.removeField(11);
                        if (!isWcf)
                        {
                            // Ex: F-A-101
                            string sessionCode = msgArr[1];
                            string ordID       = msgArr[2];
                            message.setField(11, ordID);
                            RouteDirectFixClient(sessionCode, ordID, message);
                        }
                        else
                        {
                            // Ex: F-101
                            string ordID = msgArr[1];
                            message.setField(11, ordID);
                            SvcFixServer.Replicate(message);
                            RouteToWcfClient(ordID, message);
                        }
                    }
                    else // if not then send to next processor
                    {
                        _router.PushMessage(message);
                    }
                }
                catch (Exception ex)
                {
                    //_router.PushMessage(message);
                    SystemLogger.WriteOnConsoleAsync(true, string.Format("error while routing response OrdIDID [{0}] : {1}", message.isSetField(11) ? message.getField(11) : "Not Found In Fix Msg", ex.Message), ConsoleColor.Red, ConsoleColor.Black, true);
                }
            }
        public void onLogout(SessionID sessionID)
        {
            lock (_lockObj)
            {
                /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                ///// you should keep sending the messages even if the initiator logged out, so quickfix will send the previous message in case re-logged in
                /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                //m_sessionIDs.Remove(sessionID);
                //SystemLogger.WriteOnConsoleAsync(true, string.Format("removed sessionID: {0} ", sessionID.ToString()), ConsoleColor.Magenta, ConsoleColor.Black, false);
            }

            SystemLogger.WriteOnConsoleAsync(true, string.Format("loggedout sessionID: {0} ", sessionID.ToString()), ConsoleColor.DarkYellow, ConsoleColor.White, false);
        }
예제 #22
0
        private static void Subscribe()
        {
            try
            {
                Console.WriteLine("Try connect to MCSDR .....");

                //  if(m_clientMcsd == null)



                subRequest.Username            = m_MCSDUserName;
                subRequest.Password            = m_MCSD_Password;
                subRequest.QueueName           = m_MCSDresponseQueueName;
                subRequest.QueueIP             = m_MCSDresponseQueueIP;
                subRequest.FlushUpdatesOffline = false;

                m_clientMcsd = m_factory.CreateChannel();


                adminMsg = m_clientMcsd.Subscribe(subRequest);

                _IsMcsdSessionUp = true;

                ((ICommunicationObject)m_clientMcsd).Closed  += MCSDManager_Closed;
                ((ICommunicationObject)m_clientMcsd).Faulted += MCSDManager_Faulted;
                ((ICommunicationObject)m_clientMcsd).Opened  += McsdGatwayManager_Opened;

                SystemLogger.LogEventAsync("Connected to MCSD successfully !");
                SystemLogger.WriteOnConsoleAsync(true, "Connected to MCSD successfully !", ConsoleColor.Green, ConsoleColor.Black, false);
            }
            catch (Exception exp)
            {
                //SystemLogger.LogErrorAsync("Subscribtion to MCSD Service Failed. Error : " + exp.ToString());
                SystemLogger.WriteOnConsoleAsync(true, "Subscribtion to MCSD Service Failed. Error : " + exp.Message, ConsoleColor.Red, ConsoleColor.Black, false);
            }

            finally
            {
                if (_IsMcsdSessionUp == false)
                {
                    System.Threading.Thread.Sleep(3000);
                    Subscribe();
                }
            }
        }
예제 #23
0
 private void ReadingPushedMsgs()
 {
     while (true)
     {
         try
         {
             object msg = _queue.Dequeue();
             _msgProcessor.Process(msg);
         }
         catch (Exception ex)
         {
             SystemLogger.WriteOnConsoleAsync(true, "Error reading msg Error: " + ex.Message, ConsoleColor.Red, ConsoleColor.Black, true);
         }
         finally
         {
         }
     }
 }
        public void onLogon(SessionID sessionID)
        {
            lock (_lockObj)
            {
                if (!_targetCompID_SessionCode.ContainsKey(sessionID.getTargetCompID()))
                {
                    SystemLogger.WriteOnConsoleAsync(true, string.Format("kicked sessionID: {0} because not found in database", sessionID.ToString()), ConsoleColor.White, ConsoleColor.Red, false);
                    Session.lookupSession(sessionID).logout();
                    return;
                }

                //sessionID.getSenderCompID();
                //FixSessions.Add(sessionID.ToString(), sessionID);
                SystemLogger.WriteOnConsoleAsync(true, string.Format("loggedin sessionID: {0} ", sessionID.ToString()), ConsoleColor.DarkMagenta, ConsoleColor.White, false);
            }
            // test send
            //SendFixMessageToAllConnections(new QuickFix44.ExecutionReport(new OrderID("324"),new ExecID("234"), new ExecType(ExecType.FILL), new OrdStatus(OrdStatus.FILLED), new Side(Side.BUY), new LeavesQty(324), new CumQty(123), new AvgPx(12)));
        }
 public static void BroadcastAdminMsg(IFromAdminMsg[] msgs)
 {
     foreach (KeyValuePair <Guid, SessionInfo> callback in _key_Session)
     {
         try
         {
             IFixAdminCallback cb = callback.Value.Callback;
             if (cb == null || !callback.Value.IsOnline) // admin msgs dont need to be flushed as offline updates
             {
                 continue;
             }
             cb.PushAdminMsg(msgs);
         }
         catch (Exception inex)
         {
             SystemLogger.WriteOnConsoleAsync(true, string.Format("Error BroadcastAdminMsg  , Error: {0}", inex.Message), ConsoleColor.Red, ConsoleColor.Black, true);
         }
     }
 }
예제 #26
0
 void RecievingMsgs()
 {
     while (true)
     {
         try
         {
             object[] msg = (object[])_routerQueue.Dequeue();
             Route(msg[0], msg[1]);
         }
         catch (Exception ex)
         {
             Counters.IncrementCounter(CountersConstants.ExceptionMessages);
             SystemLogger.WriteOnConsoleAsync(true, "Reading Routed Msg Error: " + ex.Message, ConsoleColor.Red, ConsoleColor.Black, true);
         }
         finally
         {
         }
     }
 }
예제 #27
0
 public void Process(object msg)
 {
     foreach (IRequestMessageHandler <IRequestMessage> handler in m_requestHandlers)
     {
         try
         {
             if (handler.Handle((IRequestMessage)msg))
             {
                 break;
             }
             //SystemLogger.WriteOnConsole(true, string.Format("Couldn't find handler for message type", msg.GetType()), ConsoleColor.Red, ConsoleColor.Black, true);
         }
         catch (Exception ex)
         {
             Counters.IncrementCounter(CountersConstants.ExceptionMessages);
             SystemLogger.WriteOnConsoleAsync(true, string.Format("Error handling request message of type {0}, Error: {1}", msg.GetType(), ex.ToString()), ConsoleColor.Red, ConsoleColor.Black, true);
         }
     }
 }
        private void HandleRejectAllocation(AllocRes msg)
        {
            // update might be new,increase or decrease update
            // search order
            SingleOrder foundOrd = OrdersManager.GetOrder(msg.ReqID);

            if (foundOrd == null)
            {
                SystemLogger.WriteOnConsoleAsync(true, string.Format("Allocation Response not handled because Order ReqID [{0}] not found!"), ConsoleColor.Red, ConsoleColor.White, false);
                return;
            }
            lock (foundOrd)
            {
                string actionOnAllocResponse = foundOrd.Data[SingleOrderProperties.ActionOnAllocResponse].ToString();



                switch (actionOnAllocResponse)
                {
                case ActionOnAllocResponse.SendNewOrder:
                    OrdersManager.HandleAllocationNewOrderRefused(msg, foundOrd);
                    break;

                case ActionOnAllocResponse.ModifyOrder:
                    OrdersManager.HandleAllocationUpdateOrderRefused(msg, foundOrd);
                    break;

                case ActionOnAllocResponse.CancelOrder:
                    OrdersManager.HandleAllocationCancelOrderRefused(msg, foundOrd);
                    break;

                case ActionOnAllocResponse.DoNothing:
                    SystemLogger.WriteOnConsoleAsync(true, string.Format("Do nothing Allocation Response not handled ReqID [{0}] ResponseType is {1}", msg.ReqID, msg.ResType), ConsoleColor.Red, ConsoleColor.White, false);
                    break;

                default:
                    SystemLogger.WriteOnConsoleAsync(true, string.Format("Allocation Response not handled ReqID [{0}] ResponseType is {1} ", msg.ReqID, msg.ResType), ConsoleColor.Red, ConsoleColor.White, false);
                    break;
                }
            }
        }
        public void fromApp(Message message, SessionID sessionID)
        {
            //SystemLogger.WriteOnConsoleAsync(true, string.Format("fromApp: {0} ", message.ToString()), ConsoleColor.Green, ConsoleColor.Black, false);
            //SystemLogger.LogEventAsync(string.Format("fromApp: {0} ", message.ToString()));

            //crack(message, sessionID);

            // extract clientAllocID
            // check max char length
            // prefix clientAllocID with "F" stand for "Fix Connection"
            // add to current cache
            // update db
            // send to MCDR
            try
            {
                lock (_lockObj)
                {
                    if (message.isSetField(11))
                    {
                        string target = sessionID.getTargetCompID();
                        if (!_targetCompID_SessionCode.ContainsKey(target))
                        {
                            SystemLogger.WriteOnConsoleAsync(true, string.Format("Error recieveing fix msg from Target {0} Not FOund! : ", target), ConsoleColor.White, ConsoleColor.Red, true);
                            return;
                        }
                        string msgKey      = message.getField(11);
                        string sessionCode = _targetCompID_SessionCode[target];
                        string mapKey      = string.Format("{0}{1}{2}{3}", _fixPrefix, sessionCode, _msgSplit, msgKey);

                        message.removeField(11);
                        message.setField(11, mapKey);

                        MarketFixClient.SendDirectFix(message);
                    }
                }
            }
            catch (Exception ex)
            {
                SystemLogger.WriteOnConsoleAsync(true, "Error recieveing fix msg from Target : " + ex.ToString(), ConsoleColor.Red, ConsoleColor.Black, true);
            }
        }
예제 #30
0
 internal static void HandleSubscriberRequest(IReplicationRequest req)
 {
     try
     {
         Type msgType = req.GetType();
         if (typeof(IReplicationRequest).IsAssignableFrom(msgType))
         {
             if (typeof(ReplicationSessionAmAlive) == msgType)
             {
                 ReplicationSessionAmAlive alive = (ReplicationSessionAmAlive)req;
                 GetDetails(alive.ClientKey).LastHeartBeatResponse = DateTime.Now;
                 //SystemLogger.WriteOnConsole(true, string.Format("Client {0} is alive @ {1} el7amdolelah!", alive.ClientKey, DateTime.Now), ConsoleColor.Gray, ConsoleColor.Black, false);
             }
         }
     }
     catch (Exception ex)
     {
         Counters.IncrementCounter(CountersConstants.ExceptionMessages);
         SystemLogger.WriteOnConsoleAsync(true, string.Format("Error setting client LastHeartBeatResponse, Error: {0} ", ex.Message), ConsoleColor.Cyan, ConsoleColor.Black, true);
     }
 }