public TResp Request <TReq, TResp>(call_body callBody, TReq reqArgs) { UdpReader mr = new UdpReader(_receivedArray); Reader r = Toolkit.CreateReader(mr); rpc_msg respMsg = r.Read <rpc_msg>(); rpc_msg reqHeader = new rpc_msg() { xid = respMsg.xid, // use xid in _receivedArray body = new body() { mtype = msg_type.CALL, cbody = callBody } }; UdpWriter dtg = new UdpWriter(); Writer w = Toolkit.CreateWriter(dtg); w.Write(reqHeader); w.Write(reqArgs); byte[] outBuff = dtg.Build(); Assert.AreEqual(_expectedSendArray, outBuff, "send dump is difference"); Toolkit.ReplyMessageValidate(respMsg); TResp respArgs = r.Read <TResp>(); mr.CheckEmpty(); return(respArgs); }
private void BuildMessage(object state) { byte[] datagram; try { UdpWriter uw = new UdpWriter(); _sendingTicket.BuildRpcMessage(uw); datagram = uw.Build(); } catch (Exception ex) { Log.Debug("UDP datagram not builded (xid:{0}) reason: {1}", _sendingTicket.Xid, ex); lock (_sync) _handlers.Remove(_sendingTicket.Xid); _sendingTicket.Except(ex); OnSend(); return; } Log.Debug("Begin sending UDP datagram (xid:{0})", _sendingTicket.Xid); _client.AsyncWrite(datagram, OnDatagramWrited); }