private void Publish() { UccOperationContext operationContext = new UccOperationContextClass(); operationContext.Initialize(0, new UccContextClass()); IUccPublicationManager publicationManager = (IUccPublicationManager)this.endpoint; IUccCategoryInstance categoryInstance = null; //this.selfPresentity.CreatePublishableStateCategoryInstance(); if (categoryInstance == null) { categoryInstance = publicationManager.CreatePublishableCategoryInstance( CategoryName.State, 2, 0, UCC_CATEGORY_INSTANCE_EXPIRE_TYPE.UCCCIET_DEVICE, 0); operationContext.Context.AddProperty(ContextInitialPublication, true); } categoryInstance.PublicationOperation = UCC_PUBLICATION_OPERATION_TYPE.UCCPOT_ADD; IUccPresenceStateInstance stateInstance = (IUccPresenceStateInstance)categoryInstance; stateInstance.Availability = (int)this.SelfPresentity.Availability; stateInstance.Type = UCC_PRESENCE_STATE_TYPE.UCCPST_USER_STATE; IUccPublication publication = publicationManager.CreatePublication(); ComEvents.Advise <_IUccPublicationEvent>(publication, this); publication.AddPublishableCategoryInstance(categoryInstance); publication.Publish(operationContext); }
//bool _IUccSessionDescriptionEvaluator.Evaluate( // string ContentType, // string SessionDescription) //{ // return SessionDescription.ToLower().Trim() == "xxx-session"; //} #endregion _IUccSessionDescriptionEvaluator #region _IUccApplicationSessionParticipantEvents // not used //void _IUccApplicationSessionParticipantEvents.OnIncomingInvitation( // UccApplicationSessionParticipant eventSource, // UccIncomingInvitationEvent eventData // ) //{ // System.Windows.MessageBox.Show("OnIncomingInvitation"); //} //void _IUccApplicationSessionParticipantEvents.OnInvitationAccepted( // UccApplicationSessionParticipant eventSource, // UccInvitationAcceptedEvent eventData // ) //{ //} //void _IUccApplicationSessionParticipantEvents.OnOutgoingInvitation( // UccApplicationSessionParticipant eventSource, // UccOutgoingInvitationEvent eventData // ) //{ // eventData.ContentType = "xxx-l"; // eventData.SessionDescription = "xxx-session"; //} //void _IUccApplicationSessionParticipantEvents.OnRenegotiate( // UccApplicationSessionParticipant eventSource, // IUccOperationProgressEvent eventData // ) //{ //} #endregion _IUccApplicationSessionParticipantEvents #region _IUccSignalingChannelEvents // no used // experimental //void _IUccSignalingChannelEvents.OnIncomingMessage( // IUccSignalingChannel eventSource, // IUccIncomingSignalingMessageEvent eventData // ) //{ // eventData.Accept(); // System.Windows.MessageBox.Show(eventData.Message.Body); //} //void _IUccSignalingChannelEvents.OnSendRequest( // IUccSignalingChannel eventSource, // IUccOperationProgressEvent eventData // ) //{ // if (eventData.IsComplete && eventData.StatusCode >= 0) // System.Windows.MessageBox.Show("SUBS sent!"); // else // System.Windows.MessageBox.Show("SUBS failed!"); //} #endregion _IUccSignalingChannelEvents #region _IUccPublicationEvent void _IUccPublicationEvent.OnPublish( IUccPublication publication, IUccOperationProgressEvent eventData) { if (eventData.IsComplete) { ComEvents.Unadvise <_IUccPublicationEvent>(publication, this); if (eventData.StatusCode >= 0) { Debug.WriteLine("Publication - OK"); } else { if (eventData.OriginalOperationContext.Context.IsPropertySet(ContextInitialPublication)) { Debug.WriteLine(String.Format("Initial Publication Failed: {0}", Errors.ToString(eventData.StatusCode))); } else { Debug.WriteLine(String.Format("Publication Failed: {0}", Errors.ToString(eventData.StatusCode))); } } } }
public void PublishAvailability(string strAvail) { // Create a publishable category instance for the "state" // category to publish the user state. This is indicated by // setting the Type to "machinestate". The availability for // userState is set to the availability specifed by // the user. IUccPublicationManager publicationManager = this._sessionManager as IUccPublicationManager; IUccCategoryInstance catStateForUserState = publicationManager.CreatePublishableCategoryInstance( "state", // category name 2, // container ID 0x20000000, // instance ID UCC_CATEGORY_INSTANCE_EXPIRE_TYPE.UCCCIET_USER, 0); IUccPresenceStateInstance userState = catStateForUserState as IUccPresenceStateInstance; userState.IsManual = true; userState.Type = UCC_PRESENCE_STATE_TYPE.UCCPST_USER_STATE; //Convert availablity string to integer for publication userState.Availability = AvailabilityStringToInt(strAvail); catStateForUserState.PublicationOperation = UCC_PUBLICATION_OPERATION_TYPE.UCCPOT_ADD; // Create a publishable category instance for "state" // category to publish the machine state. // This is indicated by setting the Type to "machinestate". // The availability for machinestate is set to 3500 - "Available". // The server aggregates the userstate and machinestate // to compute an aggregate state which is then // published on behalf of the user. It is important to // publish machinestate to make this aggregation possible. IUccCategoryInstance catStateForMachineState = publicationManager.CreatePublishableCategoryInstance( "state", 2, 0x30000000, UCC_CATEGORY_INSTANCE_EXPIRE_TYPE.UCCCIET_DEVICE, 10000); IUccPresenceStateInstance machineState = catStateForMachineState as IUccPresenceStateInstance; machineState.IsManual = true; machineState.Availability = 3500; machineState.Type = UCC_PRESENCE_STATE_TYPE.UCCPST_MACHINE_STATE; catStateForMachineState.PublicationOperation = UCC_PUBLICATION_OPERATION_TYPE.UCCPOT_ADD; // Create a publication and advise for publication events. IUccPublication pub = publicationManager.CreatePublication(); //Advise<_IUccPublicationEvent>(pub, this); // Add the two publishable category instances // to the publication. pub.AddPublishableCategoryInstance( catStateForUserState); pub.AddPublishableCategoryInstance( catStateForMachineState); // Publish the publication. pub.Publish(null); }