protected void Call(RemoteCall rpc, Action <Error, RemoteResult> callback) { RemoteCall.Proc proc = rpc.Procedure; byte[] rpcSerialized = m_serializer.Serialize(rpc); m_protocol.BeginRequest(rpcSerialized, null, (requestError, response, userState) => { RemoteResult result; Error error; if (requestError == LowProtocol <Socket> .ErrorOK) { try { result = m_serializer.Deserialize <RemoteResult>(response); error = result.Error; } catch (Exception e) { result = new RemoteResult(); error = new Error(StatusCode.UnhandledException) { Message = string.Format("Procedure {0}", proc) + " " + e.ToString() }; } } else { result = new RemoteResult(); if (requestError == LowProtocol <Socket> .ErrorTimeout) { error = new Error(StatusCode.RequestTimeout); error.Message = string.Format("Request Timeout - Procedure {0}", proc); } else if (requestError == LowProtocol <Socket> .ErrorClosed) { error = new Error(StatusCode.ConnectionClosed); error.Message = string.Format("Request Error - Procedure {0}", proc); } else { throw new NotSupportedException("unknow requestError"); } } callback(error, result); }, requestSent => { if (!requestSent) { callback(new Error(StatusCode.ConnectionClosed), new RemoteResult()); } }); }
private void Call(RemoteCall rpc, Action <Error, RemoteResult> callback) { byte[] rpcSerialized = m_serializer.Serialize(rpc); m_protocol.BeginRequest(rpcSerialized, null, (requestError, response, userState) => { RemoteResult result; Error error; if (requestError == LowProtocol <ClientSocket> .ErrorOK) { try { result = m_serializer.Deserialize <RemoteResult>(response); error = result.Error; } catch (Exception e) { result = new RemoteResult(); error = new Error(StatusCode.UnhandledException) { Message = e.ToString() }; } } else { result = new RemoteResult(); if (requestError == LowProtocol <ClientSocket> .ErrorTimeout) { error = new Error(StatusCode.RequestTimeout); } else if (requestError == LowProtocol <ClientSocket> .ErrorClosed) { error = new Error(StatusCode.ConnectionClosed); } else { throw new NotSupportedException("unknow requestError"); } } callback(error, result); }, requestSent => { }); }