To initialize and register your process with the initial ToolTalk session, your application needs to obtain a process identifier (procid). You can then obtain the file descriptor (fd) that corresponds to the newly initialized ToolTalk process.
The following code sample first initializes and registers the sample program with the ToolTalk service, and then obtains the corresponding file descriptor.
tt_open returns the procid for your process and sets it as the default procid; tt_fd returns a file descriptor for your current procid that will become active when a message arrives for your application.
Your application must call tt_open before other tt_ calls are made; otherwise, errors may occur. However, there are a few exceptions: tt_default_session_set and tt_X_session can be called before tt_open to control to which sesion you connect. tt_feature_required and tt_feature_enabled may be called when using ToolTalk in a Multi-Threaded environment. The ToolTalk filename mapping API calls, tt_file_netfile, tt_netfile_file, tt_host_file_netfile, and tt_host_netfile_file may be called without ever calling tt_open.
When tt_open is the first call made to the ToolTalk
service, it sets the initial session as the default session. The default session
identifier (sessid) is important to the delivery of ToolTalk
messages. The ToolTalk service automatically fills in the default sessid if
an application does not explicitly set the session message attribute. If the
message is scoped to TT_SESSION
,
the message will be delivered to all applications in the default session that
have registered interest in this type of message.
To register in a session other than the initial session, your program must find the name of the other session, set the new session as the default, and register with the ToolTalk service.
The following code sample shows how to join an X session named somehost:0 that is not your initial session.
char *my_session; char *my_procid; my_session = tt_X_session(“somehost:0”); tt_default_session_set(my_session); my_procid = tt_open(); ttfd = tt_fd(); |
The required calls must be in the specified order.
This call retrieves the name of the session associated with an X display server. tt_X_session() takes the argument char *xdisplay_name
where xdisplay_name is the name of an X display server (in this example, somehost:0).
This call sets the new session as the default session.
This call returns the procid for your process and sets it as the default procid.
This call returns a file descriptor for your current procid.
There may be cases when you want to send and receive your messages in different sessions. To register in multiple sessions, your program must find the identifiers of the sessions to which it wants to connect, set the new sessions, and register with the ToolTalk service.
The following code sample shows how to connect procid to sessid1, and procid2 to sessid2.
tt_default_session_set(sessid1); my_procid1 = tt_open(); tt_default_session_set(sessid2); my_procid2 = tt_open(); tt_fd2 = tt_fd(); |
You can then use tt_default_procid_set() to switch between the sessions.