public async Task <ProtoOASymbol[]> GetSymbols(long accountId, bool isLive, long[] symbolIds) { VerifyConnection(); var client = GetClient(isLive); using var cancelationTokenSource = new CancellationTokenSource(); ProtoOASymbol[] result = null; using var disposable = client.OfType <ProtoOASymbolByIdRes>().Where(response => response.CtidTraderAccountId == accountId) .Subscribe(response => { result = response.Symbol.Where(iSymbol => iSymbol.TradingMode == ProtoOATradingMode.Enabled).ToArray(); cancelationTokenSource.Cancel(); }); var requestMessage = new ProtoOASymbolByIdReq { CtidTraderAccountId = accountId, }; requestMessage.SymbolId.AddRange(symbolIds); await SendMessage(requestMessage, ProtoOAPayloadType.ProtoOaSymbolByIdReq, client, cancelationTokenSource, () => result is not null); return(result); }
public ProtoMessage CreateSymbolByIdRequest(long accountId, string clientMsgId = null) { var _msg = ProtoOASymbolByIdReq.CreateBuilder(); _msg.SetCtidTraderAccountId(accountId); _msg.AddSymbolId(1); _msg.AddSymbolId(2); _msg.AddSymbolId(3); return(CreateMessage((uint)_msg.PayloadType, _msg.Build().ToByteString(), clientMsgId)); }
public static ProtoMessage Symbol_By_Id_Req(long ctidTraderAccountId, long[] symbolIDs) { ProtoOASymbolByIdReq message = new ProtoOASymbolByIdReq { payloadType = ProtoOAPayloadType.ProtoOaSymbolByIdReq, ctidTraderAccountId = ctidTraderAccountId, symbolIds = symbolIDs }; Log.Info("ProtoOASymbolByIdReq:: " + $"ctidTraderAccountId: {ctidTraderAccountId}; " + $"symbolIds: [{string.Join("; ", symbolIDs)}]"); InnerMemoryStream.SetLength(0); Serializer.Serialize(InnerMemoryStream, message); return(Encode((uint)message.payloadType, InnerMemoryStream.ToArray())); }