Expose the interface for AppServer registration to the current Session

This commit is contained in:
Pierre Pronchery 2014-05-08 01:08:50 +02:00
parent 850da6f9d0
commit 4b99ad9e4a
4 changed files with 19 additions and 6 deletions

View File

@ -48,5 +48,6 @@ char const * appserver_get_app(AppServer * appserver);
/* useful */
int appserver_loop(AppServer * appserver);
int appserver_register(AppServer * appserver, char const * name);
#endif /* !LIBAPP_APP_APPSERVER_H */

View File

@ -37,6 +37,7 @@
struct _AppServer
{
App * app;
char * name;
AppServerOptions options;
AppInterface * interface;
Event * event;
@ -71,6 +72,7 @@ AppServer * appserver_new_event(App * self, AppServerOptions options,
if((appserver = object_new(sizeof(*appserver))) == NULL)
return NULL;
appserver->app = self;
appserver->name = string_new(app);
appserver->options = options;
appserver->interface = appinterface_new_server(app);
appserver->helper.data = appserver;
@ -80,11 +82,11 @@ AppServer * appserver_new_event(App * self, AppServerOptions options,
appserver->transport = apptransport_new_app(ATM_SERVER,
&appserver->helper, app, name, appserver->event);
/* check for errors */
if(appserver->interface == NULL || appserver->transport == NULL
if(appserver->name == NULL || appserver->interface == NULL
|| appserver->transport == NULL
|| appserver->event == NULL
|| (((options & ASO_REGISTER) == ASO_REGISTER)
&& apptransport_server_register(
appserver->transport, app) != 0))
&& appserver_register(appserver, NULL) != 0))
{
appserver_delete(appserver);
return NULL;
@ -126,6 +128,14 @@ int appserver_loop(AppServer * appserver)
}
/* appserver_register */
int appserver_register(AppServer * appserver, char const * name)
{
return apptransport_server_register(appserver->transport,
appserver->name, name);
}
/* private */
/* appserver_helper_message */
static int _helper_message_call(AppServer * appserver, AppTransport * transport,

View File

@ -319,7 +319,8 @@ int apptransport_client_send(AppTransport * transport, AppMessage * message,
/* apptransport_server_register */
int apptransport_server_register(AppTransport * transport, char const * app)
int apptransport_server_register(AppTransport * transport, char const * app,
char const * name)
{
int ret;
int res = -1;
@ -330,7 +331,7 @@ int apptransport_server_register(AppTransport * transport, char const * app)
"Only servers can register to sessions");
if(transport->appclient != NULL)
appclient_delete(transport->appclient);
if((transport->appclient = appclient_new(NULL, session, NULL)) == NULL)
if((transport->appclient = appclient_new(NULL, session, name)) == NULL)
return -1;
ret = appclient_call(transport->appclient, (void **)&res, "register",
app, transport->name);

View File

@ -56,7 +56,8 @@ int apptransport_client_send(AppTransport * transport, AppMessage * message,
int acknowledge);
/* ATM_SERVER */
int apptransport_server_register(AppTransport * transport, char const * app);
int apptransport_server_register(AppTransport * transport, char const * app,
char const * name);
int apptransport_server_send(AppTransport * transport,
AppTransportClient * client, AppMessage * message);