Add const qualifier to constructor port parameter
[ric-plt/xapp-frame-cpp.git] / src / messaging / messenger.hpp
1 // vi: ts=4 sw=4 noet:
2 /*
3 ==================================================================================
4         Copyright (c) 2020 Nokia
5         Copyright (c) 2020 AT&T Intellectual Property.
6
7    Licensed under the Apache License, Version 2.0 (the "License");
8    you may not use this file except in compliance with the License.
9    You may obtain a copy of the License at
10
11        http://www.apache.org/licenses/LICENSE-2.0
12
13    Unless required by applicable law or agreed to in writing, software
14    distributed under the License is distributed on an "AS IS" BASIS,
15    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16    See the License for the specific language governing permissions and
17    limitations under the License.
18 ==================================================================================
19 */
20
21
22 /*
23         Mnemonic:       messenger.hpp
24         Abstract:       Headers for the messenger class
25
26         Date:           10 March 2020
27         Author:         E. Scott Daniels
28 */
29
30 #ifndef _messenger_hpp
31 #define _messenger_hpp
32
33
34 #include <iostream>
35 #include <string>
36 #include <map>
37 #include <memory>
38 #include <mutex>
39
40 #include <rmr/rmr.h>
41
42 #include "message.hpp"
43
44 #ifndef RMR_FALSE
45         #define RMR_FALSE       0
46         #define RMR_TRUE        1
47 #endif
48
49 class Messenger {
50
51         private:
52                 std::map<int,Callback*> cb_hash;        // callback functions associated with message types
53                 std::mutex*     gate;                                   // overall mutex should we need searialisation
54                 bool            ok_2_run;
55                 bool            callbacks = false;              // true if callbacks are defined
56                 void*           mrc;                                    // message router context
57                 char*           listen_port;                    // port we ask msg router to listen on
58
59                 // copy and assignment are PRIVATE so that they fail if xapp tries; messenger cannot be copied!
60                 Messenger( const Messenger& soi );      
61                 Messenger& operator=( const Messenger& soi );
62
63         public:
64                 // -- constants which need an instance; that happens as a global in the .cpp file (wtf C++)
65                 static const int MAX_PAYLOAD;                   // max message size we'll handle
66                 static const int DEFAULT_CALLBACK;              // parm for add callback to set default
67
68                 Messenger( const char* port, bool wait4table ); // builder
69                 Messenger( Messenger&& soi );                           // move construction
70                 Messenger& operator=( Messenger&& soi );        // move operator
71                 ~Messenger();                                                           // destroyer
72
73                 void Add_msg_cb( int mtype, user_callback fun_name, void* data );
74                 std::unique_ptr<Message> Alloc_msg( int payload_size );                 // message allocation
75                 void Listen( );                                                                                                 // lisen driver
76                 std::unique_ptr<Message> Receive( int timeout );                                // receive 1 message
77                 void Stop( );                                                                                                   // force to stop
78                 //void Release_mbuf( void* vmbuf );
79                 bool Wait_for_cts( int max_wait );
80 };
81
82 #endif