summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/Collector.h
blob: 38b8cede96ea7e66e160fd7530881990b9f68732 (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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
// **********************************************************************
//
// Copyright (c) 2002
// MutableRealms, Inc.
// Huntsville, AL, USA
//
// All Rights Reserved
//
// **********************************************************************

#ifndef ICE_COLLECTOR_H
#define ICE_COLLECTOR_H

#include <Ice/CollectorF.h>
#include <Ice/InstanceF.h>
#include <Ice/TransceiverF.h>
#include <Ice/AcceptorF.h>
#include <Ice/ThreadPoolF.h>
#include <Ice/ObjectAdapterF.h>
#include <Ice/EndpointF.h>
#include <Ice/TraceLevelsF.h>
#include <Ice/LoggerF.h>
#include <Ice/EventHandler.h>
#include <list>

namespace Ice
{

class LocalException;
class ObjectAdapterI;

}

namespace IceInternal
{

class Incoming;

class Collector : public EventHandler, public JTCRecursiveMutex
{
public:

    void destroy();
    bool destroyed() const;
    void hold();
    void activate();
    void prepareReply(Incoming*);
    void sendReply(Incoming*);

    //
    // Operations from EventHandler
    //
    virtual bool server() const;
    virtual bool readable() const;
    virtual void read(BasicStream&);
    virtual void message(BasicStream&);
    virtual void exception(const ::Ice::LocalException&);
    virtual void finished();
    virtual bool tryDestroy();

private:

    Collector(const InstancePtr&, const ::Ice::ObjectAdapterPtr&, const TransceiverPtr&, const EndpointPtr&);
    virtual ~Collector();
    friend class CollectorFactory;

    enum State
    {
	StateActive,
	StateHolding,
	StateClosing,
	StateClosed
    };

    void setState(State);
    void closeConnection();
    void warning(const ::Ice::Exception&) const;

    ::Ice::ObjectAdapterPtr _adapter;
    TransceiverPtr _transceiver;
    EndpointPtr _endpoint;
    TraceLevelsPtr _traceLevels;
    ::Ice::LoggerPtr _logger;
    ThreadPoolPtr _threadPool;
    int _responseCount;
    State _state;
    bool _warnAboutExceptions;
};

class CollectorFactory : public EventHandler, public JTCMutex
{
public:

    void destroy();
    void hold();
    void activate();

    EndpointPtr endpoint() const;
    bool equivalent(const EndpointPtr&) const;

    //
    // Operations from EventHandler
    //
    virtual bool server() const;
    virtual bool readable() const;
    virtual void read(BasicStream&);
    virtual void message(BasicStream&);
    virtual void exception(const ::Ice::LocalException&);
    virtual void finished();
    virtual bool tryDestroy();
    
private:

    CollectorFactory(const InstancePtr&, const ::Ice::ObjectAdapterPtr&, const EndpointPtr&);
    virtual ~CollectorFactory();
    friend class ::Ice::ObjectAdapterI;

    enum State
    {
	StateActive,
	StateHolding,
	StateClosing,
	StateClosed
    };

    void setState(State);
    void clearBacklog();
    void warning(const ::Ice::Exception&) const;

    ::Ice::ObjectAdapterPtr _adapter;
    AcceptorPtr _acceptor;
    TransceiverPtr _transceiver;
    EndpointPtr _endpoint;
    TraceLevelsPtr _traceLevels;
    ::Ice::LoggerPtr _logger;
    ThreadPoolPtr _threadPool;
    std::list<CollectorPtr> _collectors;
    State _state;
    bool _warnAboutExceptions;
};

}

#endif