Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Current »


 
Reads the version info of an EDMserver or an EDMapplicationServer process from a thin EDMclient. Two versioned modules constitute the EDMserver and the EDMapplication server; the server application it self, and the library comprising all the EDMInterface/C API functions. For a thin EDMclient to work properly with a Server Room they must be based on a compatible version of the _EDMInteface._
EDMapplicationServer processes are basically thick EDMclients that are connected to the _EDMserver._ They are identified by their clientIds which may be determined by a call to the edmiRemoteWhoIsOn function (see the example below). If the clientId argument is set to zero, this function will return version info for the _EDMserver_
A version is identified by an integer number and a corresponding textual sting. The version info returned from this function might be;
 

Argument

Return Value

serverVersion

20050308

localEdmiVersion

20050308

serverVersionText

EXPRESS Data Manager Server Version 4.7.041b Dec 15 2005

localEdmiVersionText

EXPRESS Data Manager fat client system - Version 4.7.041b Dec 15 2005

 
Header:
#include "sdai.h"
Prototype:
EdmiError edmiRemoteVersion(SdaiServerContext serverContextId,
                             SdaiClientId      clientId,
                             SdaiInteger       *serverVersion,
                             SdaiInteger       *localEdmiVersion,
                             SdaiString        *serverVersionText,
                             SdaiString        *localEdmiVersionText,
                             SdaiInvocationId  *edmiInvocationId);
 
Arguments:

serverContextId

Context identification, from edmiDefineServerContext

clientId

The clientId that identifies the EDMapplicationServer process for which to return version info. If this argument is zero, the version info for the _EDMserver_ will be returned

serverVersion

A variable that will receive an integer number that identifies the version of the EDMserver{_}_ or the EDMapplicationServer.

localEdmiVersion

A variable that will receive an integer number that identifies the version of the EDMInterface{_}_ library used by the EDMserver{_}_ or the EDMapplicationServer.

serverVersionText

A variable that will receive a textual string that identifies the version of the EDMserver{_}_ or the EDMapplicationServer.

localEdmiVersionText

A variable that will receive a textual string that identifies the version of the EDMInterface library used by the EDMserver or the EDMapplicationServer.

edmiInvocationId

Currently not used.

Returns:
A completion code of datatype EdmiError is the returned function value. The completion code has the following values:
Completion code = 0 : Operation successfully performed.
Completion code != 0: Error in operation. Completion code is an _EDMinterface_ error code. Use edmiGetErrorText to get the error text corresponding to the error code.
Example:
/* Check that all the EDMapplicationServers
use the same version of the EDMInterface 
as does the EDMserver */ 
int i;
EdmiError rstat;
SdaiServerContext suContext;
tEdmiWhoIsOnServer *pWhoIsOn;
tEdmiConnection *connect;
SdaiInteger nConnect, nAppServer;
SdaiInteger versionId, edmiVersionId;
SdaiString version, edmiVersion;
SdaiString hostName, clientName;
 
/* Define Remote Server Context
for the superuser */ 
rstat = edmiDefineServerContext("SuperUserContext",
"superuser", NULL, "xfx56kl9",
"TCP", "9090", "MyServerHost",
NULL, NULL, NULL, NULL, NULL, &suContext); 
 
/* Get the version info for the EDMserver */
rstat = edmiRemoteVersion(suContext, 0,
&versionId, &edmiVersionId,  
&version, &edmiVersion, NULL); 
 
/* We do not need version strings for this */
edmiFree(version);
edmiFree(edmiVersion);
 
/* Find all connected thick EDMclients */
rstat = edmiRemoteWhoIsOn(suContext, &nConnect, &pWhoIsOn, NULL);
connect = pWhoIsOn->connections;
nAppServer = 0;
for (i=0;i<nConnect;i++) {
rstat = edmiRemoteGetClientNames(suContext, connect->clientId,
&hostName, &clientName, NULL); 
if (strstr(clientName, "EDMapplicationServer-") && 
strstr(clientName, " Main Client") ) { 
SdaiInteger _edmiVersionId; 
 
/* Get the version info for 
the EDMapplicationServer */ 
rstat = edmiRemoteVersion(suContext, connect->clientId,  
&versionId, &_edmiVersionId,  
&version, &edmiVersion, NULL); 
 
/* We do not need version strings for this */ 
edmiFree(version); 
edmiFree(edmiVersion); 
 
/* Compare the EDMInterface library versions */ 
if (edmiVersionId != _edmiVersionId) { 
printf("\nWARNING: The EDMapplicationServer"); 
printf(" with client Id %d", connect->clientId); 
printf(" running at host %s", hostName); 
printf(" uses an EDMInterface library with a"); 
printf(" version number (%d) that does", _edmiVersionId); 
printf(" not match that of the EDMserver (%d)", edmiVersionId); 


edmiFree(hostName); 
edmiFree(clientName); 
}
. . .

  • No labels