ctaAttachContext

Allows an application to attach to an existing context.

Prototype

DWORD ctaAttachContext ( CTAQUEUEHD ctaqueuehd, unsigned userid, char *descriptor, CTAHD *ctahd)

Argument

Description

ctaqueuehd

Event queue handle returned by ctaCreateQueue.

userid

User-specified value repeated in all events returned for this context.

descriptor

Pointer to a context descriptor created by or obtained from another application.

ctahd

Pointer to a returned context handle.


Return values

Return value

Description

SUCCESS

 

CTAERR_BAD_ARGUMENT

Supplied context name is unavailable.

CTAERR_INCOMPATIBLE_SERVICES

On the server on which the context is created, at least one of the available services conflicts with the same service that is open on another server. A client application can use only one instance of a service at a time.

CTAERR_INVALID_CTAHD

An invalid context handle was passed as an argument to a function, or the context was destroyed by another thread.

CTAERR_INVALID_CTAQUEUEHD

An invalid queue handle was passed as an argument to a function, or the queue was destroyed by another thread.

CTAERR_NOT_IMPLEMENTED

This function is not available in the execution mode associated with the specified context.

CTAERR_NOT_INITIALIZED

Natural Access is not initialized. Call ctaInitialize first.

CTAERR_SVR_COMM

Server communication error.


Details

ctaAttachContext enables applications using local or remote instances of Natural Access Server (ctdaemon) to share contexts. The application creating the context must either specify the descriptor with ctaCreateContextEx or obtain the descriptor with ctaGetObjDescriptor. The application passes the descriptor to another application, which can then use ctaAttachContext and the descriptor to attach to the context.

The attaching application can use the returned ctahd to open services on the specified context, or invoke functions for service instances already opened on the context. Whether the attaching application can immediately use the service instances opened on the context is determined by the context access mode set with ctaCreateContextEx.

For more information, see Sharing contexts.

See also

ctaOpenServices, ctaSetEventSources

Example

typedef struct
{
    unsigned   line;
    unsigned   ag_board;   
    unsigned   mvip_stream;
    unsigned   mvip_slot;
    CTAQUEUEHD ctaqueuehd;
    CTAHD      ctahd;
    VCEHD      demovh;
    SWIHD      demoswihd;
} DEMOCONTEXT ;
/* 
 * Attach a Natural Access context with its own queue, storing handles in 
 * demo context (cx) which was created by the caller. 
 */
void DemoAttachContext(unsigned line, DEMOCONTEXT *cx)
{
    char cxname[12];
    int ret;

    cx->line = line;

    /* Context name will be printed in all trace records for this
     * context 
     */
    sprintf(cxname, "DEMOCX%04d", cx->line);

    /* Create queue and attach all service managers */
    ctaCreateQueue( NULL, 0, &(cx->ctaqueuehd) );

    /* Attach context with address of demo context as userid */
    ret = ctaAttachContext( NULL, cx->ctaqueuehd, (unsigned) cx, 
                      cxname, &(cx->ctahd) );
    if (SUCCESS != ret)
         printf("Unable to attach context\n");
}