Example #1
0
        public void OnNext(RPCRequest <PARSER> value)
        {
            var f = new FORMATTER();

            m_s.Serialize(value, f);
            m_transport.WriteAsync(f.GetStore().Bytes);
        }
Example #2
0
        public IObservable <R> RequestAsync <R>(string name, ArraySegment <Byte> rpcParams)
        {
            var d = m_r.GetDeserializer <R>();

            // request
            var request = new RPCRequest <PARSER>
            {
                Id          = m_id++,
                Method      = name,
                ParamsBytes = rpcParams
            };

            return(Observable.Create <R>(observer =>
            {
                var disposable = new DisposableRequest(request, res =>
                {
                    if (res.Error != null)
                    {
                        observer.OnError(new Exception(res.Error));
                    }
                    else
                    {
                        var r = default(R);
                        d.Deserialize(res.Result, ref r);
                        observer.OnNext(r);
                        observer.OnCompleted();
                    }
                });
                m_requestMap.Add(request.Id, disposable);
                m_requestSubject.OnNext(request);

                return disposable;
            }));
        }
Example #3
0
        public RPCResponse <PARSER> DispatchRequest <PARSER, FORMATTER>(RPCRequest <PARSER> request)
            where PARSER : IParser <PARSER>, new()
            where FORMATTER : IFormatter, new()
        {
            var context = new RPCContext <PARSER>(request, new FORMATTER());

            DispatchRequest(context);
            return(context.Response);
        }
Example #4
0
 public RPCContext(RPCRequest <T> request, IFormatter formatter)
 {
     m_request     = request;
     m_formatter   = formatter;
     m_response.Id = request.Id;
 }
Example #5
0
 public DisposableRequest(RPCRequest <PARSER> request
                          , Action <RPCResponse <PARSER> > onResponse)
 {
     Request      = request;
     m_onResponse = onResponse;
 }