Exemple #1
0
        private async Task Login(IRxSocket rxsocket, int timeout, CancellationToken ct)
        {
            var ts = timeout >= 0 ? TimeSpan.FromMilliseconds(timeout) : TimeSpan.MaxValue;

            // Send the first message without a length prefix.
            "API".ToByteArray().SendTo(rxsocket);

            // Start sending and receiving messages with an int32 message length prefix (UseV100Plus).
            // Report a range of supported API versions to TWS.
            new[] { $"v{Config.ServerVersionMin}..{Config.ServerVersionMax}" }.ToByteArrayWithLengthPrefix().SendTo(rxsocket);
            new[] { ((int)RequestCode.StartApi).ToString(), "2", Config.ClientId.ToString(), Config.OptionalCapabilities }.ToByteArrayWithLengthPrefix().SendTo(rxsocket);

            var messages = await rxsocket
                           .ReceiveObservable
                           .ToByteArrayOfLengthPrefix()
                           .ToStringArray()
                           .Take(3)
                           .Timeout(ts, Observable.Throw <string[]>(new TimeoutException("No response received from server.")))
                           .ToList()
                           .ToTask(ct);

            // ServerVersion is the highest supported API version in the range specified.
            if (!Enum.TryParse(messages[0][0], out ServerVersion version))
            {
                throw new InvalidDataException($"Could not parse server version '{messages[0][0]}'.");
            }
            Config.ServerVersionCurrent = version;
            Config.Date            = messages[0][1];
            Config.ManagedAccounts = messages[1][2];
            Config.NextIdValue     = int.Parse(messages[2][2]) - 1;
        }
 internal InterReactClient(IRxSocket rxsocket, Config config, Request request, IObservable <object> response, Services services)
 {
     rxSocket = rxsocket;
     Config   = config;
     Request  = request;
     Response = response;
     Services = services;
 }
Exemple #3
0
 internal RequestMessage(IRxSocket rxSocket, Limiter limiter) : this(rxSocket.Send, limiter)
 {
 }