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);
                }
            }