internal void LogClientDisconnectionFromPublication(DPE_DataPublicationsClient stxdssClient, string PublicationName) { try { this.UnLogClientForPublicationDataReception(stxdssClient, PublicationName); int connectedClients = this.GetConnectedClientsToPublicationCount(PublicationName); if (connectedClients <= 0) { //removes all the handles to receive data for this publication because nobody will be use it //removes the multicast clientss if exists MultiCastDataReplicatorClient publicationMultiCastClient = default(MultiCastDataReplicatorClient); publicationMultiCastClient = (MultiCastDataReplicatorClient)this._MultiCastDataReplicatorClientsTable[PublicationName]; if (!(publicationMultiCastClient == null)) { publicationMultiCastClient.Dispose(); } this._MultiCastDataReplicatorKeyStringsTable.Remove(PublicationName); this._MultiCastDataReplicatorClientsTable.Remove(PublicationName); SocketsServer listener = default(SocketsServer); listener = (SocketsServer)this._SocketServersListenersTable[PublicationName]; if (!(listener == null)) { listener.Dispose(); } this._SocketServersListenersTable.Remove(PublicationName); } } catch (Exception) { } }
internal MultiCastDataReplicatorClient GetPublicationMultiCastDataReplicatorClient(DPE_DataPublicationsClient stxdssClient, string PublicationName, string publicationMultiCastIPAddress, int publicationMultiCastPort) { string requestedMulticastKey = publicationMultiCastIPAddress + System.Convert.ToString(publicationMultiCastPort); if (this._MultiCastDataReplicatorClientsTable.ContainsKey(PublicationName)) { //gets the current multicast client MultiCastDataReplicatorClient currentMultiCastClient = default(MultiCastDataReplicatorClient); currentMultiCastClient = (MultiCastDataReplicatorClient)this._MultiCastDataReplicatorClientsTable[PublicationName]; //gets the current key to verify if the address corresponds to the multicast address and port string currentMulticastKey = ""; currentMulticastKey = System.Convert.ToString(this._MultiCastDataReplicatorKeyStringsTable[PublicationName]); if (!(currentMulticastKey == null)) { if (requestedMulticastKey != currentMulticastKey) { //removes the old key and the old client to create a new one currentMultiCastClient.Dispose(); this._MultiCastDataReplicatorKeyStringsTable.Remove(PublicationName); this._MultiCastDataReplicatorClientsTable.Remove(PublicationName); return(this.GetPublicationMultiCastDataReplicatorClient(stxdssClient, PublicationName, publicationMultiCastIPAddress, publicationMultiCastPort)); } else { this.LogClientForPublicationDataReception(stxdssClient, PublicationName); return(currentMultiCastClient); } } else { currentMultiCastClient.Dispose(); this._MultiCastDataReplicatorKeyStringsTable.Remove(PublicationName); this._MultiCastDataReplicatorClientsTable.Remove(PublicationName); return(this.GetPublicationMultiCastDataReplicatorClient(stxdssClient, PublicationName, publicationMultiCastIPAddress, publicationMultiCastPort)); } } else { MultiCastDataReplicatorClient client = default(MultiCastDataReplicatorClient); client = new MultiCastDataReplicatorClient(publicationMultiCastIPAddress, publicationMultiCastPort); client.Connect(); this._MultiCastDataReplicatorClientsTable.Add(PublicationName, client); this._MultiCastDataReplicatorKeyStringsTable.Add(PublicationName, requestedMulticastKey); this.LogClientForPublicationDataReception(stxdssClient, PublicationName); return(client); } }