private void bgwReceive_ProgressChanged(object sender, ProgressChangedEventArgs e) { if (e.ProgressPercentage == 1) { SystemMessage message = e.UserState as SystemMessage; switch (message.Header.CommandID) { case MessageHeader.QM_UserList_Resp: // 收到的消息是 当前用户列表. UserListRespond userListRespond = message.Body as UserListRespond; if (String.Join(",", this.UserList) != String.Join(",", userListRespond.UserList)) { this.UserList = userListRespond.UserList; this.lstUserList.DataSource = this.UserList; } break; case MessageHeader.QM_Ask_Resp: // 收到的是 请求通话应答. AskRespond askRespond = message.Body as AskRespond; if (askRespond.Status == 1) { IPEndPoint userPoint = new IPEndPoint(IPAddress.Parse(askRespond.IpAddress), askRespond.Port); if (!this.userDictionary.ContainsKey(askRespond.UserName)) { this.userDictionary.Add(askRespond.UserName, userPoint); } else { // 刷新. this.userDictionary[askRespond.UserName] = userPoint; } this.SendMessageStep2(userPoint, this.txtMessage.Text); } break; case MessageHeader.QM_Talk_Req: // 收到的是 消息. TalkRequest talkRequest = message.Body as TalkRequest; string info = string.Format("{0} : {1} \r\n", talkRequest.FromUser, talkRequest.TalkMessage); this.txtTalkResult.AppendText(info); break; } } // 简单输出. ShowMessage(e.UserState.ToString()); }
/// <summary> /// 通话请求. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected override void Func2(object sender, EventArgs e) { FormSelectUser subForm = new FormSelectUser(); subForm.UserList = this.userList; DialogResult diaResult = subForm.ShowDialog(); if (diaResult == System.Windows.Forms.DialogResult.Cancel) { return; } // 已选择的用户. string selectUser = subForm.SelectUser; SystemMessage message = new SystemMessage() { Header = new MessageHeader() { CommandID = MessageHeader.QM_Ask_Req, SequenceNo = this.sequence++, }, Body = new AskRequest() { UserToken = userToken, AskUserName = selectUser, }, }; // 发送登录消息. messageSender.SendMessage(message); ShowMessage("发送:" + message.ToString()); // 接收反馈. SystemMessage resultMessage = messageReceiver.ReceiveMessage(); ShowMessage("接收:" + resultMessage.ToString()); AskRespond resultBody = resultMessage.Body as AskRespond; if (resultBody.Status > 0) { this.toUserIp = resultBody.IpAddress; this.toUserPort = resultBody.Port; } }