Exemplo n.º 1
0
 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}.");
             }
         }
     }
 }
Exemplo n.º 2
0
 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."));
         }
     }
 }
Exemplo n.º 3
0
 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}.");
         }
     }
 }
Exemplo n.º 4
0
        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)}.");
 }
Exemplo n.º 6
0
 public override void UpdateServer(ServerKnowledge serverKnowledge)
 {
     Console.WriteLine($"Error message from client: {Error}");
 }
Exemplo n.º 7
0
 public override void UpdateServer(ServerKnowledge serverKnowledge)
 {
     Console.WriteLine($"Unsupported message {nameof(ClientExitedMessage)}.");
 }
Exemplo n.º 8
0
 public BasicStreamManager(ServerKnowledge knowledge)
 {
     this.knowledge = knowledge;
 }
Exemplo n.º 9
0
 public abstract void UpdateServer(ServerKnowledge serverKnowledge);