Top | ![]() |
![]() |
![]() |
![]() |
void | infd_session_proxy_subscribe_to () |
void | infd_session_proxy_unsubscribe () |
gboolean | infd_session_proxy_has_subscriptions () |
gboolean | infd_session_proxy_is_subscribed () |
gboolean | infd_session_proxy_is_idle () |
gboolean | idle | Read |
InfIo * | io | Read / Write / Construct Only |
InfCommunicationHostedGroup * | subscription-group | Read / Write / Construct Only |
void | add-subscription | Run Last |
gboolean | reject-user-join | Run Last |
void | remove-subscription | Run Last |
InfdSessionProxy is a manager for InfSession that is specific for the server side. The InfdSessionProxy manages exactly one InfSession. It is usually created by InfdDirectory when the content of a node is requested.
InfdSessionProxy allows to perform server-specific operations for the session it manages, such as joining a local user, or removing a connection from the list of subscribed connections. In addition it handles requests made by its counterpart, InfcSessionProxy, for the client side, such as remote user joins.
InfdSessionProxy implements the InfSessionProxy interface, which can be used to access the underlying InfSession or to join a local user.
void infd_session_proxy_subscribe_to (InfdSessionProxy *proxy
,InfXmlConnection *connection
,guint seq_id
,gboolean synchronize
);
Subscribes connection
to proxy
's session. The first thing that will be
done is a synchronization (see inf_session_synchronize_to()
). Then, all
changes to the session are propagated to connection
.
seq_id
should be a unique number for connection
, and the same number must
be passed on the client side to the InfcSessionProxy object. Normally
InfdDirectory and InfcBrowser take care of choosing an appropriate
sequence identifier.
Normally, you want to set synchronize
to TRUE
in which case the whole
session state will be synchronized to connection
(within the subscription
group). However, if for whatever reason the remote site already has a
copy of the session, then you may set synchronize
to FALSE
to skip
synchronization. This happens for example for newly created documents, or
when the remote site synchronized the local site and wants to be
initially subscribed.
If proxy
's session is not in INF_SESSION_RUNNING
status, but in
INF_SESSION_SYNCHRONIZING
, then connection
must be the connection that
synchronizes the session and synchronize
needs to be set to FALSE
. This
causes the synchronizing connection to initially be subscribed. This
needs to be called directly after having created the session proxy (i.e.
without returning to the main loop before) so that the synchronization
connection is added to the subscription group for synchronization.
Otherwise a subscription can only be initiated if proxy
's session is in
state INF_SESSION_RUNNING
.
proxy |
||
connection |
A InfXmlConnection that is not yet subscribed. |
|
seq_id |
The sequence identifier for |
|
synchronize |
If |
void infd_session_proxy_unsubscribe (InfdSessionProxy *proxy
,InfXmlConnection *connection
);
Unsubscribes a subscribed connection from proxy
's session. This will
prevent all users joined via connection
to continue modifying the
session's buffer, and it will cancel ongoing synchronization to
connection
, if not yet finished.
gboolean
infd_session_proxy_has_subscriptions (InfdSessionProxy *proxy
);
Returns whether there are subscribed connections to the session.
gboolean infd_session_proxy_is_subscribed (InfdSessionProxy *proxy
,InfXmlConnection *connection
);
Returns TRUE
when connection
is subscribed to the session and FALSE
otherwise.
gboolean
infd_session_proxy_is_idle (InfdSessionProxy *proxy
);
Returns whether the session is idle. The session is considered idle when there are no subscriptions and no synchronizations (in either direction).
struct InfdSessionProxy;
InfdSessionProxy is an opaque data type. You should only access it via the public API functions.
struct InfdSessionProxyClass { /* Signals */ void (*add_subscription)(InfdSessionProxy* proxy, InfXmlConnection* connection, guint seq_id); void (*remove_subscription)(InfdSessionProxy* proxy, InfXmlConnection* connection); gboolean (*reject_user_join)(InfdSessionProxy* proxy, InfXmlConnection* connection, const GArray* user_properties, InfUser* rejoin_user); };
This structure contains the default signal handlers of the InfdSessionProxy class.
Default signal handler for the “add-subscription” signal. |
||
Default signal handler for the “remove-subscription” signal. |
||
Default signal handler for the “reject-user-join” signal. |
“idle”
property “idle” gboolean
The session is considered idle when are no subscriptions and no synchronizations.
Owner: InfdSessionProxy
Flags: Read
Default value: TRUE
“io”
property“io” InfIo *
The InfIo object for scheduling events.
Owner: InfdSessionProxy
Flags: Read / Write / Construct Only
“subscription-group”
property“subscription-group” InfCommunicationHostedGroup *
The communication manager group of subscribed connections.
Owner: InfdSessionProxy
Flags: Read / Write / Construct Only
“add-subscription”
signalvoid user_function (InfdSessionProxy *proxy, InfXmlConnection *connection, guint seq_id, gpointer user_data)
Emitted every time a connection is subscribed to the session.
proxy |
The InfdSessionProxy emitting the signal. |
|
connection |
The subscribed InfXmlConnection. |
|
seq_id |
The sequence identifier for |
|
user_data |
user data set when the signal handler was connected. |
Flags: Run Last
“reject-user-join”
signalgboolean user_function (InfdSessionProxy *proxy, InfXmlConnection *connection, GArray *user_properties, InfUser *rejoin_user, gpointer user_data)
This signal is emitted before every remote user join. The signal handler
can return TRUE
in which case the InfdSessionProxy does not allow the
user join with INF_REQUEST_ERROR_NOT_AUTHORIZED
error. If there is more
than one signal handler, then if one of them returns TRUE
the user
join is rejected.
The user_properties
parameter is a GArray of GParameter values. It
contains the construct properties for the InfUser object that would be
created if the user join is not rejected. It must not be modified, but
it can be used to make the decision whether to reject the user join or
not dependent on the parameters, such as allowing the user join only if
the user has a predefined name. The function
inf_session_lookup_user_property()
can be used to look up a named
parameter in the array.
proxy |
The InfdSessionProxy emitting the signal. |
|
connection |
A subscribed InfXmlConnection requesting the user join. |
|
user_properties |
An array with the properties for the new user. |
|
rejoin_user |
The existing unavailable user that is being rejoined, or
|
|
user_data |
user data set when the signal handler was connected. |
Flags: Run Last
“remove-subscription”
signalvoid user_function (InfdSessionProxy *proxy, InfXmlConnection *connection, gpointer user_data)
Emitted every time a connection is unsubscribed to the session, or a subscription is removed because the session is closed.
proxy |
The InfdSessionProxy emitting the signal. |
|
connection |
The unsubscribed InfXmlConnection. |
|
user_data |
user data set when the signal handler was connected. |
Flags: Run Last