private void OnClientConnected(object sender, Utility.EventArg <EndPoint> e) { lock (Lock) { LogInfo($"{nameof(OnClientConnected)} {e.Value}"); var player = new PlayerData { Name = nameGen.Next(), IsReady = false, Room = LobbyRoomName, Role = 0 // Lobby dose not care about player's role }; var res = players.TryAdd(e.Value, player); Debug.Assert(res); FrontendServer.InvokeTo(e.Value).OnConnected(player.Name, player.Room); ForOthers(e.Value, (p) => { // Tell new player other players' info FrontendServer.InvokeTo(e.Value).OnPlayerJoined(p.Value.Name, p.Value.Room, p.Value.Role); // Tell other player new player's info FrontendServer.InvokeTo(p.Key).OnPlayerJoined(player.Name, LobbyRoomName, player.Role); }); } }
private void OnClientSendFailed(object sender, Utility.EventArg <EndPoint> e) { lock (Lock) { players.Remove(e.Value); LogInfo($"{nameof(OnClientSendFailed)} {e.Value}"); } }
private void OnClientDisconnected(object sender, Utility.EventArg <EndPoint> e) { lock (Lock) { LogInfo($"{nameof(OnClientDisconnected)} {e.Value}"); if (!players.ContainsKey(e.Value)) { return; } var player = players[e.Value]; ForOthers(e.Value, (p) => { FrontendServer.InvokeTo(p.Key).OnPlayerLeaved(player.Name); }); players.Remove(e.Value); } }