예제 #1
0
 public JsonLinePacketServer(IJsonSerializationServerAdapter SerializationServerAdapter, CheckCommandAllowedDelegate CheckCommandAllowed, IBinaryTransformer Transformer = null, int ReadBufferSize = 8 * 1024)
 {
     this.ss = SerializationServerAdapter;
     this.c  = new Context(ReadBufferSize);
     this.CheckCommandAllowed = CheckCommandAllowed;
     this.Transformer         = Transformer;
     this.ss.ServerEvent     += (CommandName, CommandHash, Parameters) =>
     {
         var Bytes = TextEncoding.UTF8.GetBytes(String.Format(@"/svr {0} {1}" + "\r\n", CommandName + "@" + CommandHash.ToString("X8", System.Globalization.CultureInfo.InvariantCulture), Parameters));
         lock (c.WriteBufferLockee)
         {
             if (Transformer != null)
             {
                 Transformer.Transform(Bytes, 0, Bytes.Length);
             }
             c.WriteBuffer.Add(Bytes);
         }
         if (OutputByteLengthReport != null)
         {
             OutputByteLengthReport(CommandName, Bytes.Length);
         }
         if (this.ServerEvent != null)
         {
             this.ServerEvent();
         }
     };
 }
예제 #2
0
 public BinaryCountPacketClient(IBinarySerializationClientAdapter bc, IBinaryTransformer Transformer = null, int ReadBufferSize = 128 * 1024)
 {
     this.c           = new Context(ReadBufferSize);
     this.bc          = bc;
     this.Transformer = Transformer;
     bc.ClientEvent  += (String CommandName, UInt32 CommandHash, Byte[] Parameters, Action <Exception> OnError) =>
     {
         var    CommandNameBytes = System.Text.Encoding.Unicode.GetBytes(CommandName);
         Byte[] Bytes;
         using (var s = new MemoryStream())
         {
             s.WriteInt32(CommandNameBytes.Length);
             s.Write(CommandNameBytes);
             s.WriteUInt32(CommandHash);
             s.WriteInt32(Parameters.Length);
             s.Write(Parameters);
             s.Position = 0;
             Bytes      = s.Read((int)(s.Length));
         }
         lock (c.WriteBufferLockee)
         {
             if (Transformer != null)
             {
                 Transformer.Transform(Bytes, 0, Bytes.Length);
             }
             c.WriteBuffer.Add(Bytes);
         }
         if (this.ClientMethod != null)
         {
             ClientMethod(OnError);
         }
     };
 }
예제 #3
0
 public JsonLinePacketClient(IJsonSerializationClientAdapter jc, IBinaryTransformer Transformer = null, int ReadBufferSize = 8 * 1024)
 {
     this.c           = new Context(ReadBufferSize);
     this.jc          = jc;
     this.Transformer = Transformer;
     jc.ClientEvent  += (String CommandName, UInt32 CommandHash, String Parameters, Action <Exception> OnError) =>
     {
         var Message = "/" + CommandName + "@" + CommandHash.ToString("X8", System.Globalization.CultureInfo.InvariantCulture) + " " + Parameters + "\r\n";
         var Bytes   = System.Text.Encoding.UTF8.GetBytes(Message);
         if (Transformer != null)
         {
             Transformer.Transform(Bytes, 0, Bytes.Length);
         }
         c.WriteBuffer.Add(Bytes);
         if (this.ClientMethod != null)
         {
             ClientMethod(OnError);
         }
     };
 }
예제 #4
0
 public BinaryCountPacketServer(IBinarySerializationServerAdapter SerializationServerAdapter, CheckCommandAllowedDelegate CheckCommandAllowed, IBinaryTransformer Transformer = null, int ReadBufferSize = 8 * 1024)
 {
     this.ss = SerializationServerAdapter;
     this.c  = new Context(ReadBufferSize);
     this.CheckCommandAllowed = CheckCommandAllowed;
     this.Transformer         = Transformer;
     this.ss.ServerEvent     += (CommandName, CommandHash, Parameters) =>
     {
         var    CommandNameBytes = TextEncoding.UTF16.GetBytes(CommandName);
         Byte[] Bytes;
         using (var ms = Streams.CreateMemoryStream())
         {
             ms.WriteInt32(CommandNameBytes.Length);
             ms.Write(CommandNameBytes);
             ms.WriteUInt32(CommandHash);
             ms.WriteInt32(Parameters.Length);
             ms.Write(Parameters);
             ms.Position = 0;
             Bytes       = ms.Read((int)(ms.Length));
         }
         var BytesLength = Bytes.Length;
         lock (c.WriteBufferLockee)
         {
             if (Transformer != null)
             {
                 Transformer.Transform(Bytes, 0, BytesLength);
             }
             c.WriteBuffer.Add(Bytes);
         }
         if (OutputByteLengthReport != null)
         {
             OutputByteLengthReport(CommandName, BytesLength);
         }
         if (this.ServerEvent != null)
         {
             this.ServerEvent();
         }
     };
 }