コード例 #1
0
    void DispatchReceive()
    {
        if (m_socket == null)
        {
            return;
        }

        // 수신처리.
        try {
            while (m_socket.Poll(0, SelectMode.SelectRead))
            {
                byte[] buffer = new byte[m_packetSize];

                int recvSize = m_socket.Receive(buffer, buffer.Length, SocketFlags.None);

                if (recvSize == 0)
                {
                    // 연결 끊기.
                    Debug.Log("[TCP]Disconnect recv from other.");
                    Disconnect();
                }
                else if (recvSize > 0)
                {
                    //Debug.Log("[TCP]DispatchReceive received [Port:" + m_port + "]");
                    m_recvQueue.Enqueue(buffer, recvSize);
                }
            }
        }
        catch {
            return;
        }
    }
コード例 #2
0
    void DispatchReceive()
    {
        if (socket == null)
        {
            return;
        }

        try {
            while (socket.Poll(0, SelectMode.SelectRead))
            {
                byte[] buffer = new byte[PACKET_SIZE];

                int recvSize = socket.Receive(buffer, buffer.Length, SocketFlags.None);

                if (recvSize == 0)
                {
                    Disconnect();
                }
                else if (recvSize > 0)
                {
                    recvQueue.Enqueue(buffer, recvSize);
                }
            }
        } catch {
            if (networkStateHandler != null)
            {
                NetworkState state = new NetworkState();
                state.type   = NetEventType.ReceiveError;
                state.result = NetEventResult.Failure;
                networkStateHandler(this, state);
            }
            return;
        }
    }
コード例 #3
0
 public void Receive(Socket socket, byte[] data, int size) // 받기
 {
     //CheckPacket(socket, data, 0, size);
     lock (m_lockMainQueue)                       // 비동기 Receive에 의한 스레드와 메인스레드간의 동기화를 위해 Lock을 걸어준다.
     {
         m_mainQueue.Enqueue(socket, data, size); // 큐에 집어 넣는다.
     }
 }
コード例 #4
0
        public void TestPackagingOneTypeMessages()
        {
            var packetQueue = new PacketQueue(100, ConsoleLogger);

            packetQueue.Count.Should().Be(0);

            packetQueue.Enqueue(new DeliveryOptions(false, false), new Payload(new byte[] { 1 }, 0, 1));
            packetQueue.Count.Should().Be(1);
            packetQueue.Enqueue(new DeliveryOptions(false, false), new Payload(new byte[] { 1 }, 0, 1));
            packetQueue.Count.Should().Be(1);
            packetQueue.Enqueue(new DeliveryOptions(false, false), new Payload(new byte[] { 1 }, 0, 1));
            packetQueue.Count.Should().Be(1);
            packetQueue.Enqueue(new DeliveryOptions(true, false), new Payload(new byte[] { 1 }, 0, 1));
            packetQueue.Count.Should().Be(2);
            packetQueue.Enqueue(new DeliveryOptions(true, false), new Payload(new byte[] { 1 }, 0, 1));
            packetQueue.Count.Should().Be(2);
            packetQueue.Enqueue(new DeliveryOptions(true, true), new Payload(new byte[] { 1 }, 0, 1));
            packetQueue.Count.Should().Be(3);
            packetQueue.Enqueue(new DeliveryOptions(true, true), new Payload(new byte[] { 1 }, 0, 1));
            packetQueue.Count.Should().Be(3);
            packetQueue.Enqueue(new DeliveryOptions(false, true), new Payload(new byte[] { 1 }, 0, 1));
            packetQueue.Count.Should().Be(4);
            packetQueue.Enqueue(new DeliveryOptions(false, true), new Payload(new byte[] { 1 }, 0, 1));
            packetQueue.Count.Should().Be(4);

            foreach (var packet in packetQueue)
            {
                packet.Length.Should().BeGreaterThan(1);
            }

            foreach (var packet in (IEnumerable)packetQueue)
            {
                packet.Should().BeOfType <PacketInfo>();
            }
        }
コード例 #5
0
ファイル: TransportTCP.cs プロジェクト: CJW23/camp4_sercle
    // 스레드 측의 수신처리.
    void DispatchReceive()
    {
        // 수신처리.
        try
        {
            while (m_isConnected && m_socket.Poll(0, SelectMode.SelectRead))
            {
                if (sceneName == "Game")
                {
                    int gameBufferSize = 37;

                    byte[] buffer = new byte[gameBufferSize];

                    int cnt = 0;
                    while (cnt < gameBufferSize)
                    {
                        int recvSize = m_socket.Receive(buffer, cnt, 1, SocketFlags.None);
                        if (recvSize == 0)
                        {
                            // 끊기.
                            Debug.Log("Disconnect recv from client.");
                            Disconnect();
                        }
                        cnt += recvSize;
                        if (cnt == 37)
                        {
                            break;
                        }
                    }
                    Debug.Log("(게임씬)사이즈는 : " + cnt);
                    m_recvQueue.Enqueue(buffer, cnt);
                }
                else
                {
                    byte[] buffer   = new byte[1024];
                    int    recvSize = m_socket.Receive(buffer, buffer.Length, SocketFlags.None);
                    if (recvSize == 0)
                    {
                        // 끊기.
                        Debug.Log("Disconnect recv from client.");
                        Disconnect();
                    }
                    else if (recvSize > 0)
                    {
                        Debug.Log("사이즈는 : " + recvSize);
                        m_recvQueue.Enqueue(buffer, recvSize);
                    }
                }
            }
        }
        catch
        {
            return;
        }
    }
コード例 #6
0
        public void TestPackagingIntoMaxSizeWithLength()
        {
            var packetQueue = new PacketQueue(10, ConsoleLogger);

            packetQueue.Count.Should().Be(0);
            packetQueue.Enqueue(new DeliveryOptions(false, true), new Payload(new byte[] { 3, 1, 4, 5, 6 }, 0, 2));
            packetQueue.Enqueue(new DeliveryOptions(false, true), new Payload(new byte[] { 2, 1, 4, 5, 6 }, 0, 2));
            packetQueue.Count.Should().Be(1);
            packetQueue.Enqueue(new DeliveryOptions(false, true), new Payload(new byte[] { 2, 1 }, 0, 2));
            packetQueue.Count.Should().Be(2);
        }
コード例 #7
0
        public void TestPackagingSizeWithLength()
        {
            var packetQueue = new PacketQueue(10, ConsoleLogger);

            packetQueue.Count.Should().Be(0);
            packetQueue.Enqueue(new DeliveryOptions(false, true), new Payload(new byte[] { 3, 1, 4, 5, 6 }, 1, 2));
            packetQueue.Enqueue(new DeliveryOptions(false, true), new Payload(new byte[] { 2, 1, 4, 5, 6 }, 1, 2));
            packetQueue.Count.Should().Be(1);
            packetQueue.TryDequeue(out var packet).Should().BeTrue();
            packet.Length.Should().Be(4 + 5); //with metainfo
        }
コード例 #8
0
ファイル: Class_User.cs プロジェクト: Jiwoo-Lim/RPGGame
        public void DispatchReceive()
        {
            try
            {
                while (mSocketForClient.Poll(0, SelectMode.SelectRead))
                {
                    byte[] buffer = new byte[Config.MTU];

                    int recvSize = mSocketForClient.Receive(buffer, buffer.Length, SocketFlags.None);
                    if (recvSize == 0)
                    {
                        Console.WriteLine("Disconnect recv from client.");

                        if (mUserConnect == true)
                        {
                            RPGGameServer.DeleteMyUserInfo(this);
                        }

                        Disconnect();
                    }
                    else if (recvSize > 0)
                    {
                        mRecvQueue.Enqueue(buffer, recvSize);
                    }
                }
            }
            catch
            {
                return;
            }
        }
コード例 #9
0
ファイル: NetworkSession.cs プロジェクト: maxc0c0s/ACE
 public void EnqueueSend(params ServerPacket[] packets)
 {
     foreach (var packet in packets)
     {
         PacketQueue.Enqueue(packet);
     }
 }
コード例 #10
0
    // 스레드 측 수신처리.
    void DispatchReceive()
    {
        // 수신처리.
        try
        {
            while (m_socket.Poll(0, SelectMode.SelectRead))
            {
                byte[] buffer = new byte[s_mtu];

                int recvSize = m_socket.Receive(buffer, buffer.Length, SocketFlags.None);
                if (recvSize == 0)
                {
                    // 끊기.
                    Debug.Log("Disconnect recv from client.");
                    Disconnect();
                }
                else if (recvSize > 0)
                {
                    m_recvQueue.Enqueue(buffer, recvSize);
                }
            }
        }
        catch
        {
            return;
        }
    }
コード例 #11
0
    /// <summary>
    /// Dispatch Thread의 수신 처리부
    /// 수신 데이터가 있으면 이를 받아서 버퍼 큐에 저장한다.
    /// 전송되는 데이터가 없으면 끊겼다고 판단하여 끊김을 통지한다.
    /// </summary>
    private void DispatchReceive()
    {
        // 수신처리.
        try
        {
            while (_socket.Poll(0, SelectMode.SelectRead))
            {
                byte[] buffer = new byte[AppData.BufferSize];

                int recvSize = _socket.Receive(buffer, buffer.Length, SocketFlags.None);
                if (recvSize == 0)
                {
                    // 끊기.
                    Debug.Log("Disconnect recv from Server.");
                    Disconnect(false);
                }
                else if (recvSize > 0)
                {
                    _recvQueue.Enqueue(buffer, recvSize);
                }
            }
        }
        catch
        {
            return;
        }
    }
コード例 #12
0
ファイル: TransportUdp.cs プロジェクト: wyuurla/006772
    public void SetReceiveData(byte[] data, int size, IPEndPoint endPoint)
    {
        string str = System.Text.Encoding.UTF8.GetString(data).Trim('\0');

        if (str.Contains(m_requestData))
        {
            // 접속 요청 패킷 수신.
            if (m_isConnected == false && m_handler != null)
            {
                NetEventState state = new NetEventState();
                state.type   = NetEventType.Connect;
                state.result = NetEventResult.Success;
                m_handler(this, state);

                //IPEndPoint ep = m_localEndPoint;
                //Debug.Log("[UDP]Connected from client. [address:" + ep.Address.ToString() + " port:" + ep.Port + "]");
            }

            m_isConnected    = true;
            m_remoteEndPoint = endPoint;
            m_timeOutTicker  = DateTime.Now;
        }
        else if (size > 0)
        {
            m_recvQueue.Enqueue(data, size);
        }
    }
コード例 #13
0
    //송신처리
    public int Send(byte[] data, int size)
    {
        if(sendQueue == null)
            return 0;

        return sendQueue.Enqueue(data, size);
    }
コード例 #14
0
ファイル: Stream.cs プロジェクト: eigenvector11/TestClient
        private void HandlePacket(Packet packet)
        {
            if (packet == null)
            {
                return;
            }

            // Logger.Log("Handling packet ...");

            if (packet.Name.Equals("empty"))
            {
                Logger.Log("Packet is empty");
            }

            if (packet.Name.Equals("error"))
            {
                Logger.Log(packet.HasChild("host-unknown")
                               ? "error - host unknown"
                               : "error");
            }

            if (!packet.HasAttribute("to"))
            {
                // Logger.Log("Packet does not have To attribute");
            }
            else
            {
                if (!packet.GetAttribute("to").ToLower().Trim().StartsWith(Properties.Account.Jid.ToLower().Trim()))
                {
                    // Logger.Log("Packet To attribute does not start with Jid " + Properties.Account.Jid);
                }
            }

            _stanzaQueue.Enqueue(packet);
        }
コード例 #15
0
ファイル: TransportUDP.cs プロジェクト: wyuurla/006772
    void DispatchReceive()
    {
        if (m_socket == null)
        {
            return;
        }

        // 수신 처리.
        try {
            while (m_socket.Poll(0, SelectMode.SelectRead))
            {
                byte[] buffer = new byte[m_packetSize];

                int recvSize = m_socket.Receive(buffer, buffer.Length, SocketFlags.None);

                //Debug.Log("Recv udp data." + recvSize);

                if (recvSize == 0)
                {
                    // 끊기.
                    Disconnect();
                }
                else if (recvSize > 0)
                {
                    m_recvQueue.Enqueue(buffer, recvSize);
                    // 수신 시각을 갱신.
                    m_ticker = DateTime.Now;
                }
            }
        }
        catch {
            return;
        }
    }
コード例 #16
0
 public void PacketProcess(Packet iPacket)
 {
     lock (PacketQueue)
     {
         PacketQueue.Enqueue(iPacket);
     }
 }
コード例 #17
0
 //서버측 수신처리(스레드 작업)
 void DispatchReceive()
 {
     try
     {
         while(ClientSocket.Poll(0, SelectMode.SelectRead))
         {
             byte[] buffer = new byte[BUFFERSIZE];
             int receiveSize = ClientSocket.Receive(buffer, buffer.Length, SocketFlags.None);
             if(receiveSize == 0)
             {
                 //끊기
                 Debug.Log("Disconnect receive from client");
                 Disconnect();
             }
             else if(receiveSize > 0)
             {
                 receiveQueue.Enqueue(buffer, receiveSize);
             }
         }
     }
     catch
     {
         return;
     }
 }
コード例 #18
0
 public int Send(byte[] data, int size)
 {
     if (m_sendQueue == null)
     {
         return(0);
     }
     return(m_sendQueue.Enqueue(data, size));
 }
コード例 #19
0
        // enqueue - receive queue
        private void OnReceivePacketFromClient(Socket socket, byte[] message, int size)
        {
            receiveQueue.Enqueue(message, size);

            lock (lockIndexQueue)
            {
                indexClientQueue.Enqueue(socket);
            }
        }
コード例 #20
0
        private void OnReceivePayload(object sender, SocketAsyncEventArgs args)
        {
            args.Completed -= OnReceivePayload;

            var error = args.SocketError;

            if (error != SocketError.Success)
            {
                Log.outWarn("Client {0} triggered a socket error ({1}) when trying to fetch a payload - disconnected.", this, error);
                Disconnect();
                return;
            }

            var bytesTransferred = args.BytesTransferred;

            if (bytesTransferred == 0)
            {
                Log.outInfo("Client {0} disconnected gracefully.", this);
                Disconnect();
                return;
            }

            if (Crypt.IsInitialized)
            {
                while (bytesTransferred > 0)
                {
                    Crypt.Decrypt(ReceiveBuffer);

                    var    header = BitConverter.ToUInt32(ReceiveBuffer, 0);
                    ushort size   = (ushort)(header >> 12);
                    ushort opcode = (ushort)(header & 0xFFF);

                    ReceiveBuffer[0] = (byte)(0xFF & size);
                    ReceiveBuffer[1] = (byte)(0xFF & (size >> 8));
                    ReceiveBuffer[2] = (byte)(0xFF & opcode);
                    ReceiveBuffer[3] = (byte)(0xFF & (opcode >> 8));

                    var length = BitConverter.ToUInt16(ReceiveBuffer, 0) + 4;

                    var packetData = new byte[length];
                    Array.Copy(ReceiveBuffer, packetData, length);

                    PacketReader packet = new PacketReader(packetData);
                    PacketQueue.Enqueue(packet);

                    bytesTransferred -= length;
                    Array.Copy(ReceiveBuffer, length, ReceiveBuffer, 0, bytesTransferred);
                    OnData();
                }
            }
            else
            {
                OnData();
            }

            Receive();
        }
コード例 #21
0
    public int Send(byte[] data, int size)
    {
        if (mSendQueue == null)
        {
            return(0);
        }

        int tResult = mSendQueue.Enqueue(data, size);

        return(tResult);
    }
コード例 #22
0
        public async Task SendPacket(IPacket packet)
        {
            EventHandler <PacketEventArgs> sendingPacket = SendingPacket;

            if (sendingPacket != null)
            {
                sendingPacket(this, new PacketEventArgs(this, packet));
            }

            PacketQueue.Enqueue(packet);
            await FlushPackets();
        }
コード例 #23
0
 /// <summary>
 /// 接続完了後に呼び出し可能
 /// 送信データをパケットとしてキューに格納する
 /// 送信したデータのサイズを返す
 /// </summary>
 /// <param name="data">データ</param>
 /// <returns>格納したデータのサイズ</returns>
 /// <exception cref="ArgumentException">データ長が0またはパケットサイズを超える場合</exception>
 /// <exception cref="InvalidOperationException">接続が確立されていない場合</exception>
 public int Send(byte[] data)
 {
     if (!IsConnected)
     {
         throw new InvalidOperationException("Send : 接続が完了していないためSendを呼び出せません");
     }
     //送信データがパケット長を超えるか送信データが空であればエラー
     if (data.Length > PACKET_SIZE || data.Length == 0)
     {
         throw new ArgumentException(this.ToString() + " : 送信データのサイズが不正です");
     }
     return(sendQueue.Enqueue(data));
 }
コード例 #24
0
ファイル: Class_User.cs プロジェクト: Jiwoo-Lim/RPGGame
        public int Send(byte[] data, int size)
        {
            if (mSendQueue == null)
            {
                return(0);
            }

            int tResult = mSendQueue.Enqueue(data, size);

            //Console.WriteLine("Send: " + tResult.ToString());

            return(tResult);
        }
コード例 #25
0
        public void Start()
        {
            serialPort.Open();

            byte[] buffer = new byte[SPO2Packet.PACKET_SIZE];

            reading = true;

            while (reading)
            {
                bool       readOk = true;
                SPO2Packet packet = new SPO2Packet();

                for (int i = 0; i < buffer.Length && readOk; i++)
                {
                    int val = serialPort.ReadByte();
                    if (val == -1)
                    {
                        throw new Exception("Serial Port: End of stream.");
                    }

                    byte readByte = (byte)val;

                    if ((i == 0 && !highBitOn(readByte)) ||
                        (i != 0 && highBitOn(readByte)))
                    {
                        readOk = false;
                    }

                    buffer[i] = readByte;
                }

                packet.Unpack(buffer);

                if (readOk && packet.HeartRate != 0)
                {
                    PacketQueue.Enqueue(packet);
                    while (PacketQueue.Count > maxQueueSize)
                    {
                        SPO2Packet temp;
                        PacketQueue.TryDequeue(out temp);
                    }
                }
            }

            if (serialPort != null)
            {
                serialPort.Close();
            }
        }
コード例 #26
0
    void DispatchReceive()
    {
        if (m_listener == null)
        {
            return;
        }

        // 수신 처리..
        try {
            while (m_listener.Poll(0, SelectMode.SelectRead))
            {
                byte[]     buffer   = new byte[m_packetSize];
                IPEndPoint sender   = new IPEndPoint(IPAddress.Any, 0);
                EndPoint   remoteEp = (EndPoint)sender;

                int recvSize = m_listener.ReceiveFrom(buffer, SocketFlags.None, ref remoteEp);

                m_remoteEndPoint = (IPEndPoint)remoteEp;
                if (m_endPoint == null)
                {
                    m_endPoint = m_remoteEndPoint;
                }

                //Debug.Log("remote:" + m_remoteEndPoint.Address.ToString());

                string str = System.Text.Encoding.UTF8.GetString(buffer);
                if (m_requestData.CompareTo(str.Trim('\0')) == 0)
                {
                    // 접속 요청 패킷.
                    ;
                }
                else if (recvSize == 0)
                {
                    // 접속 종료.
                    Disconnect();
                }
                else if (recvSize > 0)
                {
                    // 데이터를 수신.
                    m_recvQueue.Enqueue(buffer, recvSize);
                    // 수신 시각 갱신.
                    m_timeOutTicker = DateTime.Now;
                }
            }
        }
        catch {
            return;
        }
    }
コード例 #27
0
        public void SendPacket(IServerPacket packet)
        {
            lock (Sync) {
                if (!IsConnected)
                {
                    PacketQueue.Enqueue(packet);
                    return;
                }

                if (!Connection.IsAvailable)
                {
                    return;
                }

                Connection.Send(packet.Pack());
            }
        }
コード例 #28
0
        private void ReadPacketFileHandler(byte[] e, bool isEnd)
        {
            if (isEnd)
            {
                PcapFileEOF = true;
                return;
            }

            PosixTimeval time       = new PosixTimeval();
            RawCapture   rawCapture = new RawCapture(LinkLayers.Ethernet, time, e);

            lock (PacketQueueLock)
            {
                // push the packet to the queue .
                PacketQueue.Enqueue(rawCapture);
            }
        }
コード例 #29
0
        public void ReceiveRawData(byte[] data, int dataLength)
        {
            var  timestamp  = GetNow() + GetRandomDelayInSeconds() * 0.5f; // Ping is full trip time, since we scramble both server and client, we cut the duration in half
            bool shouldDrop = ((_random.Next() % 100) < _settings.DropChance) || _incomingDelayQueue.Count > ALWAYS_DROP_AT_QUEUE_COUNT;

            if (shouldDrop)
            {
                return;
            }
            var dataCopy = new byte[data.Length];

            Array.Copy(data, 0, dataCopy, 0, data.Length);
            _incomingDelayQueue.Enqueue(new QueuedPacket()
            {
                data = dataCopy, length = dataLength, timestamp = timestamp
            });
        }
コード例 #30
0
 //スレッドの受信処理
 void DispatchReceive()
 {
     //受信処理
     while (m_socket.Poll(0, SelectMode.SelectRead))
     {
         byte[] buffer   = new byte[s_mtu];
         int    recvSize = m_socket.Receive(buffer, buffer.Length, SocketFlags.None);
         if (recvSize == 0)
         {
             //切断
             Disconnect();
         }
         else if (recvSize > 0)
         {
             m_recvQueue.Enqueue(buffer, recvSize);
         }
     }
 }