private static void HandleTeamUpdate(NetworkMessage msg) { MsgTeamUpdate upd = msg as MsgTeamUpdate; WriteLine("Teams Were Updated "); foreach (var t in upd.TeamUpdates) { WriteLine("\t" + ((TeamColors)t.TeamID).ToString() + String.Format(" = {0} {1}/{2}", t.Size, t.Wins, t.Losses)); } }
private void HandleTeamUpdate(NetworkMessage msg) { MsgTeamUpdate upd = msg as MsgTeamUpdate; foreach (var t in upd.TeamUpdates) { if (!Teams.ContainsKey(t.TeamID)) { Teams.Add(t.TeamID, new TeamInfo(t.TeamID)); } TeamInfo team = Teams[t.TeamID]; team.PlayerCount = t.Size; team.Wins = t.Wins; team.Losses = t.Losses; } }
public static void Join(YiObj leader, YiObj joining) { if (!Teams.ContainsKey(leader.UniqueId)) { return; } (leader as Player)?.Send(MsgTeamUpdate.JoinLeave(leader, MsgTeamMemberAction.AddMember)); Teams[leader.UniqueId].Members.AddOrUpdate(joining.UniqueId, joining); Teams.AddOrUpdate(joining.UniqueId, Teams[leader.UniqueId]); foreach (var member in Teams[leader.UniqueId].Members.Values.Where(member => member.UniqueId != joining.UniqueId)) { (member as Player)?.Send(MsgTeamUpdate.JoinLeave(joining, MsgTeamMemberAction.AddMember)); (joining as Player)?.Send(MsgTeamUpdate.JoinLeave(member, MsgTeamMemberAction.AddMember)); } (joining as Player)?.Send(MsgTeamUpdate.JoinLeave(joining, MsgTeamMemberAction.AddMember)); }
protected void SendTeamUpdate(TeamInfo team) { if (team == null) { return; } MsgTeamUpdate tUpd = new MsgTeamUpdate(); MsgTeamUpdate.TeamUpdate u = new MsgTeamUpdate.TeamUpdate(); u.TeamID = team.Team; u.Size = team.Size(); u.Wins = team.Wins; u.Losses = team.Losses; tUpd.TeamUpdates.Add(u); SendToAll(tUpd, false); }
public virtual bool AddPlayer(ServerPlayer player) { player.Exited += Player_Exited; player.Disconnected += Player_Exited; ServerHost.PreAddPlayer(player); if (player.ActualTeam == TeamColors.NoTeam) { return(false); } player.Info = new PlayerInfo(); lock (PlayerList) PlayerList.Add(player); Logger.Log2("Player " + player.Callsign + " assigned to team " + player.ActualTeam.ToString()); lock (Teams) { if (!Teams.ContainsKey(player.ActualTeam)) { TeamInfo team = new TeamInfo(); team.Team = player.ActualTeam; team.PlayerAdded += Team_PlayerAdded; team.PlayerRemoved += Team_PlayerRemoved; Teams.Add(player.ActualTeam, team); } Teams[player.ActualTeam].Add(player); if (Teams[player.ActualTeam].Members.Count == 1) { TeamInited?.Invoke(this, Teams[player.ActualTeam]); } } Flags.SendInitialFlagUpdate(player); // tell them about everyone except them ServerPlayer[] locals = null; lock (PlayerList) locals = PlayerList.ToArray(); MsgPlayerInfo info = new MsgPlayerInfo(); foreach (ServerPlayer peer in locals) { if (peer == player) { continue; } player.SendMessage(true, BuildPlayerAdd(peer)); info.PlayerUpdates.Add(GetPlayerInfo(peer)); } player.SendMessage(true, info); TeamInfo[] teams = null; lock (Teams) teams = Teams.Values.ToArray(); MsgTeamUpdate tUpd = new MsgTeamUpdate(); foreach (var team in teams) { if (team.Team == player.ActualTeam) // the event already sent this { continue; } MsgTeamUpdate.TeamUpdate u = new MsgTeamUpdate.TeamUpdate(); u.TeamID = team.Team; u.Size = team.Size(); u.Wins = team.Wins; u.Losses = team.Losses; tUpd.TeamUpdates.Add(u); } player.SendMessage(tUpd); // tell everyone they joined SendToAll(BuildPlayerAdd(player), false); // send info bits to everyone info = new MsgPlayerInfo(); info.PlayerUpdates.Add(GetPlayerInfo(player)); SendToAll(info, false); ServerHost.PostAddPlayer(player); if (player.ActualTeam == TeamColors.ObserverTeam) { Chat.SendChatToUser(null, player, Resources.ObserverModeNotificatioMessage, false); } return(true); }