private void Receivecallback(IAsyncResult ar)
        {
            try
            {
                int receivedByte = _client.EndReceive(ar);
                if (receivedByte == 0)
                {
                    AsyncOnMessageRecived?.Invoke("Error Handled, Client force disconnected");
                    Dispose();
                }

                if (!_headerParsed)
                {
                    _parseResult = PacketParser.HeaderParse(_buffer, (uint)receivedByte);

                    if (_parseResult.HeaderParsed == false)
                    {
                        Process(PacketParser.HeaderSize - receivedByte);
                    }
                    else if (_parseResult.ContentLength == _parseResult.ReceivedContentLength)
                    {
                        byte[] bufferClone = new byte[_buffer.Length];
                        Buffer.BlockCopy(_buffer, 0, bufferClone, 0, PacketParser.HeaderSize + _parseResult.ContentLength);

                        _headerParsed = false;
                        AsyncOnClientDataRecived?.Invoke(this, bufferClone, _parseResult);
                        Process(PacketParser.HeaderSize);
                    }
                    else
                    {
                        _leftContentByte = _parseResult.ContentLength - _parseResult.ReceivedContentLength;
                        _contentOffSet   = PacketParser.HeaderSize + _parseResult.ReceivedContentLength;

                        _contentFullBuffer = new byte[PacketParser.HeaderSize + _parseResult.ContentLength];
                        Buffer.BlockCopy(_buffer, 0, _contentFullBuffer, 0, receivedByte);

                        _headerParsed = true;
                        Process(_leftContentByte);
                    }
                }
                else
                {
                    Buffer.BlockCopy(_buffer, 0, _contentFullBuffer, _contentOffSet, receivedByte);

                    _leftContentByte -= receivedByte;
                    _contentOffSet   += receivedByte;

                    if (_leftContentByte <= 0)
                    {
                        byte[] bufferClone = new byte[_contentFullBuffer.Length];
                        Buffer.BlockCopy(_contentFullBuffer, 0, bufferClone, 0, PacketParser.HeaderSize + _parseResult.ContentLength);

                        _headerParsed = false;
                        AsyncOnClientDataRecived?.Invoke(this, bufferClone, _parseResult);
                        Process(PacketParser.HeaderSize);
                    }
                    else
                    {
                        Process(_leftContentByte);
                    }
                }
            }
            catch (SocketException e)
            {
                AsyncOnErrMessageRecived?.Invoke(e.Message);
                AsyncOnMessageRecived?.Invoke("Error Handled, Client force disconnected");
                Dispose();
            }
            catch (ObjectDisposedException e)
            {
                AsyncOnErrMessageRecived?.Invoke(e.Message);
                AsyncOnMessageRecived?.Invoke("Error Handled, Client force disconnected");
                Dispose();
            }
        }