librpc
server.h
Go to the documentation of this file.
1 /*
2  * Copyright 2015-2017 Two Pore Guys, Inc.
3  * All rights reserved
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted providing that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
18  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
22  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
23  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24  * POSSIBILITY OF SUCH DAMAGE.
25  *
26  */
27 
28 #ifndef LIBRPC_SERVER_H
29 #define LIBRPC_SERVER_H
30 
31 #include <stdbool.h>
32 #include <rpc/service.h>
33 #include <rpc/connection.h>
34 
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44 
48 struct rpc_server;
49 
53 typedef struct rpc_server *rpc_server_t;
54 
55 typedef enum rpc_server_event
56 {
57  RPC_SERVER_CLIENT_CONNECT,
58  RPC_SERVER_CLIENT_DISCONNECT,
59 } rpc_server_event_t;
60 
64 typedef void (^rpc_server_ev_handler_t)(_Nonnull rpc_connection_t conn,
65  rpc_server_event_t event);
66 
70 #define RPC_SERVER_HANDLER(_fn, _arg) \
71  ^(rpc_connection_t _conn, rpc_server_event_t _event) { \
72  _fn(_arg, _conn, _event); \
73  }
74 
82 _Nullable rpc_server_t rpc_server_create(const char *_Nonnull uri,
83  _Nonnull rpc_context_t context);
84 
92 _Nullable rpc_server_t rpc_server_find(const char *_Nonnull uri,
93  _Nonnull rpc_context_t context);
94 
103 void rpc_server_pause(_Nonnull rpc_server_t server);
104 
113 _Nullable rpc_server_t rpc_server_create_ex(const char *_Nonnull uri,
114  _Nonnull rpc_context_t context, _Nullable rpc_object_t params);
115 
124 void rpc_server_resume(_Nonnull rpc_server_t server);
125 
133 void rpc_server_broadcast_event(_Nonnull rpc_server_t server,
134  const char *_Nullable path, const char *_Nullable interface,
135  const char *_Nonnull name, _Nullable rpc_object_t args);
136 
142 void rpc_server_set_event_handler(_Nonnull rpc_server_t server,
143  _Nullable rpc_server_ev_handler_t handler);
144 
151 int rpc_server_close(_Nonnull rpc_server_t server);
152 
161 int rpc_server_socket_activate(_Nonnull rpc_context_t context,
162  _Nonnull rpc_server_t *_Nonnull *_Nonnull servers,
163  _Nullable rpc_object_t *_Nullable rest);
164 
165 #ifdef __cplusplus
166 }
167 #endif
168 
169 #endif /* LIBRPC_SERVER_H */
void rpc_server_set_event_handler(_Nonnull rpc_server_t server, _Nullable rpc_server_ev_handler_t handler)
struct rpc_object * rpc_object_t
Definition: object.h:73
void rpc_server_broadcast_event(_Nonnull rpc_server_t server, const char *_Nullable path, const char *_Nullable interface, const char *_Nonnull name, _Nullable rpc_object_t args)
_Nullable rpc_server_t rpc_server_create_ex(const char *_Nonnull uri, _Nonnull rpc_context_t context, _Nullable rpc_object_t params)
struct rpc_connection * rpc_connection_t
Definition: connection.h:94
struct rpc_server * rpc_server_t
Definition: server.h:53
void rpc_server_resume(_Nonnull rpc_server_t server)
struct rpc_context * rpc_context_t
Definition: service.h:75
int rpc_server_close(_Nonnull rpc_server_t server)
_Nullable rpc_server_t rpc_server_find(const char *_Nonnull uri, _Nonnull rpc_context_t context)
_Nullable rpc_server_t rpc_server_create(const char *_Nonnull uri, _Nonnull rpc_context_t context)
void(^ rpc_server_ev_handler_t)(_Nonnull rpc_connection_t conn, rpc_server_event_t event)
Definition: server.h:64
void rpc_server_pause(_Nonnull rpc_server_t server)
int rpc_server_socket_activate(_Nonnull rpc_context_t context, _Nonnull rpc_server_t *_Nonnull *_Nonnull servers, _Nullable rpc_object_t *_Nullable rest)