Exemplo n.º 1
0
        private void ParticipateChanged(object Sender, SocketEventArgs E)
        {
            string Data = Encoding.UTF8.GetString(E.Data);

            string[] Fragments = Data.Split(new[] { "|*|" },
                                            StringSplitOptions.RemoveEmptyEntries);
            if (Fragments[0] != "ParticipateChanged")
            {
                return;
            }

            switch (Fragments[1])
            {
            case "Add":
                CurrentRoom.AddParticipate(Guid.Parse(Fragments[2]),
                                           Fragments[3], int.Parse(Fragments[4]));
                this.Dispatcher.Invoke(() =>
                {
                    ChatWindow.SendMessage("玩家角色:" + CurrentRoom.GetPlayer(Guid.Parse(Fragments[2]))
                                           + "已加入队伍:" + Fragments[3] + "的" + (int.Parse(Fragments[4]) + 1) + "号位。");
                    GroupStack.Children.OfType <Components.GroupItem>().First(O => O.Group.Name == Fragments[3])
                    .ParticipantStack.Children.OfType <ParticipantItem>()
                    .First(O => O.GroupIndex == int.Parse(Fragments[4]))
                    .Join(CurrentRoom.GetPlayer(Guid.Parse(Fragments[2])), false);
                });
                break;

            case "Remove":
                CurrentRoom.RemoveParticipate(Guid.Parse(Fragments[2]));
                this.Dispatcher.Invoke(() =>
                {
                    ChatWindow.SendMessage("玩家角色:" + CurrentRoom.GetPlayer(Guid.Parse(Fragments[2]))
                                           + "已退出队伍:" + Fragments[3] + "的" + (int.Parse(Fragments[4]) + 1) + "号位。");
                    GroupStack.Children.OfType <Components.GroupItem>().First(O => O.Group.Name == Fragments[3])
                    .ParticipantStack.Children.OfType <ParticipantItem>()
                    .First(O => O.GroupIndex == int.Parse(Fragments[4]))
                    .Join(null, false);
                });
                break;
            }

            if (CurrentRoom.IsHost(App.CurrentUser))
            {
                var From = E.Socket["User"] as User;
                foreach (var Client in App.Server
                         .Where(Client => !From.Equals(Client["User"])))
                {
                    Client.SendAsync(E.Data);
                }
            }
        }