Пример #1
0
        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);
            });
        }
Пример #2
0
        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;
            }
        }