Exemplo n.º 1
0
        // 发送数据
        void SendAndSwap()
        {
            // 没数据可发送
            lock (c)
            {
                if (sb.Available == 0 || !c.Connected)
                {
                    isSending = false;
                    return;
                }

                // 交换缓冲
                WriteBuffer tmp = sendingBuffer;
                sendingBuffer = sb;
                sendingOffset = 0;
                tmp.Clear();
                sb = tmp;

                isSending = true;
                try
                {
                    c.BeginSend(sendingBuffer.Data, 0, sendingBuffer.Available, SocketFlags.None, OnSent, null);
                }
                catch (Exception ex)
                {
                    Close(ex.Message);
                }
            }
        }
Exemplo n.º 2
0
        static WriteBuffer AllocWriteBuffer()
        {
            WriteBuffer buff = null;

            if (WriteBufferPool.Count > 0)
            {
                buff = WriteBufferPool.Dequeue() as WriteBuffer;
                buff.Clear();
            }
            else
            {
                buff = new WriteBuffer(true);
            }

            return(buff);
        }
Exemplo n.º 3
0
            // 创建当前消息的应答
            public IWriteableBuffer BeginResponse(long responseID)
            {
                WriteBuffer buff = null;

                if (WriteBufferPool.Count > 0)
                {
                    buff = WriteBufferPool.Dequeue() as WriteBuffer;
                    buff.Clear();
                }
                else
                {
                    buff = new WriteBuffer(true);
                }

                buff.IsUsing = true;

                buff.Reserve(sizeof(int));
                buff.Write(responseID);

                return(buff);
            }
Exemplo n.º 4
0
            // 在指定 id 的连接上发送请求
            public IWriteableBuffer BeginRequest(string componentName, Action <IReadableBuffer> cb, Action <bool> expiredProcess)
            {
                WriteBuffer buff = null;

                if (WriteBufferPool.Count > 0)
                {
                    buff = WriteBufferPool.Dequeue() as WriteBuffer;
                    buff.Clear();
                }
                else
                {
                    buff = new WriteBuffer(true);
                }

                buff.IsUsing = true;

                buff.Reserve(sizeof(int));
                long no = p();

                buff.Write(no);
                buff.Write(componentName);

                // 记录回调处理句柄
                CallbackNode cbn = new CallbackNode();

                cbn.time       = Utils.NowSecond;
                cbn.cb         = cb;
                callbacks[-no] = cbn;

                if (expiredProcess != null)
                {
                    usrDefinedExpireProcess[-no] = expiredProcess;
                }

                return(buff);
            }
Exemplo n.º 5
0
            // 在指定 id 的连接上开始发送消息
            public IWriteableBuffer BeginSend(string componentName)
            {
                WriteBuffer buff = null;

                if (WriteBufferPool.Count > 0)
                {
                    buff = WriteBufferPool.Dequeue() as WriteBuffer;
                    buff.Clear();
                }
                else
                {
                    buff = new WriteBuffer(true);
                }

                buff.IsUsing = true;

                buff.Reserve(sizeof(int));
                long no = p();

                buff.Write(no);
                buff.Write(componentName);

                return(buff);
            }