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