コード例 #1
0
        public void Send(byte flag, ushort opcode, object message)
        {
            if (this.IsDisposed)
            {
                throw new Exception("session已经被Dispose了");
            }

            MemoryStream stream = this.Stream;

            stream.Seek(Packet.MessageIndex, SeekOrigin.Begin);
            stream.SetLength(Packet.MessageIndex);
            this.Network.MessagePacker.SerializeTo(message, stream);
            stream.Seek(0, SeekOrigin.Begin);

            this.byteses[0][0] = flag;
            this.byteses[1].WriteTo(0, opcode);
            int index = 0;

            foreach (var bytes in this.byteses)
            {
                Array.Copy(bytes, 0, stream.GetBuffer(), index, bytes.Length);
                index += bytes.Length;
            }

#if SERVER
            // 如果是allserver,内部消息不走网络,直接转给session,方便调试时看到整体堆栈
            if (this.Network.AppType == AppType.AllServer)
            {
                Session session = this.Network.Entity.GetComponent <NetInnerComponent>().Get(this.RemoteAddress);
                Packet  packet  = ((TChannel)this.channel).parser.packet;
                session.Run(packet);
                return;
            }
#endif

            this.Send(stream);
        }
コード例 #2
0
ファイル: Session.cs プロジェクト: FeelingFollower/DEV03
        public void Send(byte flag, ushort opcode, byte[] bytes)
        {
            if (this.IsDisposed)
            {
                //断线操作
                ///TODO
                Log.Warning("session已经被Dispose了");
                //throw new Exception("session已经被Dispose了");
            }
            this.byteses[0][0] = flag;
            this.byteses[1]    = BitConverter.GetBytes(opcode);
            this.byteses[2]    = bytes;

#if SERVER
            // 如果是allserver,内部消息不走网络,直接转给session,方便调试时看到整体堆栈
            if (this.Network.AppType == AppType.AllServer)
            {
                Session session = this.Network.Entity.GetComponent <NetInnerComponent>().Get(this.RemoteAddress);
                this.pkt.Length = 0;
                ushort index = 0;
                foreach (var byts in byteses)
                {
                    Array.Copy(byts, 0, this.pkt.Bytes, index, byts.Length);
                    index += (ushort)byts.Length;
                }

                this.pkt.Length = index;
                this.pkt.Flag   = flag;
                this.pkt.Opcode = opcode;
                session.Run(this.pkt);
                return;
            }
#endif

            channel.Send(this.byteses);
        }