/// <summary> /// 收到服务器响应消息 /// </summary> /// <param name="result"></param> public void ReponseToSouceClient(Result result) { try { ///响应添加好友消息 if (result.Type == MessageType.AddFriend) { if (result.Status == MessageStatus.Accept) { MessageBox.Show("您已经与" + result.Member.nickName + "成为好友"); MyTabItem tabItem = DataUtil.FriendTabItems[result.UserGroup.userGroupId]; result.Member.status = MemberStatus.Online; tabItem.myGrid.AddButton(MyType.User, result.Member); MyMessageTabItem item = new MyMessageTabItem(MyType.User, result.Member); DataUtil.FriendMessageTabItems.Add(result.Member.id, item); DataUtil.MessageTabControl.Items.Add(item); } else { MessageBox.Show(result.Mesg); } } ///响应发送文件请求消息 else if (result.Type == MessageType.File) { if (DataUtil.HasTransfer()) { if (DataUtil.Transfer.transferTask.ContainsKey(result.Guid)) { if (result.Status == MessageStatus.Accept) { DataUtil.Transfer.transferTask[result.Guid].BeginSendFile(result.EndPoint); } else { DataUtil.Transfer.transferTask[result.Guid].TheOtherCancel(true); } } } } ///响应语音请求消息 else if (result.Type == MessageType.Audio) { if (result.Status == MessageStatus.Accept) { DataUtil.AudioForms[result.Member.id].InitSend(result.EndPoint); } else if (result.Status == MessageStatus.Refuse) { DataUtil.AudioForms[result.Member.id].Close(); } } } catch (Exception ex) { MyLogger.Logger.Error("接收服务器回应消息出错", ex); } }
void Client_ResponseToAddFriendCompleted(object sender, ResponseToRequestCompletedEventArgs e) { try { if (e.Result.Status == MessageStatus.Refuse) { return; } else if (e.Result.Status == MessageStatus.Failed) { MessageBox.Show(e.Result.Mesg); return; } else if (e.Result.Status == MessageStatus.OK) { MyTabItem tabItem = DataUtil.FriendTabItems["0"]; tabItem.myGrid.AddButton(MyType.User, e.Result.Member); MyMessageTabItem item = new MyMessageTabItem(MyType.User, e.Result.Member); DataUtil.FriendMessageTabItems.Add(e.Result.Member.id, item); DataUtil.MessageTabControl.Items.Add(item); } } catch (Exception ex) { // Logger.Error("在响应添加好友时候出错"+ex.Message); } finally { DataUtil.Client.ResponseToRequestCompleted -= Client_ResponseToAddFriendCompleted; } }
/// <summary> /// 处理服务器发过来的请求 /// </summary> /// <param name="mesg"></param> public void RequestToTargetClient(Message mesg) { switch (mesg.type) { ///添加好友请求 case MessageType.AddFriend: { Member friend = mesg.from as Member; MessageStatus status = MessageStatus.Refuse; ///判断是否为好友 if (DataUtil.IsFriend(friend.id)) { this.OnLogin(friend.id); new Thread( new ThreadStart( () => { DataUtil.Client.ResponseToRequest(new Result() { Member = friend, UserGroup = mesg.to as UserGroup, Status = MessageStatus.Accept, Type = MessageType.AddFriend }); })).Start(); return; } MessageBoxResult mbr = MessageBox.Show(friend.id + friend.nickName + "请求添加好友", "请求", MessageBoxButton.YesNoCancel); if (mbr == MessageBoxResult.Yes) { status = MessageStatus.Accept; } else if (mbr == MessageBoxResult.No) { status = MessageStatus.Refuse; } else { return; } ///注册添加好友成功事件 DataUtil.Client.ResponseToRequestCompleted += Client_ResponseToAddFriendCompleted; Dispatcher.CurrentDispatcher.BeginInvoke(new Action(() => { DataUtil.Client.ResponseToRequestAsync(new Result() { Type = MessageType.AddFriend, Member = friend, UserGroup = mesg.to as UserGroup, Status = status }); })); break; } ///添加好友到群组请求 case MessageType.AddFriend2Group: { Group group = mesg.from as Group; Dispatcher.CurrentDispatcher.Invoke(new Action(() => { MyTabItem groupTabItem = DataUtil.TabControl.groupTabItem as MyTabItem; ///在界面上添加组 groupTabItem.myGrid.AddButton(MyType.Group, group); ///添加组内成员的TabItem MyTabItem tabItem = new MyTabItem(MyType.UserInGroup, group.GroupId); DataUtil.TabControl.Items.Add(tabItem); DataUtil.GroupMemberTabItems.Add(group.GroupId, tabItem); var groupMesgTabItem = new MyMessageTabItem(MyType.Group, group); DataUtil.MessageTabControl.Items.Add(groupMesgTabItem); DataUtil.GroupMessageTabItems.Add(group.GroupId, groupMesgTabItem); })); ///接收群消息 P2PClient.GetP2PClient(group.GroupId); break; } } }
public MyGrid(MyType type, string baseRoleuserGroupId = "-1") : base() { this.baseRoleId = baseRoleuserGroupId; int i = 0; Random random = new Random((int)DateTime.Now.Ticks); switch (type) { case MyType.User: { List<Member> friends = DataUtil.GetMemberList(baseRoleuserGroupId); rowCount = friends.Count / columnCount + 1; InitRowAndColumn(); for (i = 0; i < friends.Count; i++) { MyButton button = new MyButton(MyType.User, friends[i], imageSouce, baseRoleuserGroupId); Grid.SetColumn(button, i % columnCount); Grid.SetRow(button, i / columnCount); this.Children.Add(button); var tabItem = new MyMessageTabItem(MyType.User, friends[i]); DataUtil.MessageTabControl.Items.Add(tabItem); DataUtil.FriendMessageTabItems.Add(friends[i].id, tabItem); } break; } case MyType.UserGroup: { List<UserGroup> userGroups = DataUtil.UserGroups; rowCount = userGroups.Count / columnCount + 1; InitRowAndColumn(); for (i = 0; i < userGroups.Count; i++) { MyButton button = new MyButton(MyType.UserGroup, userGroups[i], null); Grid.SetColumn(button, i % columnCount); Grid.SetRow(button, i / columnCount); this.Children.Add(button); } break; } case MyType.UserInGroup: { List<Member> friends = DataUtil.GetGroupMemberList(baseRoleuserGroupId); rowCount = friends.Count / columnCount + 1; InitRowAndColumn(); for (i = 0; i < friends.Count; i++) { MyButton button = new MyButton(MyType.UserInGroup, friends[i], imageSouce, baseRoleuserGroupId); Grid.SetColumn(button, i % columnCount); Grid.SetRow(button, i / columnCount); this.Children.Add(button); //var tabItem = new MyMessageTabItem(MyType.UserInGroup, friends[i]); //DataUtil.MessageTabControl.Items.Add(tabItem); //DataUtil.MessageTabItems.Add(friends[i].id, tabItem); } break; } case MyType.Group: { List<Group> groups = DataUtil.Groups; rowCount = groups.Count / columnCount + 1; InitRowAndColumn(); for (i = 0; i < groups.Count; i++) { MyButton button = new MyButton(MyType.Group, groups[i], null); Grid.SetColumn(button, i % columnCount); Grid.SetRow(button, i / columnCount); this.Children.Add(button); var tabItem = new MyMessageTabItem(MyType.Group, groups[i]); DataUtil.MessageTabControl.Items.Add(tabItem); DataUtil.GroupMessageTabItems.Add(groups[i].GroupId, tabItem); } break; } } }
public static void SetCurrentMessageWindow(BaseRole baseRole) { if(baseRole is Member) { Member member=baseRole as Member; MessageTabControl.SelectedItem = FriendMessageTabItems[member.id]; CurrentMessageTabItem=FriendMessageTabItems[member.id]; } else if (baseRole is Group) { Group group = baseRole as Group; MessageTabControl.SelectedItem=GroupMessageTabItems[group.GroupId]; CurrentMessageTabItem = GroupMessageTabItems[group.GroupId]; } }
void Client_AddGroupCompleted(object sender, AddGroupCompletedEventArgs e) { try { ///判断是否有异常 if (e.Error != null) throw e.Error; ///判断添加分组是否成功 if (e.Result.Status == MessageStatus.Failed) { MessageBox.Show("建立群组失败"); } else { ///在界面上添加组 myGrid.AddButton(MyType.Group, e.Result.Group); TabControl tabControl = this.Parent as TabControl; ///添加组内成员的TabItem MyTabItem tabItem = new MyTabItem(MyType.UserInGroup,e.Result.Group.GroupId); tabControl.Items.Add(tabItem); DataUtil.GroupMemberTabItems.Add(e.Result.Group.GroupId, tabItem); ///添加group messageTabItem var msgTabItem = new MyMessageTabItem(MyType.Group, e.Result.Group); DataUtil.MessageTabControl.Items.Add(msgTabItem); DataUtil.GroupMessageTabItems.Add(e.Result.Group.GroupId, msgTabItem); ///群组udpclinet DataUtil.P2PClients.Add(e.Result.Group.GroupId, P2PClient.GetP2PClient(e.Result.Group.GroupId)); } } catch (Exception ex) { MessageBox.Show("网络出现异常,请检查网络连接"); return; } }