本文整理汇总了C#中SendingQueue.StopEnqueue方法的典型用法代码示例。如果您正苦于以下问题:C# SendingQueue.StopEnqueue方法的具体用法?C# SendingQueue.StopEnqueue怎么用?C# SendingQueue.StopEnqueue使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SendingQueue
的用法示例。
在下文中一共展示了SendingQueue.StopEnqueue方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: StartSend
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 = m_SendingQueuePool.Get();
var oldQueue = Interlocked.CompareExchange(ref m_SendingQueue, newQueue, queue);
if (!ReferenceEquals(oldQueue, queue))
{
if (newQueue != null)
m_SendingQueuePool.Return(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.Return(queue);
OnSendEnd(false);
this.Close(CloseReason.InternalError);
return;
}
Send(queue);
}
示例2: StartSend
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
RemoveStateFlag(SocketState.InSending);
return;
}
}
if (IsInClosingOrClosed)
{
RemoveStateFlag(SocketState.InSending);
return;
}
SendingQueue newQueue;
if (!m_SendingQueuePool.TryGet(out newQueue))
{
AppSession.Logger.Error("There is no enougth sending queue can be used.");
RemoveStateFlag(SocketState.InSending);
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);
RemoveStateFlag(SocketState.InSending);
if (!IsInClosingOrClosed)
{
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);
RemoveStateFlag(SocketState.InSending);
this.Close(CloseReason.InternalError);
return;
}
Send(queue);
}