// `param` may be null (means empty). string AuthenticatedRequest(IMessageOut msg, IEnumerable <KV> param) { param = param ?? new KV[0]; param = param.Append(new KV("api_key", _keys.ApiKey)); // Signature is added last because its value depends on all other parameters. param = param.Append(new KV("sign", Authenticator.Sign(_keys, param))); string parameters = String.Join(",", param.Select(kv => String.Format("\"{0}\":\"{1}\"", kv.Key, kv.Value))); return(String.Format("{{\"event\":\"addChannel\",\"channel\":\"{0}\",\"parameters\":{{{1}}}}}", Channels.FromMessage(msg), parameters)); }
void OnMessage(TimestampedMsg <IMessageIn> msg) { Condition.Requires(msg, "msg").IsNotNull(); string channel = Channels.FromMessage(msg.Value); Turnstile <IMessageIn, IMessageOut> turnstile; lock (_monitor) { if (!_channels.TryGetValue(channel, out turnstile)) { // Market data, ping or somesuch. return; } } turnstile.OnReply(msg); }
// Action `done` will be called exactly once in the scheduler. Its argument will be null on timeout. public void Send(IMessageOut msg, Action <TimestampedMsg <IMessageIn> > done) { Condition.Requires(msg, "msg").IsNotNull(); Condition.Requires(done, "done").IsNotNull(); string channel = Channels.FromMessage(msg); Turnstile <IMessageIn, IMessageOut> turnstile; lock (_monitor) { if (!_channels.TryGetValue(channel, out turnstile)) { turnstile = new Turnstile <IMessageIn, IMessageOut>(_connection); _channels.Add(channel, turnstile); } } turnstile.Send(msg, done); }
string UnauthenticatedRequest(IMessageOut msg) { // Example: {"event":"addChannel","channel":"ok_btcusd_future_depth_this_week_60"}. return(String.Format("{{\"event\":\"addChannel\",\"channel\":\"{0}\"}}", Channels.FromMessage(msg))); }