コード例 #1
0
ファイル: IPCChannel.cs プロジェクト: baburukiri/AOSharp
        public void Broadcast(IPCMessage msg)
        {
            using (MemoryStream stream = new MemoryStream())
            {
                ISerializer serializer = _serializerResolver.GetSerializer(msg.GetType());
                if (serializer == null)
                {
                    return;
                }

                SerializationContext serializationContext = new SerializationContext(_serializerResolver);
                StreamWriter         writer = new StreamWriter(stream)
                {
                    Position = 0
                };
                writer.WriteUInt16(PacketPrefix);
                writer.WriteInt16(0);
                writer.WriteByte(_channelId);
                writer.WriteInt32(DynelManager.LocalPlayer.Identity.Instance);
                writer.WriteInt16(msg.Opcode);
                serializer.Serialize(writer, serializationContext, msg);
                long length = writer.Position;
                writer.Position = 2;
                writer.WriteInt16((short)length);
                writer.Dispose();

                byte[] serialized = stream.ToArray();
                _udpClient.Send(serialized, serialized.Length, _remoteEndPoint);
            }
        }
コード例 #2
0
        public void Serialize(Stream stream, Message message, out SerializationContext serializationContext)
        {
            serializationContext = null;
            var serializer = this.serializerResolver.GetSerializer(message.Body.GetType());

            if (serializer == null)
            {
                return;
            }

            serializationContext = new SerializationContext(this.serializerResolver);
            var writer = new StreamWriter(stream)
            {
                Position = 0
            };

            this.headerSerializer.Serialize(writer, serializationContext, message.Header);
            serializer.Serialize(writer, serializationContext, message.Body);
            var length = writer.Position;

            writer.Position = 6;
            writer.WriteInt16((short)length);
        }