summaryrefslogtreecommitdiff
path: root/csharp/src/Ice/ObserverHelper.cs
blob: dc51d875c3e5c20cd5b410729993a1a121b0d131 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// **********************************************************************
//
// Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
//
// This copy of Ice is licensed to you under the terms described in the
// ICE_LICENSE file included in this distribution.
//
// **********************************************************************

namespace IceInternal
{
    using System.Collections.Generic;
    using Ice.Instrumentation;

    public sealed class ObserverHelper
    {
        static public InvocationObserver get(Instance instance, string op)
        {
            CommunicatorObserver obsv = instance.initializationData().observer;
            if(obsv != null)
            {
                InvocationObserver observer = obsv.getInvocationObserver(null, op, _emptyContext);
                if(observer != null)
                {
                    observer.attach();
                }
                return observer;
            }
            return null;
        }

        static public InvocationObserver get(Ice.ObjectPrx proxy, string op)
        {
            return get(proxy, op, null);
        }

        static public InvocationObserver get(Ice.ObjectPrx proxy, string op, Dictionary<string, string> context)
        {
            CommunicatorObserver obsv = 
                ((Ice.ObjectPrxHelperBase)proxy).reference__().getInstance().initializationData().observer;
            if(obsv != null)
            {
                InvocationObserver observer;
                if(context == null)
                {
                    observer = obsv.getInvocationObserver(proxy, op, _emptyContext);
                }
                else
                {
                    observer = obsv.getInvocationObserver(proxy, op, context);
                }
                if(observer != null)
                {
                    observer.attach();
                }
                return observer;
            }
            return null;
        }

        private static Dictionary<string, string> _emptyContext = new Dictionary<string, string>();
    }
}