示例#1
0
        private void SendMessage(NetworkMessage message)
        {
            var st = new CustomDataWriter();

            message.PackOld(st);
            slave.Send(st.Data);
        }
示例#2
0
        public void Serialize(ICustomDataWriter writer)
        {
            var dataWriter = new CustomDataWriter();

            serializeContent(dataWriter);
            var messageData = dataWriter.GetBytes();

            ushort header = (ushort)(MessageId << 2);

            if (messageData.Length == 0)
            {
                writer.WriteUShort(header);
                return;
            }
            if (messageData.Length <= byte.MaxValue)
            {
                writer.WriteUShort((ushort)(header | 1));
                writer.WriteByte((byte)messageData.Length);
            }
            else if (messageData.Length <= ushort.MaxValue)
            {
                header |= 2;
                writer.WriteUShort(header);
                writer.WriteUShort((ushort)messageData.Length);
            }
            else
            {
                return;
            }

            writer.WriteBytes(messageData);
        }
示例#3
0
        public void Pack(ICustomDataOutput header)
        {
            var data = new CustomDataWriter();

            Serialize(data);
            var   size    = data.Data.Length;
            var   compute = ComputeTypeLen(size);
            short val     = (short)((MessageId << 2) | compute);

            header.WriteShort(val);
            switch (compute)
            {
            case 1:
                header.WriteByte((byte)size);
                break;

            case 2:
                header.WriteUShort((ushort)size);
                break;

            case 3:
                header.WriteByte((byte)((size >> 0x10) & 0xff));
                header.WriteUShort((ushort)(size & 0xffff));
                break;
            }
            header.WriteBytes(data.Data);
            data.Dispose();
        }
示例#4
0
        public override void SendMessage(NetworkMessage message, DestinationEnum destination)
        {
            CustomDataWriter writer = new CustomDataWriter();

            message.Pack(writer);
            DestinationClient.Send(writer.Data);
            Logg.Log("Sent to server :" + message.MessageId.ToString());
        }
        public virtual void Send(Message message)
        {
            SegmentStream    stream = BufferManager.Default.CheckOutStream();
            CustomDataWriter writer = new CustomDataWriter(stream);

            message.Pack(writer);
            this.Send(stream);
            this.OnMessageSent(message);
        }
示例#6
0
        public void SendMessage(NetworkMessage message)
        {
            CustomDataWriter writer = new CustomDataWriter();

            message.Pack(writer, ++GlobalInstanceId);
            Connection.Send(writer.Data);

            Console.WriteLine(BitConverter.ToString(writer.Data));
        }
示例#7
0
 public void Send(Message message)
 {
     if (Socket != null && Socket.Connected)
     {
         CustomDataWriter writer = new CustomDataWriter();
         message.Pack(writer);
         var packet = writer.Data;
         this.Send(packet);
         if (SSyncCore.ShowProtocolMessage)
         {
             logger.DarkGray(string.Format("Send {0}", message.ToString()));
         }
     }
 }
        public void Send(Message message)
        {
            CustomDataWriter writer = new CustomDataWriter();

            message.Pack(writer);
            var packet = writer.Data;

            SSyncClient.Send(packet);

            if (ConfigurationManager.Instance.ShowProtocolMessages)
            {
                Logger.Info(string.Format("[Send] {0}", message.ToString()));
            }
        }
        public void Send(INetworkMessage message)
        {
            var data = new CustomDataWriter();

            message.Serialize(data);
            //var path = Path.Combine("packets", Nickname + "_" + _counter.ToString("0000") + "_" + ((NetworkMessage)message).MessageId + ".bin");
            //if (!Directory.Exists(Path.GetDirectoryName(path)))
            //    Directory.CreateDirectory(Path.GetDirectoryName(path));
            //File.WriteAllBytes(path, data.GetBytes());
            //_counter++;
            _client.Send(data.GetBytes());
            Console.ForegroundColor = ConsoleColor.Cyan;
            Console.WriteLine("[" + Nickname + "] >> " + message.GetName() + " | " + message.GetSummary());
            Console.ResetColor();
        }
示例#10
0
        public void Pack(ICustomDataWriter writerOut, uint globalInstanceId)
        {
            CustomDataWriter writer = new CustomDataWriter();

            Serialize(writer);         //write all param of the packet
            byte[] data = writer.Data; //get the packet in array

            byte typeLen;              //get the size of the size

            if (data.Length > 65535)
            {
                typeLen = 3;
            }
            else if (data.Length > 255)
            {
                typeLen = 2;
            }
            else if (data.Length > 0)
            {
                typeLen = 1;
            }
            else
            {
                typeLen = 0;
            }

            writerOut.WriteShort((short)(MessageId << 2 | typeLen)); //write id and size of size
            writerOut.WriteUInt(globalInstanceId);
            switch (typeLen)                                         //write the size
            {
            case 0:
                break;

            case 1:
                writerOut.WriteByte((byte)data.Length);
                break;

            case 2:
                writerOut.WriteShort((short)data.Length);
                break;

            case 3:
                writerOut.WriteByte((byte)(data.Length >> 16 & 255));
                writerOut.WriteShort((short)(data.Length & 65535));
                break;
            }
            writerOut.WriteBytes(data);//write the packet after write the header
        }
        private static void Generate <T>(Action <ICustomDataOutput> action)
        {
            var stream = DirectoryGenerator._streams[typeof(T)];
            var writer = new CustomDataWriter(stream);

            stream.Lock(0, long.MaxValue);
            try
            {
                action(writer);

                stream.Flush();
            }
            finally
            {
                stream.Unlock(0, long.MaxValue);
            }
        }
示例#12
0
 private byte[] hashKey_Gen(ConnectedHost host)
 {
     try
     {
         using (CustomDataWriter writer = new CustomDataWriter())
         {
             writer.WriteUTF(host.Bot.Login.mAutentificationFrame.mTicket);
             byte[] key = hash(writer.Data);
             return key;
         }
     }
     catch (Exception ex)
     {
         
         return null;
     }
 }
示例#13
0
        public override void SendMessage(NetworkMessage message, DestinationEnum destination)
        {
            CustomDataWriter writer = new CustomDataWriter();

            message.Pack(writer);
            switch (destination)
            {
            case DestinationEnum.CLIENT:
                SourceClient.Send(writer.Data);
                break;

            case DestinationEnum.SERVER:
                DestinationClient.Send(writer.Data);
                break;
            }
            Host.logger.Log("Sent " + message.ToString().Split('.').Reverse().First() + " to " + destination.ToString(), LogLevelEnum.Succes);
        }
示例#14
0
        public void Pack(ICustomDataOutput header)
        {
            var data = new CustomDataWriter();

            Serialize(data);
            var   size    = data.Data.Length;
            var   compute = ComputeTypeLen(size);
            short val     = (short)((MessageId << 2) | compute);

            header.WriteShort(val);
            switch (compute)
            {
            case 1:
                header.WriteByte((byte)size);
                //header.WriteByte(0);//...
                break;

            case 2:
                header.WriteUShort((ushort)size);
                break;

            case 3:
                header.WriteByte((byte)((size >> 0x10) & 0xff));
                header.WriteUShort((ushort)(size & 0xffff));
                break;
            }
            header.WriteBytes(data.Data);
            data.Dispose();

            /*byte b = 3;
             * short @short = (short)Message.SubComputeStaticHeader(this.MessageId, 3);
             * writer.WriteShort(@short);
             * for (int i = 3 - 1; i >= 0; i--)
             * {
             *      writer.WriteByte(0);
             * }
             * this.Serialize(writer);
             * long num = writer.Position - 5L;
             * writer.Seek(2);
             * for (int i = (int)(b - 1); i >= 0; i--)
             * {
             *      writer.WriteByte((byte)(num >> 8 * i & 255L));
             * }
             * writer.Seek((int)num + 5);*/
        }
示例#15
0
        public void Send(Guid guid, TransitionMessage message, bool isRequest)
        {
            CustomDataWriter writer = new CustomDataWriter();

            writer.WriteBoolean(isRequest);
            byte[] guidDatas = guid.ToByteArray();
            writer.WriteInt(guidDatas.Length);
            writer.WriteBytes(guidDatas);

            message.Pack(writer);
            var packet = writer.Data;

            Send(packet);
            if (SSyncCore.ShowProtocolMessage)
            {
                logger.Color2(string.Format("Send {0}", message.ToString()));
            }
        }
 public void Send(Message message)
 {
     if (this.m_singleClient != null)
     {
         this.m_singleClient.Send(message);
     }
     else
     {
         bool flag = false;
         try
         {
             System.Threading.Monitor.Enter(this, ref flag);
             SegmentStream    stream = BufferManager.Default.CheckOutStream();
             CustomDataWriter writer = new CustomDataWriter(stream);
             message.Pack(writer);
             System.Collections.Generic.List <WorldClient> list = new System.Collections.Generic.List <WorldClient>();
             foreach (WorldClient current in this.m_underlyingList)
             {
                 if (current != null)
                 {
                     current.Send(stream);
                     current.OnMessageSent(message);
                 }
                 if (current == null || !current.Connected)
                 {
                     list.Add(current);
                 }
             }
             foreach (WorldClient current2 in list)
             {
                 this.Remove(current2);
             }
         }
         finally
         {
             if (flag)
             {
                 System.Threading.Monitor.Exit(this);
             }
         }
     }
 }
示例#17
0
        public void Send(NetworkMessage msg)
        {
            if (!IsConnected())
            {
                return;
            }

            var writer = new CustomDataWriter();
            var pack   = new MessagePacking();

            pack.Pack(msg, writer);

            lock (Sender)
            {
                if (Debug)
                {
                    Logger.Log($"Send: ({msg.MessageID}) - " + msg.ToString().Split('.').Last(), LogMessageType.Arena);
                }
                Socket.Send(writer.Data);
            }
        }
示例#18
0
 public byte[] hash_function(byte[] packet)
 {
     //object _loc5_ = null;
     //byte[] _loc6_ = null;
     if (this._hashKey == null)
         return packet;
     using (CustomDataWriter writer = new CustomDataWriter())
     {
         writer.WriteBytes(packet);
         CustomDataWriter writer2 = new CustomDataWriter();
         writer2.WriteBytes(this.hash(packet));
         using (RijndaelManaged myRijndael = new RijndaelManaged())
         {
             myRijndael.GenerateIV();
             // Encrypt the string to an array of bytes. 
             byte[] encrypted = EncryptStringToBytes(writer2.Data.ToString(), this._hashKey, myRijndael.IV);
         }
         writer.WriteBytes(writer2.Data);
         return writer.Data;
     }
 }
示例#19
0
 public CustomNetworkMessage(ushort messageId) : base(messageId)
 {
     _writer = new CustomDataWriter();
 }