示例#1
0
        private void ProvideNames(NameRequestMessage message)
        {
            var names = new List <Name>
            {
                bob,
                jane,
                fred,
                sandra
            };

            var provisioningResultMessage = new ProvisioningResultMessage <IEnumerable <Name> >(names.ToImmutableArray());

            Sender.Tell(provisioningResultMessage);
        }
示例#2
0
        /// <summary>
        /// Receive message in loop and prepare answer
        /// </summary>
        /// <param name="client"></param>
        static private void TalkToClient(TcpClient client)
        {
            while (true)
            {
                //if client has disconnected, remove him from the list
                if (!client.Connected)
                {
                    if (users.Keys.Contains(client))
                    {
                        Broadcast(new TextMessage(DateTime.Now, "Server", String.Format("User {0} disconnected", users[client])));
                        users.Remove(client);
                        Log(String.Format("User {0} disconnected", users[client]));
                    }
                    else
                    {
                        Log("Couldn't register user");
                    }
                    break;
                }
                Message receivedMessage = TCPHelper.ReceiveMessage(client);

                switch (receivedMessage.MessageHeader)
                {
                case Header.NameRequest:
                    //In case of name request, check is such name is taken, if so, reject this name
                    NameRequestMessage requestMessage = receivedMessage as NameRequestMessage;
                    if (users.Values.Contains(requestMessage.NameToRequest))
                    {
                        TCPHelper.SendMessage(new Message(Header.NameRejected, DateTime.Now, "Server"), client);
                        Log(String.Format("Username {0} taken", requestMessage.NameToRequest));
                        client.Close();
                    }
                    else
                    {
                        //If we already have a connected user with a name, change his name to a new one and send accept message. Also, tell every user about the name change
                        if (users.Keys.Contains(client))
                        {
                            string previousName = users[client];
                            users[client] = requestMessage.NameToRequest;
                            TCPHelper.SendMessage(new Message(Header.NameAccepted, DateTime.Now, "Server"), client);
                            Broadcast(new TextMessage(DateTime.Now, "Server", String.Format("User {0} is now {1}", previousName, users[client])));
                            Log(String.Format("User {0} is now {1}", previousName, users[client]));
                        }
                        //If this is a new user, add him to our user list, send him accept message, and also notify everyone about new user
                        else
                        {
                            users.Add(client, requestMessage.NameToRequest);
                            TCPHelper.SendMessage(new Message(Header.NameAccepted, DateTime.Now, "Server"), client);
                            Broadcast(new TextMessage(DateTime.Now, "Server", String.Format("User {0} has joined the chat", requestMessage.NameToRequest)));
                            Log(String.Format("User {0} has joined the chat", users[client]));
                        }
                    }
                    break;

                //If we get a textmessage, send it to everyone
                case Header.TextMessage:
                    TextMessage textMessage = receivedMessage as TextMessage;
                    if (users.Keys.Contains(client))
                    {
                        Broadcast(new TextMessage(DateTime.Now, users[client], textMessage.Text));
                        Log(new TextMessage(DateTime.Now, users[client], textMessage.Text).ToString());
                    }
                    else
                    {
                        Log("Uknown message: " + receivedMessage.ToString());
                        client.Close();
                    }
                    break;

                //If we get an image, send it to everyone
                case Header.ImageMessage:
                    ImageMessage imageMessage = receivedMessage as ImageMessage;
                    if (users.Keys.Contains(client))
                    {
                        Broadcast(new ImageMessage(DateTime.Now, users[client], imageMessage.Image));
                        Log(new TextMessage(DateTime.Now, users[client], "Image sent").ToString());
                    }
                    else
                    {
                        Log("Uknown message: " + receivedMessage.ToString());
                        client.Close();
                    }
                    break;

                default:
                    Log("Uknown message: " + receivedMessage.ToString());
                    client.Close();
                    break;
                }
            }
        }