Exemple #1
0
//--------------------------------------------------------------------------------------------------
le_msg_ServiceRef_t burgerServer_Start
(
    const char* serviceInstanceName,
    size_t maxRequests
)
//--------------------------------------------------------------------------------------------------
{
    le_msg_ProtocolRef_t protocolRef;
    le_msg_ServiceRef_t serviceRef;

    Context_t* contextPtr = malloc(sizeof(Context_t));
    LE_ASSERT(contextPtr != NULL);

    contextPtr->strPtr = ContextStr;
    contextPtr->maxRequestCount = maxRequests;
    contextPtr->requestCount = 0;

    protocolRef = le_msg_GetProtocolRef(BURGER_PROTOCOL_ID_STR, sizeof(burger_Message_t));
    serviceRef = le_msg_CreateService(protocolRef, serviceInstanceName);
    le_msg_SetServiceRecvHandler(serviceRef, MsgRecvHandler, contextPtr);
    LE_INFO("&ServiceOpenContextPtr = %p.", &ServiceOpenContextPtr);
    le_msg_AddServiceOpenHandler(serviceRef, NewSessionHandler, &ServiceOpenContextPtr);
    le_msg_AdvertiseService(serviceRef);

    return serviceRef;
}
Exemple #2
0
//--------------------------------------------------------------------------------------------------
void AdvertiseService
(
    void
)
{
    LE_DEBUG("======= Starting Server %s ========", SERVICE_INSTANCE_NAME);

    le_msg_ProtocolRef_t protocolRef;

    // Create the server data pool
    _ServerDataPool = le_mem_CreatePool("ServerData", sizeof(_ServerData_t));

    // Create safe reference map for handler references.
    // The size of the map should be based on the number of handlers defined for the server.
    // Don't expect that to be more than 2-3, so use 3 as a reasonable guess.
    _HandlerRefMap = le_ref_CreateMap("ServerHandlers", 3);

    // Start the server side of the service
    protocolRef = le_msg_GetProtocolRef(PROTOCOL_ID_STR, sizeof(_Message_t));
    _ServerServiceRef = le_msg_CreateService(protocolRef, SERVICE_INSTANCE_NAME);
    le_msg_SetServiceRecvHandler(_ServerServiceRef, ServerMsgRecvHandler, NULL);
    le_msg_AdvertiseService(_ServerServiceRef);

    // Register for client sessions being closed
    le_msg_AddServiceCloseHandler(_ServerServiceRef, CleanupClientData, NULL);

    // Need to keep track of the thread that is registered to provide this service.
    _ServerThreadRef = le_thread_GetCurrent();
}
Exemple #3
0
//--------------------------------------------------------------------------------------------------
static _ClientThreadData_t* InitClientThreadData
(
    const char* serviceInstanceName
)
{
    // Open a session.
    le_msg_ProtocolRef_t protocolRef;
    le_msg_SessionRef_t sessionRef;

    // The instance name must not be an empty string
    if ( serviceInstanceName[0] == '\0' )
    {
        LE_FATAL("Undefined client service instance name (Was StartClient() called?)");
    }

    protocolRef = le_msg_GetProtocolRef(PROTOCOL_ID_STR, sizeof(_Message_t));
    sessionRef = le_msg_CreateSession(protocolRef, serviceInstanceName);
    le_msg_SetSessionRecvHandler(sessionRef, ClientIndicationRecvHandler, NULL);
    le_msg_OpenSessionSync(sessionRef);

    // Store the client sessionRef in thread-local storage, since each thread requires
    // its own sessionRef.
    _ClientThreadData_t* clientThreadPtr = le_mem_ForceAlloc(_ClientThreadDataPool);
    clientThreadPtr->sessionRef = sessionRef;
    if (pthread_setspecific(_ThreadDataKey, clientThreadPtr) != 0)
    {
        LE_FATAL("pthread_setspecific() failed!");
    }

    return clientThreadPtr;
}
Exemple #4
0
//--------------------------------------------------------------------------------------------------
static void ConnectToServiceDirectory
(
    void
)
//--------------------------------------------------------------------------------------------------
{
    le_msg_ProtocolRef_t protocolRef = le_msg_GetProtocolRef(LE_SDTP_PROTOCOL_ID,
                                                             sizeof(le_sdtp_Msg_t));
    SessionRef = le_msg_CreateSession(protocolRef, LE_SDTP_SERVICE_NAME);

    le_msg_SetSessionCloseHandler(SessionRef, SessionCloseHandler, NULL);

    le_result_t result = msgSession_TryOpenSessionSync(SessionRef);
    if (result != LE_OK)
    {
        fprintf(stderr, "***ERROR: Can't communicate with the Sevice Directory.\n");
        fprintf(stderr,
                "Service Directory is unreachable.\n"
                "Perhaps the Service Directory is not running?\n");
        exit(EXIT_FAILURE);
    }
}
Exemple #5
0
//--------------------------------------------------------------------------------------------------
static le_msg_SessionRef_t ConnectToLogControlDaemon
(
    void
)
{
    le_msg_ProtocolRef_t protocolRef = le_msg_GetProtocolRef(LOG_CONTROL_PROTOCOL_ID,
                                                             LOG_MAX_CMD_PACKET_BYTES);
    le_msg_SessionRef_t sessionRef = le_msg_CreateSession(protocolRef, LOG_CONTROL_SERVICE_NAME);

    le_msg_SetSessionRecvHandler(sessionRef, MsgReceiveHandler, NULL);
    le_msg_SetSessionCloseHandler(sessionRef, SessionCloseHandler, NULL);

    le_result_t result = msgSession_TryOpenSessionSync(sessionRef);
    if (result != LE_OK)
    {
        printf("***ERROR: Can't communicate with the Log Control Daemon.\n");
        printf("Service Directory is unreachable.\n"
               "Perhaps the Service Directory is not running?\n");

        exit(EXIT_FAILURE);
    }

    return sessionRef;
}