Exemple #1
0
        public void client_test()
        {
            var clientPackage = new ProtocolPackage()
            {
                CryptoByte = new BitArray(new bool[8]
                {
                    false, false, false, false,
                    false, false, false, true
                }).ConvertToByte(),
                ZipEnable = false,
            };

            var serverPackage = new ProtocolPackage()
            {
                CryptoByte = new BitArray(new bool[8]
                {
                    false, false, false, false,
                    false, false, false, true
                }).ConvertToByte(),
            };

            var clientKeys = new KeyGenerator(1).MakeKey();

            clientPackage.PackKeys = clientKeys;

            var requestPackage = new PirateXRequestPackage()
            {
                HeaderBytes  = Encoding.UTF8.GetBytes($"hello"),
                ContentBytes = Encoding.UTF8.GetBytes("hello")
            };

            var unpackrequestpack = clientPackage.PackPacketToBytes(requestPackage);

            Console.WriteLine(string.Join(",", unpackrequestpack));
        }
Exemple #2
0
        /// <summary>
        /// 构造一个PSocket 有两种方式
        ///
        /// 1 : ps://host:port/    普通的Scoket
        /// 2 : pss://host:port/   安全型Socket
        /// </summary>
        /// <param name="uri"></param>
        /// <param name="token"></param>
        /// <param name="sendQueueSize"></param>
        public PirateXClient(string uri, string token = "", int sendQueueSize = 3)
        {
            this._token = token;

            TcpClientSession client;

            if (uri.StartsWith(m_UriPrefix, StringComparison.OrdinalIgnoreCase))
            {
                client = CreateClient(uri);
            }
            else if (uri.StartsWith(m_SecureUriPrefix, StringComparison.OrdinalIgnoreCase))
            {
                client = CreateSecureClient(uri);
            }
            else
            {
                throw new ArgumentException("Invalid uri", "uri");
            }

            m_ExecutorDict.Add("Ping", new Ping());
            m_ExecutorDict.Add("NewSeed", new NewSeed());

            foreach (var responseConvert in typeof(IResponseConvert).Assembly.GetTypes().Where(item => typeof(IResponseConvert).IsAssignableFrom(item)))
            {
                if (responseConvert.IsInterface)
                {
                    continue;
                }

                var attrs = responseConvert.GetCustomAttributes(typeof(DisplayColumnAttribute), false);
                if (attrs.Any())
                {
                    var convertName = ((DisplayColumnAttribute)attrs[0]).DisplayColumn;
                    if (!string.IsNullOrEmpty(convertName))
                    {
                        _responseConverts.Add(convertName.ToLower(), (IResponseConvert)Activator.CreateInstance(responseConvert));
                    }
                }
            }


            PackageProcessor = new ProtocolPackage();  //new DefaultPackageProcessor() { ZipEnable = true };
            m_StateCode      = PSocketStateConst.None;

            client.ReceiveBufferSize = 1024 * 10 * 100;
            client.Connected        += new EventHandler(client_Connected);

            client.Closed       += new EventHandler(client_Closed);
            client.Error        += (sender, args) => { };
            client.DataReceived += new EventHandler <DataEventArgs>(client_DataReceived);

            Client = client;

            AutoSendPingInterval = -1; //-1 表示启用自动ping
        }
Exemple #3
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]))}");
        }
Exemple #4
0
        /// <summary>
        /// 收到客户端请求,交由Actor进行处理
        /// </summary>
        /// <param name="protocolPackage"></param>
        /// <param name="body"></param>
        public virtual void ProcessRequest(ProtocolPackage protocolPackage, byte[] body)
        {
            if (protocolPackage == null)
            {
                return;
            }

            var request = protocolPackage.UnPackToPacket(body);

            var msg = new NetMQMessage();

            msg.Append(new byte[] { 1 });           //版本号
            msg.Append("req");                      //动作
            msg.Append(protocolPackage.SessionID);  //sessionid
            msg.Append(protocolPackage.PackKeys);   //客户端密钥
            msg.Append(protocolPackage.UnPackKeys); //服务端密钥
            msg.Append(request.HeaderBytes);        //信息头
            msg.Append(request.ContentBytes);       //信息体
            //加入队列
            PushQueue.Enqueue(msg);
        }
Exemple #5
0
        public void TestPackAndUnPack()
        {
            Class1 class1 = new Class1();

            class1.ArrayValue = new int[] { 1, 2, 3, 4, 5 };
            class1.Class2.s   = "classsedwqdsavcxvcxxxxxxxxxxxxxxxxxxdsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
                                + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
                                + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
                                + "aaaaxxxxxxczxcsadasdasdasdssssss";
            class1.b = true;
            class1.i = 12312;
            class1.listValue.Add(132);
            class1.Dictionary[1] = "dsasdasd";
            class1.Dictionary[2] = "ddscccxz";
            class1.s             = "192.168.1.37";
            ProtocolPackage[] packages = Packager.Pack(class1, 1024);
            Assert.AreEqual(packages.Length, 1);
            byte[] bytes = Packager.UnPack(packages);
            bytes = ProtocolSerialize.Seralize(packages[0]);
            ProtocolPackage package = ProtocolSerialize.Deseralize(typeof(ProtocolPackage), bytes) as ProtocolPackage;

            Assert.AreNotEqual(package, null);
        }
Exemple #6
0
        public void pack_request_to_bytes_then_unpack_it()
        {
            var piratepackage = new ProtocolPackage();

            var requestInfo = new PirateXRequestInfo(new NameValueCollection()
            {
                { "c", "test" },
                { "t", "123456" }
            }, new NameValueCollection()
            {
                { "p1", "1" },
                { "p2", "2" },
            });

            var requestPackage = new PirateXRequestPackage()
            {
                HeaderBytes  = Encoding.UTF8.GetBytes($"{String.Join("&", requestInfo.Headers.AllKeys.Select(a => a + "=" + requestInfo.Headers[a]))}"),
                ContentBytes = Encoding.UTF8.GetBytes($"{String.Join("&", requestInfo.QueryString.AllKeys.Select(a => a + "=" + requestInfo.QueryString[a]))}")
            };

            var unpackrequestpack = piratepackage.PackPacketToBytes(requestPackage);

            var requestInfo2 = new PirateXRequestInfo(piratepackage.UnPackToPacket(unpackrequestpack));

            Assert.IsNotEmpty(requestInfo.C);
            Assert.IsNotEmpty(requestInfo.Key);

            Assert.IsNotEmpty(requestInfo2.C);


            Assert.AreEqual($"{String.Join("&", requestInfo.Headers.AllKeys.Select(a => a + "=" + requestInfo.Headers[a]))}"
                            , $"{String.Join("&", requestInfo2.Headers.AllKeys.Select(a => a + "=" + requestInfo2.Headers[a]))}");

            Assert.AreEqual($"{String.Join("&", requestInfo.QueryString.AllKeys.Select(a => a + "=" + requestInfo.QueryString[a]))}"
                            , $"{String.Join("&", requestInfo2.QueryString.AllKeys.Select(a => a + "=" + requestInfo2.QueryString[a]))}");
        }
Exemple #7
0
        /// <summary>
        ///
        /// </summary>
        private void Setup()
        {
            var builder = new ContainerBuilder();

            #region 通信相关组件

            builder.Register(c => this).As <IMessageSender>().SingleInstance();
            ////注册内置命令
            //RegisterActions(typeof(ActorService<TActorService>).Assembly.GetTypes());
            ////注册外置命令
            //RegisterActions(GetActions());

            //注册命令
            RegisterActions(DistrictContainer.GetApiAssemblyList());

            builder.Register(c => Actions)
            .As <IDictionary <string, IAction> >()
            .SingleInstance();

            //数据格式
            foreach (var responseConvert in typeof(IResponseConvert).Assembly.GetTypes().Where(item => typeof(IResponseConvert).IsAssignableFrom(item)))
            {
                if (responseConvert.IsInterface)
                {
                    continue;
                }

                var attrs = responseConvert.GetCustomAttributes(typeof(DisplayColumnAttribute), false);
                if (attrs.Any())
                {
                    var convertName = ((DisplayColumnAttribute)attrs[0]).DisplayColumn;
                    if (!string.IsNullOrEmpty(convertName))
                    {
                        builder.Register(c => Activator.CreateInstance(responseConvert))
                        .Keyed <IResponseConvert>(convertName.ToLower())
                        .SingleInstance();
                    }
                }
            }

            #endregion
            // 游戏容器
            DistrictContainer.InitContainers(builder);
            #region 通信框架初始化

            if (DistrictContainer.ServerIoc.IsRegistered <IProtoService>())
            {
                var list = new List <Assembly>();
                list.AddRange(DistrictContainer.GetServiceAssemblyList());
                list.AddRange(DistrictContainer.GetEntityAssemblyList());
                list.AddRange(DistrictContainer.GetApiAssemblyList());
                DistrictContainer.ServerIoc.Resolve <IProtoService>()
                .Init(list);
            }

            RedisDataBaseExtension.RedisSerilazer = DistrictContainer.ServerIoc.Resolve <IRedisSerializer>();
            if (Logger.IsTraceEnabled)
            {
                Logger.Trace($"Set RedisDataBaseExtension.RedisSerilazer = {RedisDataBaseExtension.RedisSerilazer.GetType().FullName}");
            }

            ProtocolPackage = DistrictContainer.ServerIoc.Resolve <IProtocolPackage>();
            if (Logger.IsTraceEnabled)
            {
                Logger.Trace($"Set ProtocolPackage = {ProtocolPackage.GetType().FullName}");
            }
            #endregion

            if (Logger.IsTraceEnabled)
            {
                Logger.Trace(@"
.______    __  .______          ___   .___________. __________   ___ 
|   _  \  |  | |   _  \        /   \  |           ||   ____\  \ /  / 
|  |_)  | |  | |  |_)  |      /  ^  \ `---|  |----`|  |__   \     /  
|   ___/  |  | |      /      /  /_\  \    |  |     |   __|   >   <   
|  |      |  | |  |\  \----./  _____  \   |  |     |  |____ /  .  \  
| _|      |__| | _| `._____/__/     \__\  |__|     |_______/__/ \__\ 
");
            }
        }
Exemple #8
0
        public void pack_request_to_bytes_then_unpack_it_with_crypto()
        {
            var clientPackage = new ProtocolPackage()
            {
                CryptoByte = new BitArray(new bool[8]
                {
                    false, false, false, false,
                    false, false, false, true
                }).ConvertToByte(),
            };

            var serverPackage = new ProtocolPackage()
            {
                CryptoByte = new BitArray(new bool[8]
                {
                    false, false, false, false,
                    false, false, false, true
                }).ConvertToByte(),
            };

            var clientKeys = new KeyGenerator(100).MakeKey();
            var serverKeys = new KeyGenerator(200).MakeKey();

            //client
            clientPackage.PackKeys   = clientKeys;
            clientPackage.UnPackKeys = serverKeys;
            //server
            serverPackage.PackKeys   = serverKeys;
            serverPackage.UnPackKeys = clientKeys;

            var requestInfo = new PirateXRequestInfo(new NameValueCollection()
            {
                { "c", "test" },
                { "t", "123456" }
            }, new NameValueCollection()
            {
                { "p1", "1" },
                { "p2", "2" },
            });

            var requestPackage = new PirateXRequestPackage()
            {
                HeaderBytes  = Encoding.UTF8.GetBytes($"{String.Join("&", requestInfo.Headers.AllKeys.Select(a => a + "=" + requestInfo.Headers[a]))}"),
                ContentBytes = Encoding.UTF8.GetBytes($"{String.Join("&", requestInfo.QueryString.AllKeys.Select(a => a + "=" + requestInfo.QueryString[a]))}")
            };

            var unpackrequestpack = clientPackage.PackPacketToBytes(requestPackage);

            Console.WriteLine($"[{string.Join(",", unpackrequestpack)}]");

            var requestInfo2 = new PirateXRequestInfo(serverPackage.UnPackToPacket(unpackrequestpack));

            Assert.IsNotEmpty(requestInfo.C);
            Assert.IsNotEmpty(requestInfo.Key);

            Assert.IsNotEmpty(requestInfo2.C);


            Assert.AreEqual($"{String.Join("&", requestInfo.Headers.AllKeys.Select(a => a + "=" + requestInfo.Headers[a]))}"
                            , $"{String.Join("&", requestInfo2.Headers.AllKeys.Select(a => a + "=" + requestInfo2.Headers[a]))}");

            Assert.AreEqual($"{String.Join("&", requestInfo.QueryString.AllKeys.Select(a => a + "=" + requestInfo.QueryString[a]))}"
                            , $"{String.Join("&", requestInfo2.QueryString.AllKeys.Select(a => a + "=" + requestInfo2.QueryString[a]))}");
        }