Example #1
0
        private bool ReceiveData()
        {
            var msg = new Byte[4096];

            while (true)
            {
                if (m_FreeSocket)
                {
                    return(true);
                }
                if ((m_Socket != null) && (m_Socket.Connected))
                {
                    try
                    {
                        var bytesRead = m_Socket.Receive(msg, 0, 4096, SocketFlags.None);
                        if (bytesRead > 0)
                        {
                            //msgReceived += Encoding.UTF8.GetString(msg, 0, bytesRead);
                            if (PTZLogger.Log.IsEnabled(LogLevel.Debug))
                            {
                                PTZLogger.Log.Debug("Raw msg : {0}", BitConverter.ToString(msg, 0, bytesRead));
                            }
                            if (true)
                            {
                                m_ClientCallback.CompletionMessage();
                            }
                        }
                        else
                        {
                            PTZLogger.Log.Info("{0},{1}, The client has disconnected. The socket will be closed.", m_Name, m_Host);
                            break;
                        }
                    }
                    catch (SocketException exception)
                    {
                        if (exception.ErrorCode != 10004)//ErrorCode 10004: A blocking operation was interrupted by a call to WSACancelBlockingCall.
                        {
                            PTZLogger.Log.Error(exception, "{0},{1}, Error 10004 when recieved data", m_Name, m_Host);
                        }
                        //else Nothing to do, it's just a socket close.
                        return(m_FreeSocket);
                    }
                    catch (Exception ex)
                    {
                        PTZLogger.Log.Error(ex, "{0},{1}, Error when recieved data", m_Name, m_Host);
                        //a socket error has occured
                        return(m_FreeSocket);
                    }



                    //PTZLogger.Log.Debug("Residue after parsing : {0}", msgReceived);
                }
            }
            return(false);
        }
Example #2
0
        private bool ReceiveData()
        {
            var   bufferByteArray   = new Byte[MAX_BYTEARRAY_LENGTH];
            var   receivedByteArray = new Byte[MAX_RECEIVED_BYTEARRAY_LENGTH];
            short lenByteArray      = 0;

            while (true)
            {
                if (m_FreeSocket)
                {
                    return(true);
                }

                if ((m_Socket != null) && (m_Socket.Connected))
                {
                    try
                    {
                        var bytesRead = m_Socket.Receive(receivedByteArray, 0, MAX_RECEIVED_BYTEARRAY_LENGTH, SocketFlags.None);
                        if (bytesRead > 0)
                        {
                            //msgReceived += Encoding.UTF8.GetString(msg, 0, bytesRead);
                            if (PTZLogger.Log.IsEnabled(LogLevel.Debug))
                            {
                                PTZLogger.Log.Debug("ReceiveData {0},{1}, Raw msg : {2}", m_Name, m_Host, BitConverter.ToString(receivedByteArray, 0, bytesRead));
                            }

                            // check length max and move received byte array in global byte array
                            if (lenByteArray + bytesRead >= MAX_BYTEARRAY_LENGTH)
                            {
                                PTZLogger.Log.Error("ReceiveData {0},{1}, Buffer byteArray overflow (waiting buffer:{2}, bytesRead:{3}, total:{4}, max allowed:{5}) BUFFER CLEARED", m_Name, m_Host, lenByteArray, bytesRead, lenByteArray + bytesRead, MAX_BYTEARRAY_LENGTH);
                                lenByteArray = 0;
                                Array.Clear(receivedByteArray, 0, MAX_RECEIVED_BYTEARRAY_LENGTH);
                                Array.Clear(bufferByteArray, 0, MAX_BYTEARRAY_LENGTH);
                                continue;
                            }

                            Array.Copy(receivedByteArray, lenByteArray, bufferByteArray, 0, bytesRead);
                            Array.Clear(receivedByteArray, 0, MAX_RECEIVED_BYTEARRAY_LENGTH);

                            // search message begin
                            short startPosition = 0;
                            for (; startPosition < bytesRead - 1; startPosition++)
                            {
                                // found
                                if (bufferByteArray[startPosition] == 0x00 && bufferByteArray[startPosition + 1] != 0x00)
                                {
                                    break;
                                }
                            }

                            // check startPosition
                            if (startPosition > bytesRead - 2)
                            {
                                PTZLogger.Log.Debug("ReceiveData {0},{1}, startPos({2}) > bytesRead({3}) - 2", m_Name, m_Host, startPosition, bytesRead);
                                continue;
                            }

                            // check remaining length contains the message
                            short msgLen = bufferByteArray[startPosition + 1];
                            if (msgLen > bytesRead - startPosition)
                            {
                                PTZLogger.Log.Debug("ReceiveData {0},{1}, msgLen({2})> bytesRead({3}) - startPos({4})", m_Name, m_Host, msgLen, bytesRead, startPosition);
                                continue;
                            }

                            // prepare the message for callback
                            byte[] message = new byte[msgLen];
                            Array.Copy(bufferByteArray, startPosition, message, 0, msgLen);

                            // delete message and dummy
                            Array.Clear(bufferByteArray, 0, startPosition + msgLen);

                            // callback
                            m_ClientCallback.CompletionMessage(BitConverter.ToString(message, 0, msgLen));
                        }
                        else
                        {
                            PTZLogger.Log.Info("ReceiveData {0},{1}, The client has disconnected. The socket will be closed.", m_Name, m_Host);
                            break;
                        }
                    }
                    catch (SocketException exception)
                    {
                        if (exception.ErrorCode != 10004)//ErrorCode 10004: A blocking operation was interrupted by a call to WSACancelBlockingCall.
                        {
                            PTZLogger.Log.Error(exception, "ReceiveData {0},{1}, Error 10004 when received data", m_Name, m_Host);
                        }
                        //else Nothing to do, it's just a socket close.
                        return(m_FreeSocket);
                    }
                    catch (Exception ex)
                    {
                        PTZLogger.Log.Error(ex, "ReceiveData {0},{1}, Error when received data", m_Name, m_Host);
                        //a socket error has occured
                        return(m_FreeSocket);
                    }

                    //PTZLogger.Log.Debug("Residue after parsing : {0}", msgReceived);
                }
            }
            return(false);
        }