void SendData(IPacket packet, NetworkConnection connection) { var writer = new DataStreamWriter(BufferSize, Allocator.Temp); writer.Write((ushort)packet.GetPacketType()); packet.ToStream(ref writer); m_Driver.Send(NetworkPipeline.Null, connection, writer); }
public bool DefaultRun(IPacket packet) { PacketType type = (PacketType)packet.GetPacketType(); // todo: 공통 처리 // switch(type) { //} return(false); }
public static byte[] GenerateHeader(byte cid, IPacket p) { byte[] toret = new byte[5]; toret[0] = (byte)((p.GetLength() + HEADERSIZE) << 8 >> 8); toret[1] = (byte)((p.GetLength() + HEADERSIZE) >> 8); toret[2] = cid; toret[3] = p.GetPacketType(); toret[4] = p.GetID(); return(toret); }
public void Send(IPacket packet) { if (IsConnected == false) { Debug.LogError("Please Connect First!!"); return; } // ClearBuffer(); byte[] sendBuffer = PacketSerializer.Serialize(packet); _networkStream.Write(sendBuffer, 0, sendBuffer.Length); Debug.Log("[Send] name: " + packet.GetPacketType()); }
public override void SendData(IPacket packet) { if (!connected) { Debug.LogError("NotConnectedToServer"); return; } var writer = new DataStreamWriter(BufferSize, Allocator.Temp); writer.Write((ushort)packet.GetPacketType()); packet.ToStream(ref writer); m_clientToServerConnection.Send(m_Driver, writer); }
public override void OnReceive(IPacket packet) { PacketType packetType = packet.GetPacketType(); if (packetHandler.ContainsKey(packetType) == false) { Console.Error.WriteLine($"Not Found Packet Handler (packetType: {packetType.ToString()})"); return; } #if DEBUG Console.WriteLine($"received {packetType.ToString()}"); #endif packetHandler[packetType]?.Invoke(packet); }
public override void Run(IPacket packet) { PacketType type = (PacketType)packet.GetPacketType(); switch (type) { case PacketType.E_S_ANS_CHAT: Contents.ReceiveChat(packet); return; } if (base.DefaultRun(packet) == false) { #if DEBUG MessageBox.Show("잘못된 패킷이 수신되었습니다: " + type.ToString(), "error", MessageBoxButtons.OK); Application.Exit(); #endif } }
public int SendUdp(int node, IPacket packet) { int sendSize = 0; if (sessionUdp == null) { return(sendSize); } PacketHeader header = new PacketHeader(); PacketHeaderSerializer headerSerializer = new PacketHeaderSerializer(); header.type = packet.GetPacketType(); byte[] headerData = null; if (headerSerializer.Serialize(header) == true) { headerData = headerSerializer.GetSerializedData(); } byte[] packetData = packet.GetData(); byte[] data = new byte[headerData.Length + packetData.Length]; int headerSize = Marshal.SizeOf(typeof(PacketHeader)); Buffer.BlockCopy(headerData, 0, data, 0, headerSize); Buffer.BlockCopy(packetData, 0, data, headerSize, packetData.Length); sendSize = sessionUdp.Send(node, data, data.Length); if (sendSize < 0 && nodeStateHandler != null) { NetworkState state = new NetworkState(); state.node = node; state.type = NetEventType.SendError; state.result = NetEventResult.Failure; nodeStateHandler.Invoke(ConnectionType.UDP, state); } return(sendSize); }
// 组装这个包 public void GenerateBuffer(ref Byte[] dest, IPacket packet) { Byte[] data = packet.GetData(); int iLength = GetLength(data.Length); // 数据自动加 8 分别存储 消息长度和消息类型 dest = new Byte[iLength]; // 长度 Byte[] bLength = BitConverter.GetBytes(System.Net.IPAddress.HostToNetworkOrder(iLength - 4)); Array.Copy(bLength, 0, dest, 0, 4); // 类型 int iType = packet.GetPacketType(); Byte[] bType = BitConverter.GetBytes(iType); Array.Copy(bType, 0, dest, 4, 4); // 数据 Array.Copy(data, 0, dest, 8, data.Length); }
// 组装这个包 public void GenerateBuffer(ref Byte[] dest, IPacket packet) { Byte[] data = packet.GetData(); int iLength = GetLength(data.Length); dest = new Byte[iLength]; // 包头 Array.Copy(PACKET_HEAD, 0, dest, 0, 2); // 长度 Byte[] bLength = BitConverter.GetBytes(iLength); Array.Copy(bLength, 0, dest, 2, 4); // 类型 int iType = packet.GetPacketType(); Byte[] bType = BitConverter.GetBytes(iType); Array.Copy(bType, 0, dest, 6, 4); // 数据 Array.Copy(data, 0, dest, 10, data.Length); }
public void Send(IPacket packet) { lock (locker) { if (state.Compare(State.Disconnecting)) { return; } #if DEBUG Console.WriteLine($"received {packet.GetPacketType().ToString()}"); #endif byte[] sendBuffer = PacketSerializer.Serialize(packet); socketEventProvider.SendEvent.SetBuffer(sendBuffer, 0, sendBuffer.Length); bool willRaiseEvent = socket.SendAsync(socketEventProvider.SendEvent); if (willRaiseEvent == false) { socketEventProvider.ProcessSend(socketEventProvider.SendEvent); } } }
public static byte[] Serialize(IPacket packet) { PacketType packetType = packet.GetPacketType(); byte[] bodyBytes = packet.Serialize(); byte[] packetTypeBytes = BitConverter.GetBytes((int)packetType); byte[] packetLengthBytes = BitConverter.GetBytes((int)bodyBytes.Length); int length = packetTypeBytes.Length + packetLengthBytes.Length + bodyBytes.Length; byte[] packetBytes = new byte[length]; int offset = 0; Buffer.BlockCopy(packetTypeBytes, 0, packetBytes, offset, packetTypeBytes.Length); offset += packetTypeBytes.Length; Buffer.BlockCopy(packetLengthBytes, 0, packetBytes, offset, packetLengthBytes.Length); offset += packetLengthBytes.Length; Buffer.BlockCopy(bodyBytes, 0, packetBytes, offset, bodyBytes.Length); return(packetBytes); }