예제 #1
0
    //토탈 버퍼에 담아서 받은 패킷 나눠주는 처리 한다.
    void Total_Recv_Operation(int _Recv_Buffer_Size, byte[] _Recv_Buffer)
    {
        try
        {
            //토탈 버퍼에 현재 받은 데이터 담기
            Array.Copy(_Recv_Buffer, 0, Total_Recv_Buffer, Total_Buffer_Max_Index, _Recv_Buffer_Size);
            Total_Buffer_Max_Index += _Recv_Buffer_Size;
            ByteData _Buffer_Data = new ByteData(Total_Recv_Buffer);

            while (true)
            {
                //헤더검사를 할수 있을만큼 남았는지 체크
                if (Total_Buffer_Max_Index <= (_Buffer_Data.DataIndex + 4))
                {
                    break;
                }

                //헤더 문자열 일치 체크
                if (_Buffer_Data.Getbyte() != HeaderData[0])
                {
                    continue;
                }
                if (_Buffer_Data.Getbyte() != HeaderData[1])
                {
                    _Buffer_Data.DataIndex--; continue;
                }

                //헤더 길이 만큼 전체 데이터 받았는지 체크
                short _Data_Length = _Buffer_Data.Getshort();

                if (Total_Buffer_Max_Index < _Buffer_Data.DataIndex + _Data_Length)
                {
                    _Buffer_Data.DataIndex -= 4;
                    break;
                }

                //길이 읽은거 다시 감소
                _Buffer_Data.DataIndex -= 2;

                Receive_Delegate(_Buffer_Data.GetBytes());
            }

            //처리한 버퍼 지우고 뒤에 남은 버퍼 앞으로 땡기자
            Total_Buffer_Max_Index -= _Buffer_Data.DataIndex;

            byte[] Temp_Array = new byte[Total_Buffer_Max_Index];
            Array.Copy(Total_Recv_Buffer, _Buffer_Data.DataIndex, Temp_Array, 0, Temp_Array.Length);
            Array.Copy(Temp_Array, 0, Total_Recv_Buffer, 0, Temp_Array.Length);
        }
        catch (Exception ex)
        {
            Error_DisConnect(ex);
        }
    }