コード例 #1
0
        private void ProcessReceive(SocketAsyncEventArgs receiveSendEventArgs)
        {
            P2PPortClientConnectionHandler clientHandler = (P2PPortClientConnectionHandler)receiveSendEventArgs.UserToken;

            if (receiveSendEventArgs.SocketError != SocketError.Success)
            {
                //---------------------------------------------------------
                // at this point the client has disconnected unexpectedly
                clientHandler.Reset();
                CloseClientSocket(receiveSendEventArgs);
                return;
            }

            if (receiveSendEventArgs.BytesTransferred == 0)
            {
                clientHandler.Reset();
                CloseClientSocket(receiveSendEventArgs);
                return;
            }

            Int32 remainingBytesToProcess = receiveSendEventArgs.BytesTransferred;

            if (clientHandler.receivedPrefixBytesDoneCount < P2PNetworkingDefinitions.DATA_SEND_RECEIVE_PREFIX_LENGHT)
            {
                remainingBytesToProcess = _prefixHandler.HandlePrefix(receiveSendEventArgs, clientHandler, remainingBytesToProcess);

                if (remainingBytesToProcess == 0)
                {
                    StartReceive(receiveSendEventArgs);
                    return;
                }
            }

            bool incomingTcpMessageIsReady;

            incomingTcpMessageIsReady = this._messageHandler.HandleData(receiveSendEventArgs, clientHandler, remainingBytesToProcess);

            if (incomingTcpMessageIsReady != true)
            {
                clientHandler.receiveMessageOffset     = clientHandler.BufferOffsetReceive;
                clientHandler.recPrefixBytesDoneThisOp = 0;
                StartReceive(receiveSendEventArgs);
            }
            else
            {
                //the data transmission is finished
                //the data is treated
                this.ProcessReceivedData(clientHandler);
                clientHandler.CreateNewDataReceivedBuffer(P2PNetworkingDefinitions.DATABUFFER_SIZE);
                clientHandler.Reset();
            }
        }
コード例 #2
0
        private void ProcessSend(SocketAsyncEventArgs receiveSendEventArgs)
        {
            P2PPortClientConnectionHandler clientHandler = (P2PPortClientConnectionHandler)receiveSendEventArgs.UserToken;

            if (receiveSendEventArgs.SocketError == SocketError.Success)
            {
                clientHandler.sendBytesRemainingCount = clientHandler.sendBytesRemainingCount - receiveSendEventArgs.BytesTransferred;

                if (clientHandler.sendBytesRemainingCount == 0)
                {
                    StartReceive(receiveSendEventArgs);
                }
                else
                {
                    clientHandler.bytesSentAlreadyCount += receiveSendEventArgs.BytesTransferred;
                    StartSend(receiveSendEventArgs);
                }
            }
            else
            {
                //If we are in this else-statement, there was a socket error.
                clientHandler.Reset();
                CloseClientSocket(receiveSendEventArgs);
            }
        }