Exemplo n.º 1
0
        /// <summary>
        /// Send message to all clients or to client with clientName
        /// </summary>
        /// <param name="message"></param>
        /// <param name="clientName">Null or name of client</param>
        private void SendMessageToClient(IMessage message, string clientName = null)
        {
            if (!ServerActive)
            {
                return;
            }

            //No Listeners
            if (MessageFromServerEvent == null)
            {
                return;
            }

            MessageEventHandler listener = null;

            Delegate[] dels = MessageFromServerEvent.GetInvocationList();

            foreach (Delegate del in dels)
            {
                IClient cli = (IClient)del.Target;
                if (clientName == null || clientName == cli.ClientName)
                {
                    try
                    {
                        Console.WriteLine("Send: " + message.GetType().Name + (clientName != null ? (" to " + clientName) : ""));
                        listener = (MessageEventHandler)del;
                        listener.Invoke(message);
                    }
                    catch
                    {
                        //Could not reach the destination, so remove it from the list
                        MessageFromServerEvent -= listener;
                        clients.Remove(cli.ClientName);
                    }
                }
            }
        }
 public void OnServerMessage(IMessage Message)
 {
     MessageFromServerEvent?.Invoke(Message);
 }