public override void UpdateServer(ServerKnowledge serverKnowledge) { lock (serverKnowledge) { if (serverKnowledge.ClientToName.TryGetValue(Sender, out string currentName)) { Sender.SendMessageAsync(new ErrorMessage { Error = $"You are already registered with name \"{currentName}\"." }); } else { if (serverKnowledge.ClientToName.Values.Contains(Name)) { Sender.SendMessageAsync(new ErrorMessage { Error = $"Name \"{Name}\" is already taken." }); } else { serverKnowledge.ClientToName.Add(Sender, Name); Sender.SendMessageAsync(new ConfirmMessage()); Console.WriteLine($"New client with name {Name}."); } } } }
public override void UpdateServer(ServerKnowledge serverKnowledge) { lock (serverKnowledge) { if (!serverKnowledge.ClientToName.ContainsKey(Sender)) { Sender.SendMessageAsync(new ErrorMessage("You must register first!")); return; } if (serverKnowledge.Rooms.TryGetValue(RoomKey, out HashSet <IMessageStream> room)) { if (room.Contains(Sender)) { SenderName = serverKnowledge.ClientToName[Sender]; Console.WriteLine($"{SenderName} send: \"{Value}\" to room \"{RoomKey}\"."); foreach (var messageStream in room) { messageStream.SendMessageAsync(this); } } else { Sender.SendMessageAsync(new ErrorMessage("You must join to room first!")); } } else { Sender.SendMessageAsync(new ErrorMessage($"Room \"{RoomKey}\" does not exists.")); } } }
public override void UpdateServer(ServerKnowledge serverKnowledge) { lock (serverKnowledge) { if (!serverKnowledge.ClientToName.ContainsKey(Sender)) { Sender.SendMessageAsync(new ErrorMessage("You must register first!")); return; } var previousRoom = serverKnowledge.Rooms.FirstOrDefault(p => p.Value.Contains(Sender)); if (!serverKnowledge.Rooms.TryGetValue(RoomKey, out HashSet <IMessageStream> room)) { room = new HashSet <IMessageStream>(); serverKnowledge.Rooms.Add(RoomKey, room); } if (room.Contains(Sender)) { Sender.SendMessageAsync(new ErrorMessage($"You are already in the room \"{RoomKey}\".")); } else { string senderName = serverKnowledge.ClientToName[Sender]; if (!previousRoom.Equals(new KeyValuePair <string, HashSet <IMessageStream> >())) { foreach (var messageStream in previousRoom.Value.Where(c => c != Sender)) { messageStream.SendMessageAsync(new ClientExitedMessage { ClientName = senderName }); } previousRoom.Value.Remove(Sender); Console.WriteLine($"{senderName} left {previousRoom.Key}."); } Sender.SendMessageAsync(new RoomJoinConfirnMessage { RoomKey = RoomKey }); foreach (var messageStream in room) { messageStream.SendMessageAsync(new ClientJoinedMessage { ClientName = senderName }); } room.Add(Sender); Console.WriteLine($"{senderName} joined {RoomKey}."); } } }
static void Main(string[] args) { int port = 8500; if (args.Length > 0 && !int.TryParse(args[0], out port)) { Console.WriteLine($"Could not parse {args[0]} to int."); port = 8500; } Console.WriteLine($"Starting server on port {port}. Press Q to exit."); ServerKnowledge knowledge = new ServerKnowledge(); IStreamManager streamManager = new BasicStreamManager(knowledge); Server server = new Server(port, streamManager); server.StartListeningAsync(); while (Console.ReadKey(true).Key != ConsoleKey.Q) { //waitnig for Q } server.Stop(); }
public override void UpdateServer(ServerKnowledge serverKnowledge) { Console.WriteLine($"Unsupported message {nameof(RoomJoinConfirnMessage)}."); }
public override void UpdateServer(ServerKnowledge serverKnowledge) { Console.WriteLine($"Error message from client: {Error}"); }
public override void UpdateServer(ServerKnowledge serverKnowledge) { Console.WriteLine($"Unsupported message {nameof(ClientExitedMessage)}."); }
public BasicStreamManager(ServerKnowledge knowledge) { this.knowledge = knowledge; }
public abstract void UpdateServer(ServerKnowledge serverKnowledge);