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); }
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); }