public void OnNext(RPCRequest <PARSER> value) { var f = new FORMATTER(); m_s.Serialize(value, f); m_transport.WriteAsync(f.GetStore().Bytes); }
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; })); }
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); }
public RPCContext(RPCRequest <T> request, IFormatter formatter) { m_request = request; m_formatter = formatter; m_response.Id = request.Id; }
public DisposableRequest(RPCRequest <PARSER> request , Action <RPCResponse <PARSER> > onResponse) { Request = request; m_onResponse = onResponse; }