Exemplo n.º 1
0
        /// <summary>
        /// 发包[发送Tcp包/发送Udp数据报]
        /// </summary>
        /// <param name="packet"></param>
        public override void SendMessage(NetPacket packet)
        {
            if (packet == null || packet.Command == null || packet.PacketHead == null)
                return;

            #region【计算包体长度】
            packet.PacketHead.Len = GetCanSerializableObjectSize(packet.Command);
            #endregion

            #region【写入包头】
            if (this.IsNetStreamCanWrite)
            {
                _netStream.Write(BitConverter.GetBytes(packet.PacketHead.Version), 0, Marshal.SizeOf(packet.PacketHead.Version));
                _netStream.Write(BitConverter.GetBytes((Int32)packet.PacketHead.PType), 0, sizeof(Int32));
                _netStream.Write(BitConverter.GetBytes(packet.PacketHead.Len), 0, Marshal.SizeOf(packet.PacketHead.Len));
            }
            #endregion

            #region【写入包体】
            byte[] buffer = null;
            using (MemoryStream m = new MemoryStream())
            {
                SerializeHelper<BinarySerializeHelper>().Serialize(m, packet.Command);
                m.Position = 0;
                buffer = new byte[m.Length];
                m.Read(buffer, 0, (Int32)m.Length);
            }

            if (buffer != null && this.IsNetStreamCanWrite)
                _netStream.Write(buffer, 0, buffer.Length);
            #endregion
        }
Exemplo n.º 2
0
        /// <summary>
        /// 发包 
        /// </summary>
        /// <param name="packet"></param>
        public override void SendMessage(NetPacket packet)
        {
            if (packet == null || packet.Command == null || packet.PacketHead == null)
                return;

            if (OnBeforeSendPacket != null)
                OnBeforeSendPacket(packet);

            MemoryStream mStream = new MemoryStream();
            try
            {
                #region【计算包体长度】
                if (packet.PacketHead.Len == 0)
                {
                    packet.PacketHead.Len = GetCanSerializableObjectSize(packet.Command);
                }

                #endregion

                #region【写入包头】
                mStream.Write(BitConverter.GetBytes(packet.PacketHead.Version), 0, Marshal.SizeOf(packet.PacketHead.Version));
                mStream.Write(BitConverter.GetBytes((Int32)packet.PacketHead.PType), 0, sizeof(Int32));
                mStream.Write(BitConverter.GetBytes(packet.PacketHead.Len), 0, Marshal.SizeOf(packet.PacketHead.Len));
                #endregion

                #region【写入包体】
                byte[] buffer = null;

                using (MemoryStream m = new MemoryStream())
                {
                    SerializeHelper<BinarySerializeHelper>().Serialize(m, packet.Command);
                    m.Position = 0;
                    buffer = new byte[m.Length];
                    m.Read(buffer, 0, (Int32)m.Length);
                }

                mStream.Write(buffer, 0, buffer.Length);

                #endregion

                #region【将内存流一次写入网络流,异步写入】
                mStream.Seek(0, SeekOrigin.Begin);
                _netStream.BeginWrite(mStream.GetBuffer(), 0, (Int32)mStream.Length, new AsyncCallback(AsyncCallbackWriteToNetStream), new WriteNetStreamASyncCallbackParam { NetStream = _netStream, Packet = packet });
                #endregion
            }
            catch (Exception e)
            {
                NetServiceErrorReason reason = new NetServiceErrorReason();
                reason.Exception = e.InnerException ?? e;
                reason.SendData = packet.Command.Data;
                this.SendErrorHandler(reason);
            }
            mStream.Close();
        }
Exemplo n.º 3
0
 /// <summary>
 /// 创建数据包
 /// </summary>
 private NetPacket CreateNetPacket(string topicName, object data)
 {
     ICommand command = new PublishCommand();
     command.Data = data;
     command.TopicName = topicName;
     NetPacket packet = new NetPacket();
     packet.Command = command;
     return packet;
 }
Exemplo n.º 4
0
 private void ClientReceivedPacket(NetPacket packet)
 {
     if (packet != null && packet.Command != null)
     {
         if (packet.Command is ServerClosed) // 服务端断开
         {
             OnServerClosed(new EventArgs());
             LogManger.Warn("服务端断开连接", this.GetType());
         }
         else if (packet.Command.Data != null)
         {
             OnOnReceiveMessageEventHandler(packet.Command.Data);
         }
     }
 }