void helper_SendAsyncCompleteEvent(SocketCommunicator helper, SocketCommunicator.AsyncMessageSendInfo info) { AsyncMessageSendUpdateDelegate del = ClientAsyncMessageSendEvent; if (del != null) { del(this, helper as SocketCommunicatorEx, info); } }
void _server_ClientAsyncMessageSendEvent(SocketMessageServer server, SocketCommunicatorEx client, SocketCommunicator.AsyncMessageSendInfo info) { // A message has been successfully sent to client. }
void helper_DisconnectedEvent(SocketCommunicator client) { //Monitor.ReportImportant("Client [" + client.Id + "] disconnected."); ServerClientUpdateDelegate delegateInstance = ClientDisconnectedEvent; if (delegateInstance != null) { delegateInstance(this, client as SocketCommunicatorEx); } }
void helper_MessageReceivedEvent(SocketCommunicator helper, object message) { MessageUpdateDelegate del = ClientMessageReceivedEvent; if (del != null) { del(this, (SocketCommunicatorEx)helper, message); } }
void helper_ConnectedEvent(SocketCommunicator helper) { // This is never invoked, since we create the helpers directly on the connected sockets. }
void _messageClient_SendAsyncCompleteEvent(SocketCommunicator helper, SocketCommunicator.AsyncMessageSendInfo info) { // Message sent to server. MessageUpdateDelegate del = MessageUpdateEvent; if (del != null) { del(this, info.Message); } }
void _messageClient_MessageReceivedEvent(SocketCommunicator helper, object message) { if (message is EnvelopeMessage) { EnvelopeMessage envelopeMessage = (EnvelopeMessage)message; // Remove the remote message bus index association. envelopeMessage.Sender.LocalMessageBusIndex = ClientId.InvalidMessageBusClientIndex; foreach (ClientId id in envelopeMessage.Receivers) { // Decode the id. id.LocalMessageBusIndex = base.GetClientIndexByGuid(id.Guid); if (id.IsMessageBusIndexValid) { // Assign as a part of the local bus. id.MessageBus = this; if (DoSendToClient(envelopeMessage.Sender, id, envelopeMessage.Envelope, null) != SendToClientResultEnum.Success) { #if Matrix_Diagnostics InstanceMonitor.OperationError(string.Format("Failed to accept envelope message [{0}].", envelopeMessage.ToString())); #endif } } else { #if Matrix_Diagnostics InstanceMonitor.OperationError(string.Format("Failed to accept envelope message [{0}] due to unrecognized receiver id.", envelopeMessage.ToString())); #endif } } } else if (message is ClientsListMessage) {// Received client update from server. ClientsListMessage listMessage = (ClientsListMessage)message; int jef = 0; foreach(var client in listMessage.Ids) { Console.WriteLine("Incoming client id: "+client+" Source type: "+listMessage.SourcesTypes[jef]); jef++; } List<ClientId> existingIds = new List<ClientId>(); lock (_syncRoot) { existingIds.AddRange(_originalServerClientsHotSwap.Values); _originalServerClientsHotSwap.Clear(); _originalServerClientsTypesHotSwap.Clear(); _originalServerClientsSourcesTypesHotNamesSwap.Clear(); // Preprocess Ids, by assigning them new indeces and adding to the local message bus register. for (int i = 0; i < listMessage.Ids.Count; i++) { // Add an original copy to the list. _originalServerClientsHotSwap.Add(listMessage.Ids[i].Guid, listMessage.Ids[i]); _originalServerClientsTypesHotSwap.Add(listMessage.Ids[i].Guid, listMessage.Types[i]); _originalServerClientsSourcesTypesHotNamesSwap.Add(listMessage.Ids[i].Guid, listMessage.SourcesTypes[i]); // Add the client to a new spot. //_clientsHotSwap.Add(null); //int messageBusIndex = _clientsHotSwap.Count - 1; // This type of assignment will also work with multiple entries. // This performs an internal hotswap. //_guidToIndexHotSwap[id.Guid] = messageBusIndex; // Also add to this classes collection. //_localToRemoteId[messageBusIndex] = id; } } foreach (ClientId id in listMessage.Ids) { existingIds.Remove(id); RaiseClientAddedEvent(id); } // Raise for any that were removed. foreach (ClientId id in existingIds) { RaiseClientRemovedEvent(id, true); } } else if (message is RequestClientListUpdateMessage) { SendClientsUpdate(); } else if (message is ClientUpdateMessage) { ClientUpdateMessage updateMessage = (ClientUpdateMessage)message; if (_originalServerClientsHotSwap.ContainsKey(updateMessage.ClientId.Guid)) { RaiseClientUpdateEvent(updateMessage.ClientId); } else { #if Matrix_Diagnostics InstanceMonitor.OperationError(string.Format("Failed to raise update event for client [{0}], since client not found.", updateMessage.ClientId.ToString())); #endif } } else if (message is StateUpdateMessage) { RaiseCounterPartyUpdateEvent("Server", ((StateUpdateMessage)message).State.ToString()); } else { #if Matrix_Diagnostics InstanceMonitor.Warning(string.Format("Message [{0}] not recognized.", message.GetType().Name)); #endif } }
void _messageClient_DisconnectedEvent(SocketCommunicator helper) { ICollection<ClientId> ids = _originalServerClientsHotSwap.Values; _originalServerClientsHotSwap.Clear(); //lock (_syncRoot) //{ // _localToRemoteId.Clear(); //} // Removing all server clients. foreach (ClientId id in ids) { // Notify of clients removal, with non permanent remove, since they may later be restored. RaiseClientRemovedEvent(id, false); } }
void _messageClient_ConnectedEvent(SocketCommunicator helper) { // Send an update of the clients to server. if (_socketClient == helper) { SendAccessControlMessage(); SendClientsUpdate(); } }