コード例 #1
0
ファイル: TcpChannel.cs プロジェクト: seedyan/MotionFramework
        private void SendInternal()
        {
            // 清空缓存
            _sendBuffer.Clear();

            // 合并数据一起发送
            while (_sendQueue.Count > 0)
            {
                // 如果不够写入一个最大的消息包
                if (_sendBuffer.WriteableBytes < _packageMaxSize)
                {
                    break;
                }

                // 数据压码
                System.Object packet = _sendQueue.Dequeue();
                _packageCoder.Encode(_sendBuffer, packet);
            }

            // 请求操作
            _sendArgs.SetBuffer(0, _sendBuffer.ReadableBytes);
            bool willRaiseEvent = _socket.SendAsync(_sendArgs);

            if (!willRaiseEvent)
            {
                ProcessSend(_sendArgs);
            }
        }
コード例 #2
0
ファイル: TcpChannel.cs プロジェクト: mrcece/MotionFramework
        private void UpdateSending()
        {
            if (_isSending == false && _sendQueue.Count > 0)
            {
                _isSending = true;

                // 清空缓存
                _sendBuffer.Clear();

                // 合并数据一起发送
                while (_sendQueue.Count > 0)
                {
                    // 如果不够写入一个最大的消息包
                    if (_sendBuffer.WriteableBytes < _packageMaxSize)
                    {
                        break;
                    }

                    // 数据压码
                    INetworkPackage package = _sendQueue.Dequeue();
                    _packageCoder.Encode(_sendBuffer, package);
                }

                // 请求操作
                _sendArgs.SetBuffer(0, _sendBuffer.ReadableBytes);
                bool willRaiseEvent = _socket.SendAsync(_sendArgs);
                if (!willRaiseEvent)
                {
                    ProcessSend(_sendArgs);
                }
            }
        }
コード例 #3
0
        /// <summary>
        /// 主线程内更新
        /// </summary>
        public void Update()
        {
            if (IOSocket == null || IOSocket.Connected == false)
            {
                return;
            }

            // 接收数据
            if (_isReceiving == false)
            {
                _isReceiving = true;

                // 清空缓存
                _packageCoder.ClearReceiveBuffer();

                // 请求操作
                _receiveArgs.SetBuffer(0, _packageCoder.GetReceiveBufferCapacity());
                bool willRaiseEvent = IOSocket.ReceiveAsync(_receiveArgs);
                if (!willRaiseEvent)
                {
                    ProcessReceive(_receiveArgs);
                }
            }

            // 发送数据
            if (_isSending == false && _sendQueue.Count > 0)
            {
                _isSending = true;

                // 清空缓存
                _packageCoder.ClearSendBuffer();

                // 合并数据一起发送
                while (_sendQueue.Count > 0)
                {
                    // 数据压码
                    System.Object packet = _sendQueue.Dequeue();
                    _packageCoder.Encode(packet);

                    // 如果已经超过一个最大包体尺寸
                    // 注意:发送的数据理论最大值为俩个最大包体大小
                    if (_packageCoder.GetSendBufferWriterIndex() >= _packageMaxSize)
                    {
                        break;
                    }
                }

                // 请求操作
                _sendArgs.SetBuffer(0, _packageCoder.GetSendBufferReadableBytes());
                bool willRaiseEvent = IOSocket.SendAsync(_sendArgs);
                if (!willRaiseEvent)
                {
                    ProcessSend(_sendArgs);
                }
            }
        }