Up to now, we have tacitly ignored the trailing parameter of type Ice::Current
that is passed to each skeleton operation on the server side. The Current
structure is defined as follows:
{zcode:slice} module Ice { local dictionary<string, string> Context; enum OperationMode { Normal, \Idempotent }; local struct Current { ObjectAdapter adapter; Connection con; Identity id; string facet; string operation; OperationMode mode; Context ctx; int requestId; EncodingVersion encoding; }; }; {zcode} |
Note that the Current
value provides access to information about the currently executing request to the implementation of an operation in the server:
adapter
adapter
member provides access to the object adapter via which the request is being dispatched. In turn, the adapter provides access to its communicator (via the getCommunicator
operation).con
The con
member provides information about the connection over which this request was received.id
id
member provides the object identity for the current request.facet
facet
member provides access to the facet for the request.operation
operation
member contains the name of the operation that is being invoked. Note that the operation name may indicate one of the operations on Ice::Object
, such as ice_ping
or ice_isA
. (ice_isA
is invoked if a client performs a checkedCast
.)mode
mode
member contains the invocation mode for the operation (Normal
or Idempotent
), which influences the retry behavior of the Ice run time.ctx
ctx
member contains the current request context for the invocation.requestId
requestId
member provides this ID. For oneway requests (which do not have replies), the request ID is 0
. For collocated requests (which do not use the Ice protocol), the request ID is -1
.encoding
If you implement your server such that it uses a separate servant for each Ice object, the contents of Current
are not particularly interesting. (You would most likely access Current
to read the adapter
member, for example, to activate or deactivate a servant.) However, as we will see in our discussion of default servants and servant locators, the Current
object is essential for more sophisticated (and more scalable) servant implementations.