private void Process_Trader_Res() { ProtoOATraderRes args = Serializer.Deserialize <ProtoOATraderRes>(_processorMemoryStream); TradingAccounts[args.ctidTraderAccountId].Trader = args.Trader; Log.Info("ProtoOATraderRes:: " + $"ctidTraderAccountId: {args.ctidTraderAccountId}; " + $"brokerName: {args.Trader.brokerName}; " + $"traderLogin: {args.Trader.traderLogin}; " + $"accountType: {args.Trader.accountType}; " + $"accessRights: {args.Trader.accessRights}; " + $"Balance: {args.Trader.Balance}; " + $"balanceVersion: {args.Trader.balanceVersion}; " + $"ibBonus: {args.Trader.ibBonus}; " + $"managerBonus: {args.Trader.managerBonus}; " + $"maxLeverage: {args.Trader.maxLeverage}; " + $"swapFree: {args.Trader.swapFree}; " + $"depositAssetId: {args.Trader.depositAssetId}; " + $"isLimitedRisk: {args.Trader.isLimitedRisk}; " + $"leverageInCents: {args.Trader.leverageInCents}; " + $"registrationTimestamp: {args.Trader.registrationTimestamp} ({EpochToString(args.Trader.registrationTimestamp)}); " + $"nonWithdrawableBonus: {args.Trader.nonWithdrawableBonus}; " + $"ctidTraderAccountId: {args.Trader.ctidTraderAccountId}; " + $"totalMarginCalculationType: {args.Trader.totalMarginCalculationType}; " + $"limitedRiskMarginCalculationStrategy: {args.Trader.limitedRiskMarginCalculationStrategy}"); Send(Asset_Class_List_Req(args.ctidTraderAccountId)); OnTraderResReceived?.Invoke(args); }
public ProtoMessage CreateTraderResponse(string clientMsgId = null) { return(CreateMessage((uint)ProtoOAPayloadType.PROTO_OA_TRADER_RES, ProtoOATraderRes.CreateBuilder().Build().ToByteString(), clientMsgId)); }
// listener thread private void Listen(SslStream sslStream, Queue messagesQueue) { isShutdown = false; while (!isShutdown) { Thread.Sleep(1); byte[] _length = new byte[sizeof(int)]; int readBytes = 0; do { Thread.Sleep(0); readBytes += sslStream.Read(_length, readBytes, _length.Length - readBytes); } while (readBytes < _length.Length); int length = BitConverter.ToInt32(_length.Reverse().ToArray(), 0); if (length <= 0) { continue; } if (length > MaxMessageSize) { string exceptionMsg = "Message length " + length.ToString() + " is out of range (0 - " + MaxMessageSize.ToString() + ")"; throw new System.IndexOutOfRangeException(); } byte[] _message = new byte[length]; readBytes = 0; do { Thread.Sleep(0); readBytes += sslStream.Read(_message, readBytes, _message.Length - readBytes); } while (readBytes < length); var msgFactory = new OpenApiMessagesFactory(); var protoMessage = msgFactory.GetMessage(_message); messagesQueue.Enqueue("Received: " + OpenApiMessagesPresentation.ToString(protoMessage)); switch ((ProtoOAPayloadType)protoMessage.PayloadType) { case ProtoOAPayloadType.PROTO_OA_EXECUTION_EVENT: var _payload_msg = msgFactory.GetExecutionEvent(_message); if (_payload_msg.HasOrder) { testOrderId = _payload_msg.Order.OrderId; } if (_payload_msg.HasPosition) { testPositionId = _payload_msg.Position.PositionId; } break; case ProtoOAPayloadType.PROTO_OA_GET_ACCOUNTS_BY_ACCESS_TOKEN_RES: var _accounts_list = ProtoOAGetAccountListByAccessTokenRes.CreateBuilder().MergeFrom(protoMessage.Payload).Build(); _accounts = _accounts_list.CtidTraderAccountList; break; case ProtoOAPayloadType.PROTO_OA_TRADER_RES: var trader = ProtoOATraderRes.CreateBuilder().MergeFrom(protoMessage.Payload).Build(); _traders.Add(trader.Trader); break; default: break; } ; } }
private void OnTraderResponse(ProtoOATraderRes response) { _traders.Add(response.Trader); }
private void OnTraderResponse(ProtoOATraderRes e, string clientMsgId) { var streamMessage = new StreamMessage <ProtoOATraderRes>(e, clientMsgId); _traderResponseStream.OnNext(streamMessage); }