示例#1
0
        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]))}");
        }
示例#2
0
        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));
            }
        }