// функция которую вызывает екземпляр класса SendOrdersAsync this.asyncReceiver // после получения ответа о результате отправки заявки public void AsyncReplayAdd(long id, uint code, CP2BLMessage reply) { //узнаем категорию и тип string category = (string)reply.get_Field("P2_Category"); uint type = (uint)reply.get_Field("P2_Type"); if (category != "FORTS_MSG") return; // на всякий случай блокируем очередь lock (this.parent.xQueueMsgLock) { try { if (!this.parent.queueMsg.Contains(id)) { this.parent.parent.logMsg("OPT Err: не удалось найти в локальном кеше запись с id: " + id.ToString(),1); return; } //блокируем локальную очередь lock (this.mQueueLock) { //добавляем в локальную очередь this.mQueue.Add(id, id); orderInfo ord = (orderInfo)this.parent.queueMsg[id]; TimeSpan span = (TimeSpan)(DateTime.Now - ord.sendTime); int p_code = (int)reply.get_Field("code"); int p_order_id = 0; string p_message = ""; p_message = reply.get_Field("message").ToString(); if (p_code == 0) { p_order_id = Convert.ToInt32(reply.get_Field("order_id")); } else { p_message = "Ошибка отправки. " + p_message; } this.parent.parent.logMsg(span.TotalMilliseconds.ToString() + "ms OPT Add: Выставление заявки id: " + id.ToString() + " ecode: " + code.ToString() + " status: " + p_code.ToString() + "-" + p_message + " order_no: " + p_order_id.ToString()); ord.setData(code, p_code, p_order_id, p_message); //обновляем в базе заявки this.updateOrdersInTable(); } } catch (Exception exp) { this.parent.parent.logMsg("FUT Add: Выставление заявки ошибка при получении ответа с биржи " + exp.Message + " " + exp.InnerException,1); } } }
public static void PrintReplyMsg(CP2BLMessage reply) { object c = reply.get_Field("P2_Category"); object t = reply.get_Field("P2_Type"); LogWriteLine("category " + c + "; type " + t); if( ( (string)c == "FORTS_MSG" ) && ( (System.UInt32)t == 101 ) ) { object code = reply.get_Field("code"); // разбираем ответ if ((System.Int32)code == 0) LogWriteLine("Adding order Ok, Order_id is "+reply.get_Field("order_id")); else LogWriteLine("Adding order fail, logic error is "+reply.get_Field("message")); } else if( ( (string)c == "FORTS_MSG" ) && ( (System.UInt32)t == 100 ) ) { LogWriteLine("Adding order fail, system level error "+reply.get_Field("err_code")+" "+reply.get_Field("message")); } else { LogWriteLine("Unexpected MQ message recieved; category " + c + "; type " + t); } }
// функция которую вызывает екземпляр класса SendOrdersAsync this.asyncReceiver // после получения ответа о результате отправки заявки public void AsyncReplay(long id, uint errCode, CP2BLMessage reply) { if (!this.parent.queueMsg.Contains(id)) { this.parent.parent.logMsg("Change Money: Ошибка: не удалось найти в локальном кеше запись с id: " + id.ToString()); return; } if (errCode == 0x6004) { this.parent.parent.logMsg("Change Money: Ошибка: Паревышен интервал ожидания ответа. Запись с id: " + id.ToString()); return; } //узнаем категорию и тип string category = (string)reply.get_Field("P2_Category"); uint type = (uint)reply.get_Field("P2_Type"); if (category != "FORTS_MSG") { string msg = ""; this.parent.parent.logMsg("Change Money: Ошибка: category " + category+" type: "+type.ToString()); this.parent.parent.logMsg( "Change Money: Msg: "+reply.get_Field("code")); return; } // на всякий случай блокируем очередь lock (this.parent.xQueueMsgLock) { try { if (!this.parent.queueMsg.Contains(id)) { this.parent.parent.logMsg("Change Money: Ошибка: не удалось найти в локальном кеше запись с id: " + id.ToString(),1); return; } //блокируем локальную очередь lock (this.mQueueLock) { //добавляем в локальную очередь this.mQueue.Add(id,id); orderInfo ord = (orderInfo)this.parent.queueMsg[id]; TimeSpan span = (TimeSpan)(DateTime.Now - ord.sendTime); int p_code=-1; string p_message=""; p_code = (int)reply.get_Field("code"); switch (type) { case 100: p_message = "Не удалось разобрать ответное сообщение " + reply.get_Field("Message").ToString(); break; case 0x68: if (p_code == 0) { p_message = "Клиентские лимиты изменены"; } else { p_message = "Ошибка отправки. " + reply.get_Field("Message").ToString(); } break; default: this.parent.parent.logMsg("Change Money: Ошибка выставление заявки id: " + id.ToString() + " ecode: " + errCode.ToString() + " status: " + p_code.ToString(),1); return; } this.parent.parent.logMsg(span.TotalMilliseconds.ToString() + "ms Change Money: Выставление заявки id: " + id.ToString() + " ecode: " + errCode.ToString() + " status: " + p_code.ToString() + "-" + p_message ); ord.setData(errCode, p_code, 0, p_message); //обновляем в базе заявки this.updateOrdersInTable(); } } catch (Exception exp) { this.parent.parent.logMsg("Change Money: Выставление заявки ошибка при получении ответа с биржи " + exp.Message + " " + exp.InnerException,1); } } }