Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
 public byte[] ToArray(NetProtocol protocol)
 {
     byte[] header = protocol.Header2Bytes(Count);
     return(header.Concat(byteQueue.ToArray()).ToArray());
 }