private void OnAddListRequest(IMClientPeer peer) { var requestList = ContactAddRequestManager.GetContactAddRequestList(peer.LoginUser?.Username); var contactedList = ContactAddRequestManager.GetContactAddContactedList(peer.LoginUser?.Username); var parameters = InitParameters(SubCode.Contact_Add_List); List <ContactAddServerResponseModel> list = new List <ContactAddServerResponseModel>(); if (requestList != null) { foreach (var item in requestList) { list.Add(new ContactAddServerResponseModel(true, item.GetResponseCode(), new UserModel(UserManager.GetUser(item.ContactUsername)))); } } if (contactedList != null) { foreach (var item in contactedList) { list.Add(new ContactAddServerResponseModel(false, item.GetResponseCode(), new UserModel(UserManager.GetUser(item.RequestUsername)))); } } parameters.AddParameter(ParameterKeys.CONTACT_ADD_SERVER_RESPONSE_LIST, new ContactAddServerResponseModelList(list)); //回应 peer.SendResponse(ReturnCode.Success, parameters); }
private void OnAddResponse(IMClientPeer peer, OperationResponse response) { const SubCode subCode = SubCode.Contact_Add_Response; if (!TryInitResponse(subCode, peer, response, out var parameters, ParameterKeys.CONTACT_ADD_CLIENT_RESPONSE, out ContactAddClientResponseModel model)) { return; } if (peer.LoginUser == null) { mLogger.ErrorFormat("响应失败!客户端:{0}未登陆!", peer); return; } var contactAddRequest = ContactAddRequestManager.GetContactAddRequest(model.RequestUsername, peer.LoginUser.Username); if (contactAddRequest == null) { peer.SendResponse(ReturnCode.UsernameDoesNotExist, parameters); return; } var responseCode = model.Accept ? ContactAddRequest.ContactAddResponseCode.Accept : ContactAddRequest.ContactAddResponseCode.Refuse; //DB更新 contactAddRequest.ResponseCode = (int)responseCode; ContactAddRequestManager.UpdateContactAddRequest(contactAddRequest); var requestUser = UserManager.GetUser(model.RequestUsername); if (model.Accept) { //DB添加 ContactManager.AddContact(new Contact { Username = model.RequestUsername, ContactUsername = peer.LoginUser.Username }); ContactManager.AddContact(new Contact { Username = peer.LoginUser.Username, ContactUsername = requestUser.Username }); } //响应 ContactAddServerResponseModel responseModel1 = new ContactAddServerResponseModel(false, responseCode, new UserModel(requestUser)); peer.SendResponse(ReturnCode.Success, parameters.AddParameter(ParameterKeys.CONTACT_ADD_SERVER_RESPONSE, responseModel1)); //如果请求方在线,发送响应 if (IMApplication.Instance.TryGetPeerByUsername(model.RequestUsername, out var requestPeer)) { ContactAddServerResponseModel responseModel2 = new ContactAddServerResponseModel(true, responseCode, new UserModel(peer.LoginUser)); parameters[ParameterKeys.CONTACT_ADD_SERVER_RESPONSE] = responseModel2; requestPeer.SendRequest(parameters); } }
private void OnAddRequest(IMClientPeer peer, OperationRequest request) { const SubCode subCode = SubCode.Contact_Add_Request; if (!TryInitResponse(subCode, peer, request, out var parameters, ParameterKeys.USERNAME, out string contactUsername)) { return; } var contactAddRequest = ContactAddRequestManager.GetContactAddRequest(peer.LoginUser?.Username, contactUsername); const int wait = (int)ContactAddRequest.ContactAddResponseCode.Waite; if (contactAddRequest != null) { //无需再次添加 if (contactAddRequest.ResponseCode == wait) { //回应 peer.SendResponse(ReturnCode.Success, parameters); return; } //DB更新 contactAddRequest.ResponseCode = wait; ContactAddRequestManager.UpdateContactAddRequest(contactAddRequest); } else { //DB添加请求 ContactAddRequestManager.AddContactAddRequest(new ContactAddRequest { RequestUsername = peer.LoginUser.Username, ContactUsername = contactUsername, ResponseCode = wait }); } //回应 peer.SendResponse(ReturnCode.Success, parameters); //如果对方在线,直接发送请求 if (IMApplication.Instance.TryGetPeerByUsername(contactUsername, out var contactPeer)) { contactPeer.SendRequest(parameters .AddParameter(ParameterKeys.CONTACT_ADD_SERVER_RESPONSE, new ContactAddServerResponseModel(false, ContactAddRequest.ContactAddResponseCode.Waite, new UserModel(peer.LoginUser)))); } }