Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / infocard / Service / managed / Microsoft / InfoCards / UIAgentMonitor.cs / 1 / UIAgentMonitor.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- // // Presharp uses the c# pragma mechanism to supress its warnings. // These are not recognised by the base compiler so we need to explictly // disable the following warnings. See http://winweb/cse/Tools/PREsharp/userguide/default.asp // for details. // #pragma warning disable 1634, 1691 // unknown message, unknown pragma namespace Microsoft.InfoCards { using System; using System.Collections.Generic; using IDT = Microsoft.InfoCards.Diagnostics.InfoCardTrace; // // Summary // This class is used to make certain that only one user call and only one client per TS session can // use the infocard system. // class UIAgentMonitor { static UIAgentMonitor s_singleton = null; static object s_syncRoot = new object(); // // Dictionary of currently running users. // Dictionarym_currentCallingUsers; // user name to request dictionary. Dictionary m_currentTSSessions; // tssession to request dictionary. private UIAgentMonitor() { m_currentCallingUsers = new Dictionary (); m_currentTSSessions = new Dictionary (); } // // Summary // Returns the singleton instance of the monitor, creating it if necessary. // static public UIAgentMonitor Instance() { // // Has it been created yet? // if ( null == s_singleton ) { // // Doesn't look like it try for the lock. // lock ( s_syncRoot ) { // // Was this the first thread to get the lock? // if ( null == s_singleton ) { // // Yes, this thread needs to create the monitor. // s_singleton = new UIAgentMonitor(); } } } return s_singleton; } // // Summary // Adds a new UIAgentMonitorHandle to the collection if the user and tssession associated with the request // are not already occupied. If they are then this method throws the ServiceBusyException. // // Parameters // request - The request to add. // public void AddNewClient( UIAgentMonitorHandle handle ) { lock ( s_syncRoot ) { string user = handle.UserName; int tssession = handle.TsSessionId; if ( m_currentCallingUsers.ContainsKey( user ) ) { throw IDT.ThrowHelperError( new ServiceBusyException( SR.GetString( SR.ServiceInUseOnAnotherSession ) ) ); } if ( m_currentTSSessions.ContainsKey( tssession ) ) { throw IDT.ThrowHelperError( new ServiceBusyException( SR.GetString( SR.ServiceInUseOnAnotherSession ) ) ); } m_currentCallingUsers.Add( user, handle ); try { m_currentTSSessions.Add( tssession, handle ); } catch( Exception ) { m_currentCallingUsers.Remove( user ); throw; } } } // // Summary // Removes a UIAgentMonitorHandle from the collection if this specific request is in the collection. // // Parameters // request - the request to remove. // public void RemoveClient( UIAgentMonitorHandle handle ) { lock ( s_syncRoot ) { string user = handle.UserName; int tssession = handle.TsSessionId; if ( ( !string.IsNullOrEmpty( user ) ) && ( m_currentCallingUsers.ContainsKey( user ) ) && ( handle == m_currentCallingUsers[ user ] ) ) { m_currentCallingUsers.Remove( user ); } if ( ( m_currentTSSessions.ContainsKey( tssession ) ) && ( handle == m_currentTSSessions[ tssession ] ) ) { m_currentTSSessions.Remove( tssession ); } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- OrderingInfo.cs
- Literal.cs
- SolidColorBrush.cs
- ResourceManager.cs
- CalendarBlackoutDatesCollection.cs
- OperatingSystem.cs
- ItemAutomationPeer.cs
- TypeUtil.cs
- EmbeddedMailObject.cs
- DefaultBinder.cs
- RecognizeCompletedEventArgs.cs
- ExtensionQuery.cs
- WebPartCollection.cs
- MediaPlayerState.cs
- JsonEncodingStreamWrapper.cs
- ItemCollection.cs
- ItemsControl.cs
- CommandHelpers.cs
- BaseAddressElement.cs
- PinnedBufferMemoryStream.cs
- AddInBase.cs
- SqlSelectClauseBuilder.cs
- SmtpNegotiateAuthenticationModule.cs
- ZoneButton.cs
- DependencyObjectProvider.cs
- DataFormat.cs
- Schema.cs
- __Filters.cs
- XmlSchemaImport.cs
- SqlDataSourceEnumerator.cs
- BamlResourceContent.cs
- OSEnvironmentHelper.cs
- FileStream.cs
- ChildrenQuery.cs
- CollectionViewGroupRoot.cs
- AudioFormatConverter.cs
- XpsResourcePolicy.cs
- DataColumnChangeEvent.cs
- AutomationProperties.cs
- DiscoveryRequestHandler.cs
- DataSourceXmlTextReader.cs
- ApplicationSecurityInfo.cs
- _Events.cs
- PerfService.cs
- CatalogPartChrome.cs
- UnmanagedMemoryStream.cs
- LogSwitch.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- CallSiteOps.cs
- ThreadExceptionDialog.cs
- DrawListViewSubItemEventArgs.cs
- Subtree.cs
- xdrvalidator.cs
- WmlLiteralTextAdapter.cs
- EventPrivateKey.cs
- CalculatedColumn.cs
- TypeSystemProvider.cs
- TimeoutException.cs
- PreloadedPackages.cs
- ScaleTransform.cs
- XmlAttributeOverrides.cs
- MembershipPasswordException.cs
- PropertyRef.cs
- EmptyCollection.cs
- QuaternionAnimation.cs
- ColumnWidthChangingEvent.cs
- AxParameterData.cs
- PermissionSet.cs
- SqlCacheDependencyDatabaseCollection.cs
- HelpProvider.cs
- PanningMessageFilter.cs
- DesignerDataSourceView.cs
- ProfileSettingsCollection.cs
- RegexReplacement.cs
- RouteCollection.cs
- XPathNodeInfoAtom.cs
- ExpressionsCollectionConverter.cs
- SupportingTokenBindingElement.cs
- Parameter.cs
- Cursor.cs
- Rotation3DAnimationUsingKeyFrames.cs
- DateTimeUtil.cs
- SecureStringHasher.cs
- ToolStripScrollButton.cs
- _NTAuthentication.cs
- SecurityIdentifierConverter.cs
- XmlMtomReader.cs
- OpCellTreeNode.cs
- SqlResolver.cs
- TextModifierScope.cs
- CatchDesigner.xaml.cs
- ApplicationServiceManager.cs
- BStrWrapper.cs
- PartialCachingControl.cs
- CacheEntry.cs
- Application.cs
- EventLogPermissionEntryCollection.cs
- IUnknownConstantAttribute.cs
- CharStorage.cs
- EmptyStringExpandableObjectConverter.cs