public void SendTo(Socket client, byte[] data) { ClientData 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()) { OnSendPacket(client, clientData.sendEventArgs); } } catch (Exception ex) { DisconnectClientByError(clientData.socket, ex); } }
public void Send(byte[] data) { if (state != ClientState.Connected || data == null) { 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)) { OnPacketSended(socket, sendEventArgs); } } catch (Exception ex) { DisconnectByError(ex); } }
public byte[] ToArray(NetProtocol protocol) { byte[] header = protocol.Header2Bytes(Count); return(header.Concat(byteQueue.ToArray()).ToArray()); }