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:
adapteradapter 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.idid member provides the object identity for the current request.facetfacet member provides access to the facet for the request.operationoperation 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.)modemode member contains the invocation mode for the operation (Normal or Idempotent), which influences the retry behavior of the Ice run time.ctxctx member contains the current request context for the invocation.requestIdrequestId 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.encodingIf 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.