2 * Copyright (c) 2018 Samsung Electronics Co., Ltd.
4 * Licensed under the Flora License, Version 1.1 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://floralicense.org/license/
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include "messages/message_manager.h"
18 #include "messages/message_factory.h"
19 #include "udp_connection.h"
20 #include "messages/reader.h"
21 #include "messages/writer.h"
22 #include "messages/clock.h"
24 #define DEFAULT_PORT 4004
29 udp_connection_t *conn;
30 message_factory_t *factory;
31 receive_message_cb cb;
35 static struct _message_mgr mgr;
37 static void msg_mgr_udp_receive_cb(const char *data, unsigned int size, const char *address, int port)
45 reader_init_static(&mgr.reader, data, size);
47 if (reader_read_int32(&mgr.reader, &message_type)) {
51 message = message_factory_create_message(mgr.factory, message_type);
56 if (message_deserialize(message, &mgr.reader)) {
57 message_destroy(message);
61 message_set_sender(message, address, port);
63 if (mgr.cb) mgr.cb(message, mgr.user_data);
65 message_destroy(message);
68 int message_manager_init()
74 mgr.conn = udp_connection_create(DEFAULT_PORT);
79 mgr.factory = message_factory_create();
81 message_manager_shutdown();
85 udp_connection_set_receive_cb(mgr.conn, msg_mgr_udp_receive_cb);
86 writer_init_sized(&mgr.writer, 256);
91 int message_manager_send_message(message_t *message)
100 writer_reset(&mgr.writer, 0);
102 type = message_get_type(message);
104 if (writer_write_int32(&mgr.writer, type)) {
108 message_get_receiver(message, &address, &port);
109 message_set_timestamp(message, clock_realtime_get());
111 if (message_serialize(message, &mgr.writer))
114 int err = udp_connection_send(mgr.conn,
126 void message_manager_set_receive_message_cb(receive_message_cb callback, void *user_data)
132 mgr.user_data = user_data;
135 void message_manager_shutdown()
140 writer_shutdown(&mgr.writer);
141 message_factory_destroy(mgr.factory);
142 udp_connection_destroy(mgr.conn);