**** Merged from MCS ****
[mono-project.git] / mcs / class / corlib / System.Runtime.Remoting.Services / TrackingServices.cs
blob82d4ba916ce265d012f6800f194d8385c587e494
1 //
2 // System.Runtime.Remoting.Services.TrackingServices.cs
3 //
4 // Author:
5 // Jaime Anguiano Olarra (jaime@gnome.org)
6 // Patrik Torstensson
7 //
8 // (C) 2002, Jaime Anguiano Olarra
9 //
12 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
14 // Permission is hereby granted, free of charge, to any person obtaining
15 // a copy of this software and associated documentation files (the
16 // "Software"), to deal in the Software without restriction, including
17 // without limitation the rights to use, copy, modify, merge, publish,
18 // distribute, sublicense, and/or sell copies of the Software, and to
19 // permit persons to whom the Software is furnished to do so, subject to
20 // the following conditions:
21 //
22 // The above copyright notice and this permission notice shall be
23 // included in all copies or substantial portions of the Software.
24 //
25 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
29 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
30 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
31 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
34 using System;
35 using System.Collections;
36 using System.Runtime.Remoting;
38 namespace System.Runtime.Remoting.Services {
39 public class TrackingServices {
40 static ArrayList _handlers = new ArrayList();
42 public TrackingServices () {
45 public static void RegisterTrackingHandler (ITrackingHandler handler) {
46 if (null == handler)
47 throw new ArgumentNullException("handler");
49 lock (typeof(TrackingServices)) {
50 if (-1 != _handlers.IndexOf(handler))
51 throw new RemotingException("handler already registered");
53 _handlers.Add(handler);
57 public static void UnregisterTrackingHandler (ITrackingHandler handler) {
58 if (null == handler)
59 throw new ArgumentNullException("handler");
61 lock (typeof(TrackingServices)) {
62 int idx = _handlers.IndexOf(handler);
63 if (idx == -1)
64 throw new RemotingException("handler is not registered");
66 _handlers.RemoveAt(idx);
70 public static ITrackingHandler[] RegisteredHandlers {
71 get {
72 lock (typeof(TrackingServices)) {
73 if (_handlers.Count == 0)
74 return new ITrackingHandler[0];
77 return (ITrackingHandler[]) _handlers.ToArray();
82 internal static void NotifyMarshaledObject(Object obj, ObjRef or) {
83 ITrackingHandler[] handlers = RegisteredHandlers;
84 for(int i = 0; i < handlers.Length; i++) {
85 handlers[i].MarshaledObject (obj, or);
89 internal static void NotifyUnmarshaledObject(Object obj, ObjRef or) {
90 ITrackingHandler[] handlers = RegisteredHandlers;
91 for(int i = 0; i < handlers.Length; i++) {
92 handlers[i].UnmarshaledObject (obj, or);
96 internal static void NotifyDisconnectedObject(Object obj) {
97 ITrackingHandler[] handlers = RegisteredHandlers;
98 for(int i = 0; i < handlers.Length; i++) {
99 handlers[i].DisconnectedObject (obj);