Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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))));
            }
        }