public void SendTo(Socket client, byte[] data) { if (data == null) { return; } if (!client.Connected) { OnFatalError(new Exception("Packet can't be sent because the socket isn't connected.")); return; } GClientData clientData; lock (ClientSet) { clientData = clientDataDict[client]; } byte[] packet = protocol.Header2Bytes(data.Length).Concat( data).ToArray(); lock (clientData.sendEventArgs) { if (clientData.isSending) { clientData.sendQueue.Enqueue(packet); return; } else { clientData.isSending = true; } } try { clientData.sendEventArgs.SetBuffer(packet, 0, packet.Length); if (!clientData.SendAsync()) { Base_OnSendPacket(client, clientData.sendEventArgs); } } catch (Exception ex) { DisconnectClientByError(clientData.socket, ex); } }
public void Send(byte[] data) { if (data == null) { return; } if (state != GClientState.Connected) { OnFatalError(new Exception("Packet can't be sent because the socket isn't connected.")); return; } PacketBuilder builder = new PacketBuilder(); builder.Append(protocol.Header2Bytes(data.Length)); builder.Append(data); byte[] packet = builder.ToArray(); lock (sendEventArgs) { if (isSending) { sendQueue.Enqueue(packet); return; } else { isSending = true; } } try { sendEventArgs.SetBuffer(packet, 0, packet.Length); if (!socket.SendAsync(sendEventArgs)) { Base_OnPacketSended(socket, sendEventArgs); } } catch (Exception ex) { DisconnectByError(ex); } }
public byte[] ToArray(NetProtocol protocol) { byte[] header = protocol.Header2Bytes(Count); return(header.Concat(byteQueue.ToArray()).ToArray()); }