コード例 #1
0
        private async void HandleUserMessageSendAsync(Client client, MessageData messageData)
        {
            Console.WriteLine("Handling Specific User Send.");
            // Must do the operation async because a search is done for a specific
            // client. This may take a long time if there are many clients.
            await Task.Factory.StartNew(() =>
            {
                // Do a reverse lookup for name of client to send message to
                string name    = String.Empty;
                string message = String.Empty;
                string[] parts = (messageData.message as string).Split(':');
                if (parts.Length > 1)
                {
                    name    = parts[0].Trim();
                    message = parts[1].Trim();
                }
                if (!String.IsNullOrEmpty(name))
                {
                    try
                    {
                        if (!_server.ClientHandleToUserName.ContainsValue(name))
                        {
                            string msg = String.Format("This name [{0}] is not registered", name);
                            Console.WriteLine(msg);

                            // Send back to original sender
                            MessageData send = new MessageData();
                            send.handle      = client.ClientHandle;
                            send.id          = messageData.id;
                            send.message     = msg;
                            send.name        = messageData.name;
                            send.response    = true;
                            var res          = MessageServer.SendMessageAsync(client, send);
                            if (res.Result.Failure)
                            {
                                Console.WriteLine("There is a problem sending data out to specific user.");
                            }
                        }
                        var myKey    = _server.ClientHandleToUserName.FirstOrDefault(x => x.Value == name).Key;
                        Client found = ClientStore.FindClient(myKey);
                        if (found != null)
                        {
                            MessageData sendMsg = new MessageData();
                            sendMsg.handle      = client.ClientHandle;
                            sendMsg.id          = messageData.id;
                            sendMsg.message     = String.Format("[{0}] says \'{1}\'", messageData.name, message);
                            sendMsg.name        = name;
                            sendMsg.response    = false;
                            var res             = MessageServer.SendMessageAsync(found, sendMsg);
                            if (res.Result.Failure)
                            {
                                Console.WriteLine("There is a problem sending data out to specific user.");
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Message Send Exception: " + e.Message);
                    }
                }
            });
        }