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); } } }