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)); }
/// <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 }
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]))}"); }
/// <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); }
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); }
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]))}"); }
/// <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(@" .______ __ .______ ___ .___________. __________ ___ | _ \ | | | _ \ / \ | || ____\ \ / / | |_) | | | | |_) | / ^ \ `---| |----`| |__ \ / | ___/ | | | / / /_\ \ | | | __| > < | | | | | |\ \----./ _____ \ | | | |____ / . \ | _| |__| | _| `._____/__/ \__\ |__| |_______/__/ \__\ "); } }
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]))}"); }