public void pack_response_to_bytes_then_unpack_it() { var piratepack = new ProtocolPackage() { }; var responseInfo = new PirateXResponseInfo() { Headers = new NameValueCollection() { { "c", "test" }, { "t", "123456" } } }; var responsepack = new PirateXResponsePackage() { HeaderBytes = responseInfo.GetHeaderBytes(), ContentBytes = Encoding.UTF8.GetBytes("Hello World!") }; var bytes = piratepack.PackPacketToBytes(responsepack); var unpackresponsepack = piratepack.UnPackToPacket(bytes); var responseInfo2 = new PirateXResponseInfo(unpackresponsepack.HeaderBytes); Console.WriteLine("pack head bytes"); Console.WriteLine(string.Join(",", responsepack.HeaderBytes)); Console.WriteLine("unpack head bytes"); Console.WriteLine(string.Join(",", unpackresponsepack.HeaderBytes)); Console.WriteLine("pack content bytes"); Console.WriteLine(string.Join(",", responsepack.ContentBytes)); Console.WriteLine("unpack content bytes"); Console.WriteLine(string.Join(",", unpackresponsepack.ContentBytes)); Assert.IsTrue(responsepack.HeaderBytes.SequenceEqual(unpackresponsepack.HeaderBytes)); Assert.IsTrue(responsepack.ContentBytes.SequenceEqual(unpackresponsepack.ContentBytes)); Assert.AreEqual($"{String.Join("&", responseInfo.Headers.AllKeys.Select(a => a + "=" + responseInfo.Headers[a]))}" , $"{String.Join("&", responseInfo.Headers.AllKeys.Select(a => a + "=" + responseInfo2.Headers[a]))}"); }
void client_DataReceived(object sender, DataEventArgs e) { var sw = new Stopwatch(); sw.Start(); var log = new ProcessLog() { Rid = Id, Name = CurrentMethod, Req = CurrentReq, Ok = true, SendOk = sendOk, Start = SendTime, End = DateTime.Now }; try { var responsePackage = PackageProcessor.UnPackToPacket(e.Data); var responseInfo = new PirateXResponseInfo(responsePackage); var header = responseInfo.Headers; sw.Stop(); log.Resp = header; if (Equals(header["i"], "2")) { var method = header["c"]; var executor = GetBroadcastExecutor(method); if (executor != null) { executor.Header = header; var type = executor.GetType(); var o = (IPirateXClientExecutor)Activator.CreateInstance(type); o.Header = header; o.ResponseConvert = _responseConverts[responseInfo.Headers["format"] ?? DefaultFormat]; try { o.Excute(this, responsePackage.ContentBytes); } catch (Exception exc) { client_Error(this, new ErrorEventArgs(new Exception("Message handling exception", exc))); } } if (OnNotified != null) { OnNotified(this, new MsgEventArgs(responseInfo.Headers["c"], responseInfo)); } } else if (Equals(header["i"], "1")) { if (!Equals(header["code"], "200")) { if (OnServerError != null) { OnServerError(this, new PErrorEventArgs( Convert.ToInt32(header["errorCode"]), HttpUtility.UrlDecode(Convert.ToString(header["errorMessage"])))); } log.Ok = false; } else { var method = header["c"].ToString(); var executor = GetExecutor(method); if (executor != null) { var type = executor.GetType(); var o = (IPirateXClientExecutor)Activator.CreateInstance(type); o.Header = header; o.ResponseConvert = _responseConverts[responseInfo.Headers["format"] ?? DefaultFormat]; try { o.Excute(this, responsePackage.ContentBytes); } catch (Exception exc) { client_Error(this, new ErrorEventArgs(new Exception("Message handling exception", exc))); } if (type == typeof(NewSeed)) { m_StateCode = PSocketStateConst.Open; if (OnOpen != null) { OnOpen(this, new EventArgs()); } } } if (OnReceiveMessage != null) { OnReceiveMessage(this, new MsgEventArgs(responseInfo.Headers["c"], responseInfo)); } } if (OnResponseProcessed != null) { OnResponseProcessed(this, log); } } } catch (Exception exc) { client_Error(this, new ErrorEventArgs(exc)); } }