public override void CancelOrder(long orderId, int botId)
        {
            CCommandStucture cs = new CCommandStucture();

            cs.CommandName = "FutDelOrder";
            cs.Command     = new CCommandDelOrder(orderId);
            // m_connOrderControl.CommandQueue.Add(cs);
            m_dictConnOrderControl[botId].CommandQueue.Add(cs);
        }
        public override void CancelAllOrders(int buy_sell, int ext_id, string isin, int botId)
        {
            CCommandStucture cs = new CCommandStucture();

            cs.CommandName = "FutDelUserOrders";
            cs.Command     = new CCommandDelUserOrders(buy_sell, ext_id, isin);
            // m_connOrderControl.CommandQueue.Add(cs);
            //m_dictConnOrderControl[botId].CommandQueue.Add(cs);
            m_dictConnOrderControl[botId].CommandQueue.Add(cs);
            Log("Cancel all orders. ext_id=" + ext_id + " isin=" + isin);
        }
        private void ProcessCommandStructure(CCommandStucture cs)
        {
            switch (cs.CommandName)
            {
            case "FutAddOrder": AddOrder(cs); break;

            case "FutDelOrder": DeleteOrder(cs); break;

            case "FutDelUserOrders": DeleteUserOrders(cs); break;

            case "Dummy": ProcessDummyStruct(); break;
            }
        }
        private void ThreadProcessCommands()
        {
            CommandQueue = new System.Collections.Concurrent.BlockingCollection <CCommandStucture>();

            CCommandStucture comStruct = new CCommandStucture();

            comStruct.CommandName = "Dummy";   //to remove first iteration delay
            CommandQueue.Add(comStruct);

            foreach (CCommandStucture cs in CommandQueue.GetConsumingEnumerable())
            {
                if (bEnableCommandQueue)
                {
                    Log("Process command struct");
                    ProcessCommandStructure(cs);
                }
            }
        }
        private void AddOrder(CCommandStucture cs)
        {
            CCommandAddOrder ao = (CCommandAddOrder)cs.Command;

            Message     sendMessage = m_publishersList[0].Publisher.NewMessage(MessageKeyType.KeyName, "FutAddOrder");
            DataMessage smsg        = (DataMessage)sendMessage;



            DateTime dtExp = DateTime.Now.AddHours(48);

            try
            {
                smsg.UserId = (uint)ao.UserId;

                smsg["broker_code"].set(ao.Broker_code);
                smsg["isin"].set(ao.Isin);
                smsg["client_code"].set(ao.Client_code);
                smsg["type"].set((int)ao.Type);
                smsg["dir"].set((int)ao.Dir);    //1 -buy 2 -sell
                smsg["amount"].set(ao.Amount);
                smsg["price"].set(ao.Price);
                smsg["ext_id"].set(ao.Ext_id);
                smsg["date_exp"].set(dtExp.ToString("yyyyMMdd"));



                m_publishersList[0].Publisher.Post(sendMessage, PublishFlag.NeedReply);
                // Log("Add order isin=" + smsg["isin"] + " type=" + smsg["type"] + " dir=" + smsg["dir"] + " price="  +  smsg["price"] +  " amount=" + smsg["amount"]);
                Log("Add order isin=" + ao.Isin + " type=" + ao.Type + " dir=" + ao.Dir + " price=" + ao.Price + " amount=" + ao.Amount + " ext_id=" + ao.Ext_id);
            }
            catch (Exception e)
            {
                if ((DateTime.Now - m_dtLastOKConnection).TotalSeconds < m_parSecsSinceConnOK)
                {
                    Log("Error in  CConnection.AddOrder. " + e.Message);
                    Error("Error in  CConnection.AddOrder. ", e);
                }
            }



            sendMessage.Dispose();
        }
        //TODO remove supervisorID
        public override void AddOrder(int botId, string isin, decimal price, EnmOrderDir dir, decimal dcmlAmount)
        {
            int iAmount         = Convert.ToInt32(dcmlAmount);
            CCommandStucture cs = new CCommandStucture();

            cs.CommandName = "FutAddOrder";

            cs.Command = (object)new CCommandAddOrder(1, Broker_code, isin, Client_code, OrderTypes.Part, dir, iAmount, price.ToString(), botId);
            //m_connOrderControl.CommandQueue.Add(cs);
            int connId = 0;

            /*if (supervisorID == 0)*/
            connId = botId;

            /*else
             *  connId = supervisorID;
             */
            m_dictConnOrderControl[connId].CommandQueue.Add(cs);

            Log("Add new order dir=" + dir + " amount=" + dcmlAmount + " price=" + price + " botId=" + botId);
        }
        private void DeleteOrder(CCommandStucture cs)

        {
            try
            {                                                                                           //TODO change to commandname
                Message     sendMessage = m_publishersList[0].Publisher.NewMessage(MessageKeyType.KeyName, "FutDelOrder");
                DataMessage smsg        = (DataMessage)sendMessage;

                CCommandDelOrder delo = (CCommandDelOrder)cs.Command;

                smsg["order_id"].set(delo.Order_id);


                m_publishersList[0].Publisher.Post(sendMessage, PublishFlag.NeedReply);


                smsg.Dispose();
            }catch (Exception e)
            {
                Log("Error deleting order. " + e.Message);
                Error("Error deleting order", e);
            }
        }
        private void DeleteUserOrders(CCommandStucture cs)
        {
            try
            {
                Message     sendMessage = m_publishersList[0].Publisher.NewMessage(MessageKeyType.KeyName, cs.CommandName);
                DataMessage smsg        = (DataMessage)sendMessage;

                CCommandDelUserOrders delu = (CCommandDelUserOrders)cs.Command;

                smsg["buy_sell"].set(delu.Buy_sell);
                smsg["non_system"].set(0);
                smsg["code"].set(m_plaza2Connector.Client_code);
                smsg["ext_id"].set(delu.Ext_id);
                smsg["isin"].set(delu.Isin);
                m_publishersList[0].Publisher.Post(sendMessage, PublishFlag.NeedReply);
                Log("Cancel user orders Buy_Sell=" + delu.Buy_sell + " Ext_id" + delu.Ext_id + " Isin=" + delu.Isin);
            }
            catch (Exception e)
            {
                string err = "Error delete user orders";
                Log(err);
                Error(err, e);
            }
        }