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));
 }
Ejemplo n.º 3
0
        // 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;
                }
                ;
            }
        }
Ejemplo n.º 4
0
 private void OnTraderResponse(ProtoOATraderRes response)
 {
     _traders.Add(response.Trader);
 }
Ejemplo n.º 5
0
        private void OnTraderResponse(ProtoOATraderRes e, string clientMsgId)
        {
            var streamMessage = new StreamMessage <ProtoOATraderRes>(e, clientMsgId);

            _traderResponseStream.OnNext(streamMessage);
        }