private void handleClientIDSet(short clientID) { //Send messages to server while (clientMessageQueue.Count > 0) { QueuedMessage queuedMessage = clientMessageQueue.Dequeue(); //Get next message sendMessageToServer(queuedMessage.msg, queuedMessage.guaranteeDelivery); } }
/// <summary> /// Sends all messages in messageQueue to the server. /// </summary> private void sendQueuedMessages() { int queuedMessages = messageQueue.Count; //Number of messages queued when this method was called /* Using queuedMessages instead of messageQueue.Count to avoid an infinite loop caused by messages * being requeued once the reliable message limit is reached */ for (int i = 0; i < queuedMessages; i++) { QueuedMessage queuedMsg = messageQueue.Dequeue(); sendMessageToServer(queuedMsg.msg, queuedMsg.guaranteeDelivery); } }
/// <summary> /// Sends queued messages to the desired client(s). /// </summary> private void sendQueuedMessages() { #region Messages to All Connected Clients int queuedMessages = messageQueue.Count; //Number of messages queued when this method was called /* Using queuedMessages instead of messageQueue.Count to avoid an infinite loop caused by messages * being requeued once the reliable message limit is reached */ for (int i = 0; i < queuedMessages; i++) { QueuedMessage queuedMsg = messageQueue.Dequeue(); sendMessageToClients(connectedClients, queuedMsg.msg, queuedMsg.guaranteeDelivery); } #endregion Messages to All Connected Clients #region Messages to Individual Clients //Send any client specific queued messages (messages only going to one client) foreach (KeyValuePair <short, Queue <QueuedMessage> > client in clientMessageQueues) { short clientID = client.Key; //Connection found and active if (connectedClients.ContainsKey(clientID) && connectedClients[clientID].IsCreated) { if (clientMessageQueues.ContainsKey(clientID)) //Message queue has been created for connection { int queuedClientMessages = clientMessageQueues[clientID].Count; //Number of messages queued when this method was called /* Using queuedMessages instead of messageQueue.Count to avoid an infinite loop caused by messages * being requeued once the reliable message limit is reached */ for (int i = 0; i < queuedMessages; i++) { QueuedMessage queuedMsg = clientMessageQueues[clientID].Dequeue(); sendMessageToClient(connectedClients[clientID], clientID, queuedMsg.msg, queuedMsg.guaranteeDelivery); } } } } #endregion Messages to Individual Clients }