source: trash/old-modules/transport/protlib/queuemanager.h@ 5887

Last change on this file since 5887 was 5641, checked in by Christoph Mayer, 15 years ago
File size: 3.5 KB
Line 
1/// ----------------------------------------*- mode: C++; -*--
2/// @file queuemanager.h
3/// This is the queuemanager which records queues and message source IDs
4/// ----------------------------------------------------------
5/// $Id: queuemanager.h 2549 2007-04-02 22:17:37Z bless $
6/// $HeadURL: https://svn.ipv6.tm.uka.de/nsis/protlib/trunk/include/queuemanager.h $
7// ===========================================================
8//
9// Copyright (C) 2005-2007, all rights reserved by
10// - Institute of Telematics, Universitaet Karlsruhe (TH)
11//
12// More information and contact:
13// https://projekte.tm.uka.de/trac/NSIS
14//
15// This program is free software; you can redistribute it and/or modify
16// it under the terms of the GNU General Public License as published by
17// the Free Software Foundation; version 2 of the License
18//
19// This program is distributed in the hope that it will be useful,
20// but WITHOUT ANY WARRANTY; without even the implied warranty of
21// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22// GNU General Public License for more details.
23//
24// You should have received a copy of the GNU General Public License along
25// with this program; if not, write to the Free Software Foundation, Inc.,
26// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
27//
28// ===========================================================
29/** @ingroup queuemanager
30 *
31 * This is the queuemanager which records queues and message source IDs.
32 */
33
34#ifndef QUEUE_MANAGER_H
35#define QUEUE_MANAGER_H
36
37#include "protlib_types.h"
38#include "cleanuphandler.h"
39
40#include <vector>
41
42#include "fqueue.h"
43#include "messages.h"
44
45namespace protlib {
46
47/** @addtogroup queuemanager Queue Manager
48 * \ingroup fastqueue
49 * @{
50 */
51
52/// QueueManager errors
53class QueueManagerError : public ProtLibException {
54public:
55 /// error codes
56 enum error_t {
57 ERROR_NO_QUEUE_MANAGER,
58 ERROR_REGISTER
59 }; // end error_t
60 const error_t err;
61 /// constructor
62 QueueManagerError(error_t e);
63 virtual const char* getstr() const;
64 virtual const char *what() const throw() { return getstr(); }
65private:
66 /// QueueManager error strings
67 static const char* const errstr[];
68}; // end class QueueManagerError
69
70
71/**
72 * The Queue Manager singleton.
73 *
74 * The QueueManager manages several FastQueue objects. A queue is registered
75 * with the manager using a simple (key, value) scheme. The key is of type
76 * message:qaddr_t, and the value is a FastQueue object.
77 *
78 * You can send messages to a registered queue using the message::send_to(dest)
79 * method, where dest has to be the message::qaddr_t which has been used for
80 * registering the queue.
81 *
82 * This class is used as a singleton, so there will usually be only one
83 * object of this class.
84 */
85class QueueManager {
86public:
87 /// return QueueManager singleton instance
88 static QueueManager* instance();
89 /// clear QueueManager
90 static void clear();
91 /// register a queue
92 void register_queue(FastQueue* fq, message::qaddr_t s);
93 /// deregister a queue
94 void unregister_queue(message::qaddr_t s);
95
96 /// get queue
97 FastQueue* get_queue(message::qaddr_t s) const;
98private:
99 /// QueueManager instance
100 static QueueManager* inst;
101 /// constructor
102 QueueManager();
103 /// Destruktor
104 ~QueueManager();
105 /// QueueManager array
106 typedef vector<FastQueue*> qm_array_t;
107 /// QueueManager array iterator
108 typedef qm_array_t::iterator qm_array_it_t;
109 /// array
110 qm_array_t queue_arr;
111 /// locking
112 mutable pthread_mutex_t mutex;
113
114 static const size_t INITIAL_ARRAY_SIZE = 128;
115};
116
117//@}
118
119} // end namespace protlib
120
121#endif
Note: See TracBrowser for help on using the repository browser.