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
- MultiSelectRootGridEntry.cs
- DragEvent.cs
- ObjectDataSourceMethodEventArgs.cs
- FontWeights.cs
- ContentPosition.cs
- DynamicRouteExpression.cs
- RequestQueryProcessor.cs
- CredentialCache.cs
- SqlFormatter.cs
- RoutedCommand.cs
- TypographyProperties.cs
- Int32Collection.cs
- PermissionListSet.cs
- entityreference_tresulttype.cs
- DataServiceHost.cs
- CrossSiteScriptingValidation.cs
- XmlHierarchicalEnumerable.cs
- DetailsViewInsertEventArgs.cs
- sqlcontext.cs
- Util.cs
- ParameterCollectionEditorForm.cs
- TimeoutHelper.cs
- DocumentEventArgs.cs
- _SpnDictionary.cs
- ImportContext.cs
- XPathParser.cs
- IFlowDocumentViewer.cs
- UIElement.cs
- HMACRIPEMD160.cs
- Models.cs
- LogStream.cs
- Visual3D.cs
- SchemaImporterExtensionElement.cs
- SettingsAttributes.cs
- DBCommandBuilder.cs
- ThreadStateException.cs
- DllNotFoundException.cs
- SqlExpander.cs
- _NativeSSPI.cs
- DefaultValidator.cs
- SystemInformation.cs
- StringCollection.cs
- MulticastNotSupportedException.cs
- RenderTargetBitmap.cs
- Html32TextWriter.cs
- WindowsListViewGroupHelper.cs
- OleDbReferenceCollection.cs
- ProgressBarHighlightConverter.cs
- TextEditorContextMenu.cs
- PageParser.cs
- TextParagraph.cs
- XmlQualifiedNameTest.cs
- ComplexTypeEmitter.cs
- NetworkAddressChange.cs
- DataGridViewCellParsingEventArgs.cs
- SQLInt16.cs
- ProfileParameter.cs
- XmlSchemaAppInfo.cs
- DiscoveryClientDuplexChannel.cs
- SystemInformation.cs
- JsonEnumDataContract.cs
- DeploymentSection.cs
- CounterSet.cs
- ContextInformation.cs
- FormViewPageEventArgs.cs
- DesignerOptionService.cs
- ObjectDataSourceFilteringEventArgs.cs
- XmlSchemaSimpleTypeUnion.cs
- Parameter.cs
- ObjectAnimationUsingKeyFrames.cs
- SafeFileMappingHandle.cs
- CounterSample.cs
- SmiEventSink_Default.cs
- util.cs
- TreeNodeClickEventArgs.cs
- Expression.cs
- EntityDataSourceColumn.cs
- AlphabeticalEnumConverter.cs
- RewritingPass.cs
- WindowsRichEditRange.cs
- _AutoWebProxyScriptEngine.cs
- XsdBuildProvider.cs
- UndoEngine.cs
- ExcCanonicalXml.cs
- DesignTimeVisibleAttribute.cs
- BinaryFormatter.cs
- WebServiceErrorEvent.cs
- SizeChangedInfo.cs
- Matrix.cs
- Win32Native.cs
- CodeDirectionExpression.cs
- HttpPostedFile.cs
- ListViewContainer.cs
- TrustManagerPromptUI.cs
- FileDialog.cs
- ResourceCategoryAttribute.cs
- BuildProvidersCompiler.cs
- AuthorizationRuleCollection.cs
- WebPartVerbCollection.cs
- PrimitiveSchema.cs