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
- RadioButtonStandardAdapter.cs
- UseLicense.cs
- DocumentViewerBase.cs
- StrokeNodeEnumerator.cs
- ToolboxBitmapAttribute.cs
- Timeline.cs
- Input.cs
- EqualityComparer.cs
- TypeDependencyAttribute.cs
- RelatedPropertyManager.cs
- DataGridViewSelectedColumnCollection.cs
- DocumentApplication.cs
- WebPartConnection.cs
- XpsS0ValidatingLoader.cs
- SafeNativeMethods.cs
- TraceLevelHelper.cs
- ViewGenResults.cs
- SafeEventLogReadHandle.cs
- RectIndependentAnimationStorage.cs
- RuntimeCompatibilityAttribute.cs
- AesManaged.cs
- PermissionListSet.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- XmlWrappingReader.cs
- DataGridViewCellEventArgs.cs
- SelectionEditingBehavior.cs
- CoreSwitches.cs
- ResourceDescriptionAttribute.cs
- VectorKeyFrameCollection.cs
- RemotingAttributes.cs
- SqlStream.cs
- ListDictionary.cs
- OverlappedAsyncResult.cs
- LinearGradientBrush.cs
- CodePrimitiveExpression.cs
- MetricEntry.cs
- EncoderBestFitFallback.cs
- XPathDescendantIterator.cs
- dbenumerator.cs
- RTLAwareMessageBox.cs
- QuerySettings.cs
- XmlCountingReader.cs
- XsltInput.cs
- DisplayMemberTemplateSelector.cs
- pingexception.cs
- WSSecurityOneDotOneReceiveSecurityHeader.cs
- AsmxEndpointPickerExtension.cs
- Stream.cs
- SqlCharStream.cs
- PersonalizationState.cs
- ActivityMarkupSerializer.cs
- BamlTreeUpdater.cs
- VideoDrawing.cs
- PeerNameResolver.cs
- ArraySortHelper.cs
- HandleRef.cs
- IndexerNameAttribute.cs
- SEHException.cs
- HandleTable.cs
- mediapermission.cs
- PropertyEmitter.cs
- MouseButton.cs
- sortedlist.cs
- Profiler.cs
- UnconditionalPolicy.cs
- LocationUpdates.cs
- OuterGlowBitmapEffect.cs
- SqlProviderServices.cs
- _NegotiateClient.cs
- StorageConditionPropertyMapping.cs
- ConstrainedDataObject.cs
- SafeNativeMethods.cs
- RequestResizeEvent.cs
- DbRetry.cs
- DtdParser.cs
- XmlConverter.cs
- EventDescriptor.cs
- RowUpdatedEventArgs.cs
- CqlParser.cs
- NativeObjectSecurity.cs
- WebPartUtil.cs
- LexicalChunk.cs
- NamespaceDecl.cs
- Imaging.cs
- SqlLiftWhereClauses.cs
- ProxyWebPartManagerDesigner.cs
- DataSourceXmlElementAttribute.cs
- SqlLiftIndependentRowExpressions.cs
- BufferManager.cs
- OleDbConnection.cs
- MessageQueueKey.cs
- BinHexEncoder.cs
- UnsafeNativeMethodsCLR.cs
- ProgressBar.cs
- BitmapFrameEncode.cs
- Constant.cs
- ConnectionProviderAttribute.cs
- AutoScrollExpandMessageFilter.cs
- PagePropertiesChangingEventArgs.cs
- SHA1Managed.cs