public virtual void Initialize(IAppSession appSession) { AppSession = appSession; Config = appSession.Config; SyncSend = Config.SyncSend; if (m_SendingQueuePool == null) { m_SendingQueuePool = ((SocketServerBase)((ISocketServerAccessor)appSession.AppServer).SocketServer).SendingQueuePool; } SendingQueue queue; if (m_SendingQueuePool.TryGet(out queue)) { m_SendingQueue = queue; queue.StartEnqueue(); } if (Config.CollectSendIntervalMillSec > 0) { CollectSendBuffer = new ReuseLockBaseBuffer(Config.ReceiveBufferSize); SyncSend = true; } }
public void Initialize(IAppSession appSession) { this.AppSession = appSession as AppSession; SendingQueue queue; if (m_SendingQueuePool.TryGet(out queue)) { m_SendingQueue = queue; queue.StartEnqueue(); } SocketAsyncProxy.Initialize(this); //Initialize SocketAsyncEventArgs for sending m_SocketEventArgSend = new SocketAsyncEventArgs(); m_SocketEventArgSend.Completed += new EventHandler <SocketAsyncEventArgs>(OnSendingCompleted); }
public virtual void Initialize(IAppSession appSession) { AppSession = appSession; Config = appSession.Config; SyncSend = Config.SyncSend; if (m_SendingQueuePool == null) { m_SendingQueuePool = ((SocketServerBase)((ISocketServerAccessor)appSession.AppServer).SocketServer).SendingQueuePool; } SendingQueue queue; if (m_SendingQueuePool.TryGet(out queue)) { m_SendingQueue = queue; queue.StartEnqueue(); } }
private void StartSend(SendingQueue queue, int sendingTrackID, bool initial) { if (initial) { if (!TryAddStateFlag(SocketState.InSending)) { return; } var currentQueue = m_SendingQueue; if (currentQueue != queue || sendingTrackID != currentQueue.TrackID) { //Has been sent OnSendEnd(); return; } } Socket client; if (IsInClosingOrClosed && TryValidateClosedBySocket(out client)) { OnSendEnd(true); return; } SendingQueue newQueue; if (!m_SendingQueuePool.TryGet(out newQueue)) { AppSession.Logger.Error("There is no enougth sending queue can be used."); OnSendEnd(false); this.Close(CloseReason.InternalError); return; } var oldQueue = Interlocked.CompareExchange(ref m_SendingQueue, newQueue, queue); if (!ReferenceEquals(oldQueue, queue)) { if (newQueue != null) { m_SendingQueuePool.Push(newQueue); } if (IsInClosingOrClosed) { OnSendEnd(true); } else { OnSendEnd(false); AppSession.Logger.Error("Failed to switch the sending queue."); this.Close(CloseReason.InternalError); } return; } //Start to allow enqueue newQueue.StartEnqueue(); queue.StopEnqueue(); if (queue.Count == 0) { AppSession.Logger.Error("There is no data to be sent in the queue."); m_SendingQueuePool.Push(queue); OnSendEnd(false); this.Close(CloseReason.InternalError); return; } Send(queue); }
public virtual void Initialize(IAppSession appSession) { AppSession = appSession; Config = appSession.Config; SyncSend = Config.SyncSend; m_SendingQueuePool = ((SocketServerBase)((ISocketServerAccessor)appSession.AppServer).SocketServer).SendingQueuePool; SendingQueue queue; if (m_SendingQueuePool.TryGet(out queue)) { m_SendingQueue = queue; queue.StartEnqueue(); } }