// 发送数据 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); } } }
static WriteBuffer AllocWriteBuffer() { WriteBuffer buff = null; if (WriteBufferPool.Count > 0) { buff = WriteBufferPool.Dequeue() as WriteBuffer; buff.Clear(); } else { buff = new WriteBuffer(true); } return(buff); }
// 创建当前消息的应答 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); }
// 在指定 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); }
// 在指定 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); }