protected virtual void Dispose(bool disposing) { if (disposed) { return; } if (disposing) { if (MT4 != null) { if (_mt4ID > 0) { Poll.Bringback(MT4); } else { Poll.Release(MT4); } } MT4 = null; Logger = null; } disposed = true; }
private void CopyProc() { TradeInfoEventArgs item = null; var sql = string.Empty; while (Utils.SignalWait(ref EnableRunning, _signal)) { _queNewTrades.TryDequeue(out item); try { var trade_type = item.TradeType; var trade = item.Trade; var key = string.Empty; var handler = OnNewTrade; //if (handler != null) // handler(this, item); //continue; try { if (string.IsNullOrWhiteSpace(InnerServer)) { sql = "SELECT user_code FROM user WHERE mt4=@mt4_id"; using (var cmd = new SQLiteCommand(sql, Source.CopySource)) { cmd.Parameters.AddWithValue("@mt4_id", item.Trade.login); var user_code_obj = cmd.ExecuteScalar(); var user_code = string.Empty; if (user_code_obj != null) { user_code = user_code_obj.ToString(); } item.Usercode = user_code; } sql = "SELECT mt4_from FROM copy_order WHERE order_to=@order_id"; using (var cmd = new SQLiteCommand(sql, Source.CopySource)) { cmd.Parameters.AddWithValue("@order_id", item.Trade.order); var from_obj = cmd.ExecuteScalar(); if (from_obj != null) { item.FromUsercode = from_obj.ToString(); item.ToUsercode = item.Usercode; } } } else { using (var reqSocket = _zmqContext.CreateSocket(SocketType.Req)) { reqSocket.Connect(InnerServer); dynamic reqBody = new ExpandoObject(); reqBody.__api = "InnerSearchUsercode"; reqBody.mt4_id = trade.login; reqBody.order_id = trade.order; var req = JsonConvert.SerializeObject(reqBody) as string; reqSocket.Send(req); var repBody = _jss.Deserialize <dynamic>(reqSocket.RecvString()); var code = Convert.ToInt32(repBody["ucode"]); if (code != 0) { item.Usercode = code.ToString(); } var from_code = Convert.ToInt32(repBody["from_ucode"]); if (from_code != 0) { item.FromUsercode = from_code.ToString(); item.ToUsercode = code.ToString(); } } } } catch (Exception e) { Utils.CommonLog.Error("组装订单出现问题,订单号{0},{1},{2}", trade.order, e.Message, e.StackTrace); } if (handler != null) { handler(this, item); } if ((trade_type == TRANS_TYPE.TRANS_ADD || trade_type == TRANS_TYPE.TRANS_UPDATE) && trade.cmd <= (int)Utils.TRADE_COMMAND.OP_SELL) { var apiEquity = Poll.New(); var equity = 0.0; var balance = 0.0; var free = 0.0; apiEquity.GetEquity(trade.login, ref equity, ref free, ref balance); Poll.Release(apiEquity); dynamic reqBody = new ExpandoObject(); reqBody.mt4_id = trade.login; reqBody.balance = balance; reqBody.__api = "InnerCheckCopyBalance"; using (var reqSocket = _zmqContext.CreateSocket(SocketType.Req)) { reqSocket.Connect(CopyCheckAddr); var req = JsonConvert.SerializeObject(reqBody) as string; reqSocket.Send(req); reqSocket.RecvString(); } } if (!Enable) { continue; } if (trade_type == TRANS_TYPE.TRANS_ADD && trade.comment == "copy") { continue; } Task.Factory.StartNew(() => { StartLink(trade_type, trade); }); } catch (Exception e) { Utils.CommonLog.Error(string.Format("复制服务出错,{0},{1}", e.Message, e.StackTrace)); } } ServerContainer.FinishStop(); }