Initial source commit
[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 "callback.hpp"
43 //#include "default_cb.hpp"             // default callback prototypes
44 #include "message.hpp"
45
46 #ifndef RMR_FALSE
47         #define RMR_FALSE       0
48         #define RMR_TRUE        1
49 #endif
50
51 class Messenger {
52
53         private:
54                 std::map<int,Callback*> cb_hash;        // callback functions associated with message types
55                 std::mutex*     gate;                                   // overall mutex should we need searialisation
56                 bool            ok_2_run;
57                 bool            callbacks = false;              // true if callbacks are defined
58                 void*           mrc;                                    // message router context
59                 char*           listen_port;                    // port we ask msg router to listen on
60
61         public:
62                 // -- constants which need an instance; that happens as a global in the .cpp file (wtf C++)
63                 static const int MAX_PAYLOAD;                   // max message size we'll handle
64                 static const int DEFAULT_CALLBACK;              // parm for add callback to set default
65
66                 Messenger( char* port, bool wait4table );       // builder
67                 ~Messenger();                                                           // destroyer
68
69                 void Add_msg_cb( int mtype, user_callback fun_name, void* data );
70                 std::unique_ptr<Message> Alloc_msg( int payload_size );                 // message allocation
71                 void Listen( );                                                                                                 // lisen driver
72                 std::unique_ptr<Message> Receive( int timeout );                                // receive 1 message
73                 void Stop( );                                                                                                   // force to stop
74                 void Release_mbuf( void* vmbuf );
75                 bool Wait_for_cts( int max_wait );
76 };
77
78 #endif