private bool AddProfileExpressionRoleMemberSync(string scenario) { HandleType srvHandle = new HandleType(); srvHandle.ForeignId = "MyProfile"; srvHandle.Id = "0"; srvHandle.Type = ServiceName.Profile; if (NSMessageHandler.MSNTicket != MSNTicket.Empty) { MsnServiceState serviceState = new MsnServiceState(scenario, "AddMember", false); SharingServiceBinding sharingService = (SharingServiceBinding)CreateService(MsnServiceType.Sharing, serviceState); AddMemberRequestType addMemberRequest = new AddMemberRequestType(); addMemberRequest.serviceHandle = srvHandle; Membership memberShip = new Membership(); memberShip.MemberRole = RoleId.ProfileExpression; RoleMember roleMember = new RoleMember(); roleMember.Type = "Role"; roleMember.Id = RoleId.Allow; roleMember.State = MemberState.Accepted; roleMember.MaxRoleRecursionDepth = "0"; roleMember.MaxDegreesSeparation = "0"; HandleType defService = new HandleType(); defService.ForeignId = ""; defService.Id = "0"; defService.Type = ServiceName.Messenger; roleMember.DefiningService = defService; memberShip.Members = new RoleMember[] { roleMember }; addMemberRequest.memberships = new Membership[] { memberShip }; try { ChangeCacheKeyAndPreferredHostForSpecifiedMethod(sharingService, MsnServiceType.Sharing, serviceState, addMemberRequest); sharingService.AddMember(addMemberRequest); } catch (Exception ex) { OnServiceOperationFailed(sharingService, new ServiceOperationFailedEventArgs("ShareItem", ex)); Trace.WriteLineIf(Settings.TraceSwitch.TraceError, "AddMember error: " + ex.Message, GetType().Name); return(false); } return(true); } return(false); }
private void AddServiceAsync(ServiceName serviceName, AddServiceCompletedEventHandler callback) { if (NSMessageHandler.MSNTicket == MSNTicket.Empty || AddressBook == null) { OnServiceOperationFailed(this, new ServiceOperationFailedEventArgs("AddService", new MSNPSharpException("You don't have access right on this action anymore."))); } else { AddServiceRequestType r = new AddServiceRequestType(); r.serviceInfo = new InfoType(); r.serviceInfo.Handle = new HandleType(); r.serviceInfo.Handle.Type = serviceName; r.serviceInfo.Handle.ForeignId = String.Empty; r.serviceInfo.InverseRequired = true; MsnServiceState addServiceObject = new MsnServiceState(PartnerScenario.CircleSave, "AddService", true); SharingServiceBinding abService = (SharingServiceBinding)CreateService(MsnServiceType.Sharing, addServiceObject); abService.AddServiceCompleted += delegate(object service, AddServiceCompletedEventArgs e) { OnAfterCompleted(new ServiceOperationEventArgs(abService, MsnServiceType.Sharing, e)); if (e.Cancelled || NSMessageHandler.MSNTicket == MSNTicket.Empty) { return; } if (e.Error == null) { Trace.WriteLineIf(Settings.TraceSwitch.TraceInfo, serviceName + "=" + e.Result.AddServiceResult + " created..."); // Update service membership... msRequest(PartnerScenario.BlockUnblock, delegate { if (callback != null) { callback(abService, e); } }); } }; RunAsyncMethod(new BeforeRunAsyncMethodEventArgs(abService, MsnServiceType.Sharing, addServiceObject, r)); } }
private void CreateCircleAsync(string circleName, CreateCircleCompletedEventHandler callback) { //This is M$ style, you will never guess out the meaning of these numbers. ContentInfoType properties = new ContentInfoType(); properties.Domain = 1; properties.HostedDomain = Contact.DefaultHostDomain; properties.Type = 2; properties.MembershipAccess = 0; properties.IsPresenceEnabled = true; properties.RequestMembershipOption = 2; properties.DisplayName = circleName; CreateCircleRequestType request = new CreateCircleRequestType(); request.properties = properties; request.callerInfo = new callerInfoType(); request.callerInfo.PublicDisplayName = NSMessageHandler.Owner.Name == string.Empty ? NSMessageHandler.Owner.Account : NSMessageHandler.Owner.Name; MsnServiceState createCircleObject = new MsnServiceState(PartnerScenario.CircleSave, "CreateCircle", true); SharingServiceBinding sharingService = (SharingServiceBinding)CreateService(MsnServiceType.Sharing, createCircleObject); sharingService.CreateCircleCompleted += delegate(object sender, CreateCircleCompletedEventArgs e) { OnAfterCompleted(new ServiceOperationEventArgs(sharingService, MsnServiceType.Sharing, e)); if (e.Cancelled || NSMessageHandler.MSNTicket == MSNTicket.Empty) { return; } if (callback != null) { callback(sender, e); } }; RunAsyncMethod(new BeforeRunAsyncMethodEventArgs(sharingService, MsnServiceType.Sharing, createCircleObject, request)); }
private void DeleteMemberAsync(Contact contact, ServiceName serviceName, RoleLists list, DeleteMemberCompletedEventHandler callback) { if (NSMessageHandler.MSNTicket == MSNTicket.Empty || AddressBook == null) { OnServiceOperationFailed(this, new ServiceOperationFailedEventArgs("DeleteMember", new MSNPSharpException("You don't have access right on this action anymore."))); return; } // check whether the update is necessary if (!contact.HasLists(list)) { return; } RoleId memberRole = ContactList.GetMemberRole(list); if (memberRole == RoleId.None) { return; } Service service = AddressBook.SelectTargetService(serviceName); if (service == null) { AddServiceAsync(serviceName, delegate { // RESURSIVE CALL DeleteMemberAsync(contact, serviceName, list, callback); }); return; } DeleteMemberRequestType deleteMemberRequest = new DeleteMemberRequestType(); deleteMemberRequest.serviceHandle = new HandleType(); deleteMemberRequest.serviceHandle.Id = service.Id.ToString(); deleteMemberRequest.serviceHandle.Type = serviceName; Membership memberShip = new Membership(); memberShip.MemberRole = memberRole; BaseMember deleteMember = null; // BaseMember is an abstract type, so we cannot create a new instance. // If we have a MembershipId different from 0, just use it. Otherwise, use email or phone number. BaseMember baseMember = AddressBook.SelectBaseMember(serviceName, contact.Account, contact.ClientType, memberRole); int membershipId = (baseMember == null) ? 0 : baseMember.MembershipId; switch (contact.ClientType) { case IMAddressInfoType.WindowsLive: deleteMember = new PassportMember(); deleteMember.Type = (baseMember == null) ? MembershipType.Passport : baseMember.Type; deleteMember.State = (baseMember == null) ? MemberState.Accepted : baseMember.State; if (membershipId == 0) { (deleteMember as PassportMember).PassportName = contact.Account; } else { deleteMember.MembershipId = membershipId; deleteMember.MembershipIdSpecified = true; } break; case IMAddressInfoType.Yahoo: case IMAddressInfoType.OfficeCommunicator: deleteMember = new EmailMember(); deleteMember.Type = MembershipType.Email; deleteMember.State = (baseMember == null) ? MemberState.Accepted : baseMember.State; if (membershipId == 0) { (deleteMember as EmailMember).Email = contact.Account; } else { deleteMember.MembershipId = membershipId; deleteMember.MembershipIdSpecified = true; } break; case IMAddressInfoType.Telephone: deleteMember = new PhoneMember(); deleteMember.Type = MembershipType.Phone; deleteMember.State = (baseMember == null) ? MemberState.Accepted : baseMember.State; if (membershipId == 0) { (deleteMember as PhoneMember).PhoneNumber = contact.Account; } else { deleteMember.MembershipId = membershipId; deleteMember.MembershipIdSpecified = true; } break; case IMAddressInfoType.Circle: deleteMember = new CircleMember(); deleteMember.Type = MembershipType.Circle; deleteMember.State = (baseMember == null) ? MemberState.Accepted : baseMember.State; (deleteMember as CircleMember).CircleId = contact.AddressBookId.ToString("D").ToLowerInvariant(); break; } memberShip.Members = new BaseMember[] { deleteMember }; deleteMemberRequest.memberships = new Membership[] { memberShip }; MsnServiceState DeleteMemberObject = new MsnServiceState(PartnerScenario.ContactMsgrAPI, "DeleteMember", true); SharingServiceBinding sharingService = (SharingServiceBinding)CreateService(MsnServiceType.Sharing, DeleteMemberObject); sharingService.DeleteMemberCompleted += delegate(object srv, DeleteMemberCompletedEventArgs e) { OnAfterCompleted(new ServiceOperationEventArgs(sharingService, MsnServiceType.Sharing, e)); if (e.Cancelled || NSMessageHandler.MSNTicket == MSNTicket.Empty) { return; } // Update AB AddressBook.RemoveMemberhip(serviceName, contact.Account, contact.ClientType, memberRole); if (callback != null) { callback(srv, e); } }; RunAsyncMethod(new BeforeRunAsyncMethodEventArgs(sharingService, MsnServiceType.Sharing, DeleteMemberObject, deleteMemberRequest)); }
private void AddMemberAsync(Contact contact, ServiceName serviceName, RoleLists list, AddMemberCompletedEventHandler callback) { if (NSMessageHandler.MSNTicket == MSNTicket.Empty || AddressBook == null) { OnServiceOperationFailed(this, new ServiceOperationFailedEventArgs("AddMember", new MSNPSharpException("You don't have access right on this action anymore."))); return; } // check whether the update is necessary if (contact.HasLists(list)) { return; } RoleId memberRole = ContactList.GetMemberRole(list); if (memberRole == RoleId.None) { return; } Service service = AddressBook.SelectTargetService(serviceName); if (service == null) { AddServiceAsync(serviceName, delegate { // RESURSIVE CALL AddMemberAsync(contact, serviceName, list, callback); }); return; } AddMemberRequestType addMemberRequest = new AddMemberRequestType(); addMemberRequest.serviceHandle = new HandleType(); addMemberRequest.serviceHandle.Id = service.Id.ToString(); addMemberRequest.serviceHandle.Type = serviceName; Membership memberShip = new Membership(); memberShip.MemberRole = memberRole; BaseMember member = null; // Abstract if (contact.ClientType == IMAddressInfoType.WindowsLive) { member = new PassportMember(); PassportMember passportMember = member as PassportMember; passportMember.PassportName = contact.Account; passportMember.State = MemberState.Accepted; passportMember.Type = MembershipType.Passport; } else if (contact.ClientType == IMAddressInfoType.Yahoo || contact.ClientType == IMAddressInfoType.OfficeCommunicator) { member = new EmailMember(); EmailMember emailMember = member as EmailMember; emailMember.State = MemberState.Accepted; emailMember.Type = MembershipType.Email; emailMember.Email = contact.Account; emailMember.Annotations = new Annotation[] { new Annotation() }; emailMember.Annotations[0].Name = AnnotationNames.MSN_IM_BuddyType; emailMember.Annotations[0].Value = (contact.ClientType == IMAddressInfoType.Yahoo) ? "32:" : "02:"; } else if (contact.ClientType == IMAddressInfoType.Telephone) { member = new PhoneMember(); PhoneMember phoneMember = member as PhoneMember; phoneMember.State = MemberState.Accepted; phoneMember.Type = MembershipType.Phone; phoneMember.PhoneNumber = contact.Account; } else if (contact.ClientType == IMAddressInfoType.Circle) { member = new CircleMember(); CircleMember circleMember = member as CircleMember; circleMember.Type = MembershipType.Circle; circleMember.State = MemberState.Accepted; circleMember.CircleId = contact.AddressBookId.ToString("D").ToLowerInvariant(); } if (member == null) { return; } memberShip.Members = new BaseMember[] { member }; addMemberRequest.memberships = new Membership[] { memberShip }; MsnServiceState AddMemberObject = new MsnServiceState(PartnerScenario.ContactMsgrAPI, "AddMember", true); SharingServiceBinding sharingService = (SharingServiceBinding)CreateService(MsnServiceType.Sharing, AddMemberObject); sharingService.AddMemberCompleted += delegate(object srv, AddMemberCompletedEventArgs e) { OnAfterCompleted(new ServiceOperationEventArgs(sharingService, MsnServiceType.Sharing, e)); if (e.Cancelled || NSMessageHandler.MSNTicket == MSNTicket.Empty) { return; } // Update AB AddressBook.AddMemberhip(serviceName, contact.Account, contact.ClientType, memberRole, member); if (callback != null) { callback(srv, e); } }; RunAsyncMethod(new BeforeRunAsyncMethodEventArgs(sharingService, MsnServiceType.Sharing, AddMemberObject, addMemberRequest)); }
private void FindMembershipAsync(string partnerScenario, FindMembershipCompletedEventHandler findMembershipCallback) { if (NSMessageHandler.MSNTicket == MSNTicket.Empty || AddressBook == null) { OnServiceOperationFailed(this, new ServiceOperationFailedEventArgs("FindMembership", new MSNPSharpException("You don't have access right on this action anymore."))); return; } bool msdeltasOnly = false; DateTime serviceLastChange = WebServiceDateTimeConverter.ConvertToDateTime(WebServiceConstants.ZeroTime); DateTime msLastChange = WebServiceDateTimeConverter.ConvertToDateTime(AddressBook.MembershipLastChange); string strLastChange = WebServiceConstants.ZeroTime; if (msLastChange != serviceLastChange) { msdeltasOnly = true; strLastChange = AddressBook.MembershipLastChange; } FindMembershipRequestType request = new FindMembershipRequestType(); request.view = "Full"; // NO default! request.deltasOnly = msdeltasOnly; request.lastChange = strLastChange; request.serviceFilter = new ServiceFilter(); request.serviceFilter.Types = new ServiceName[] { ServiceName.Messenger, ServiceName.IMAvailability, ServiceName.SocialNetwork }; MsnServiceState FindMembershipObject = new MsnServiceState(partnerScenario, "FindMembership", true); SharingServiceBinding sharingService = (SharingServiceBinding)CreateService(MsnServiceType.Sharing, FindMembershipObject); sharingService.FindMembershipCompleted += delegate(object sender, FindMembershipCompletedEventArgs e) { OnAfterCompleted(new ServiceOperationEventArgs(sharingService, MsnServiceType.Sharing, e)); // Cancelled or signed off if (e.Cancelled || NSMessageHandler.MSNTicket == MSNTicket.Empty) { return; } if (e.Error != null) { // Handle errors and recall this method if necesarry. if (e.Error.Message.ToLowerInvariant().Contains("need to do full sync") || e.Error.Message.ToLowerInvariant().Contains("full sync required")) { // recursive Call ----------------------------- DeleteRecordFile(true); FindMembershipAsync(partnerScenario, findMembershipCallback); } else if (e.Error.Message.ToLowerInvariant().Contains("address book does not exist")) { ABAddRequestType abAddRequest = new ABAddRequestType(); abAddRequest.abInfo = new abInfoType(); abAddRequest.abInfo.ownerEmail = NSMessageHandler.Owner.Account; abAddRequest.abInfo.ownerPuid = 0; abAddRequest.abInfo.fDefault = true; MsnServiceState ABAddObject = new MsnServiceState(partnerScenario, "ABAdd", true); ABServiceBinding abservice = (ABServiceBinding)CreateService(MsnServiceType.AB, ABAddObject); abservice.ABAddCompleted += delegate(object srv, ABAddCompletedEventArgs abadd_e) { OnAfterCompleted(new ServiceOperationEventArgs(abservice, MsnServiceType.AB, abadd_e)); if (abadd_e.Cancelled || NSMessageHandler.MSNTicket == MSNTicket.Empty) { return; } if (abadd_e.Error == null) { // recursive Call ----------------------------- DeleteRecordFile(true); FindMembershipAsync(partnerScenario, findMembershipCallback); } }; RunAsyncMethod(new BeforeRunAsyncMethodEventArgs(abservice, MsnServiceType.AB, ABAddObject, abAddRequest)); } else { Trace.WriteLineIf(Settings.TraceSwitch.TraceVerbose, "UNHANDLED ERROR: " + e.Error.Message.ToString(), GetType().Name); // Pass to the callback if (findMembershipCallback != null) { findMembershipCallback(sharingService, e); } } } else { // No error, fire event handler. if (findMembershipCallback != null) { findMembershipCallback(sharingService, e); } } }; RunAsyncMethod(new BeforeRunAsyncMethodEventArgs(sharingService, MsnServiceType.Sharing, FindMembershipObject, request)); }