public Menu(PPDDevice device) : base(device) { AddProcessor <AddUserNetworkData>(networkData => { AddUser(networkData); }); AddProcessor <DeleteUserNetworkData>(networkData => { var user = FindUser(networkData.Id); DeleteUser(user); }); AddProcessor <AddMessageNetworkData>(networkData => { var user = FindUser(networkData.Id); if (user != null) { NotifyMessageArrive(); chatComponent.AddMessage(networkData.Message, user); } }); AddProcessor <AddPrivateMessageNetworkData>(networkData => { var user = FindUser(networkData.Id); if (user != null) { NotifyMessageArrive(); chatComponent.AddMessage(networkData.Message, user, true); } }); AddProcessor <ChangeUserStateNetworkData>(networkData => { var user = FindUser(networkData.Id); if (user != null) { user.CurrentState = networkData.State; } }); AddProcessor <GoToPlayNetworkData>(networkData => { lock (this) { clientHandledData.Clear(); } GoToPlay((GoToPlayNetworkData)networkData); }); AddProcessor <SendServerInfoNetworkData>(networkData => { selfUser.ID = networkData.Id; allowedModList.AllowedModIds = networkData.AllowedModIds; SendScoreList(); }); AddProcessor <ChangeSongNetworkData>(networkData => { foreach (User user in userList) { user.HasSong = false; } currentSelectSong = new SongInfoEx { Hash = networkData.Hash, Difficulty = networkData.Difficulty }; if (currentSelectSong.SongInformation != null) { var result = currentSelectSong.SongInformation.CalculateDifficulty(currentSelectSong.Difficulty); chatComponent.AddSystemMessage(String.Format(Utility.Language["ScoreChanged"], currentSelectSong.SongInformation.DirectoryName, networkData.Difficulty, String.Format("{0:F2}({1:F2})", result.Average, result.Peak))); } else { ppdScoreInfo = PPDScoreManager.Manager.GetScoreByHash(networkData.Hash); if (ppdScoreInfo == null) { chatComponent.AddSystemMessage(String.Format(Utility.Language["ScoreChanged"], "Unknown Score", networkData.Difficulty, 0)); } else { chatComponent.AddSystemMessage(String.Format(Utility.Language["ScoreChanged"], ppdScoreInfo.Title, networkData.Difficulty, 0)); chatComponent.AddSystemMessage(Utility.Language["ThisIsRegisteredScore"]); } } FindSongData(); }); AddProcessor <ChangeGameRuleNetworkData>(networkData => { ChangeGameRule(networkData.GameRule); }); AddProcessor <CloseConnectNetworkData>(networkData => { chatComponent.AddSystemMessage(String.Format(Utility.Language["Disconnected"], Utility.Language[((CloseConnectNetworkData)networkData).Reason.ToString()])); client.Close(); ClearUser(); }); AddProcessor <HasSongNetworkData>(networkData => { var user = FindUser(networkData.Id); if (user != null) { user.HasSong = true; } }); AddProcessor <ChangeLeaderNetworkData>(networkData => { var last = selfUser.IsLeader; foreach (var user in userList) { user.IsLeader = networkData.UserId == user.ID; } if (last != selfUser.IsLeader) { if (selfUser.IsLeader) { chatComponent.AddSystemMessage(Utility.Language["BecameLeader"]); } else { chatComponent.AddSystemMessage(Utility.Language["BecameNotLeader"]); } } }); AddProcessor <PingUserNetworkData>(networkData => { var user = FindUser(networkData.Id); if (user != null) { user.Ping = networkData.Ping; } }); AddProcessor <GoToPlayPrepareNetworkData>(networkData => { waitingGoToPlay = true; fadeOutCalled = false; goToPlayPrepareTime = DateTime.Now; chatComponent.AddSystemMessage(Utility.Language["StartsAfterFiveMinutes"]); }); AddProcessor <ForceStartNetworkData>(networkData => { chatComponent.AddSystemMessage(Utility.Language["ChangedForceStartMode"]); }); AddProcessor <SendScoreListNetworkData>(networkData => { leftMenu.CommonSongs = networkData.SongInfos; }); AddProcessor <KickUserNetworkData>(networkData => { var user = FindUser(networkData.UserId); KickUser(user); }); }
private void ProcessCommand(string text) { var splits = text.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); var command = splits[0].Substring(1); string[] args = new string[splits.Length - 1]; Array.Copy(splits, 1, args, 0, args.Length); switch (command) { case "open": if (args.Length > 0 && args[0] == "score") { if (ppdScoreInfo == null && currentSelectSong != null) { ppdScoreInfo = PPDScoreManager.Manager.GetScoreByHash(currentSelectSong.Hash); } if (ppdScoreInfo != null) { try { ThreadManager.Instance.GetThread(() => { System.Diagnostics.Process.Start(ppdScoreInfo.CreateUrl()); }).Start(); } catch { } } } break; case "force": if (args.Length > 0 && args[0] == "start") { client.Write(MessagePackSerializer.Serialize(new ForceStartNetworkData())); } break; case "kick": if (args.Length > 0) { var user = userList.Find(u => u.AccountId == args[0]); if (user != null && selfUser.IsLeader) { client.Write(MessagePackSerializer.Serialize(new KickUserNetworkData { UserId = user.ID })); } } else { chatComponent.AddSystemMessage(Utility.Language["KickCommandUsage"]); } break; case "users": var users = String.Join(", ", userList.Select(s => String.Format("@{0}", s.AccountId)).ToArray()); chatComponent.AddSystemMessage(users); break; case "user": if (args.Length > 0) { var user = userList.Find(u => u.Name == args[0]); if (user != null) { chatComponent.AddSystemMessage(String.Format("{0} (ID: {1})", user.Name, user.AccountId)); } } else { chatComponent.AddSystemMessage(Utility.Language["UserCommandUsage"]); } break; default: if (command.Length > 0) { chatComponent.AddSystemMessage(Utility.Language["NotExistCommand"]); } var commands = new List <string> { ":open score" }; if (selfUser.IsLeader) { commands.Add(":force start"); } commands.Add(":kick"); commands.Add(":users"); commands.Add(":user"); chatComponent.AddSystemMessage(String.Format(Utility.Language["AvailableCommands"], String.Join(", ", commands.ToArray()))); break; } }