Hi Bernard,
I'm using the following configuration:
OS: Ubuntu 11.04 32bits
Compiler: g++-4.4.3-1ubuntu1
ICE version: zeroc-ice-3.3.1-12
The program bellow was based on the PrintServer hello world.
Client.cpp
Code:
#include <Ice/Ice.h>
#include <UnitManager.h>
using namespace std;
using namespace Demo;
int
main(int argc, char* argv[])
{
int status = 0;
Ice::CommunicatorPtr ic;
UnitDynamicModel unit;
unit.id = "joao";
unit.timestamp = 0.0;
unit.latitude = 0.0;
unit.longitude = 0.0;
unit.height = 1000;
unit.altitude = 200;
unit.heading = 0.0;
unit.speed = 23.0;
unit.status = available;
try {
ic = Ice::initialize(argc, argv);
Ice::ObjectPrx base = ic->stringToProxy("MyUnitManager:udp -p 10001 -z");
// Get a datagram proxy.
//
Ice::ObjectPrx datagram = base->ice_batchDatagram()->ice_compress(true);
//Ice::ObjectPrx datagram = base->ice_batchDatagram();
//Ice::ObjectPrx datagram = base->ice_datagram();
UnitManagerPrx unitManager = UnitManagerPrx::uncheckedCast(datagram);
if (!unitManager)
throw "Invalid proxy";
while (1) {
for (int i=0; i<200; i++){
unit.timestamp = i;
unit.latitude += i;
unit.longitude += i + 2;
unit.height += i + 10;
unit.altitude += i + 20;
unit.heading = i % 360;
unit.speed += i;
unitManager->update(unit);
}
unitManager->ice_flushBatchRequests();
sleep(1);
}
} catch (const char* msg) {
cerr << msg << endl;
status = 1;
} catch (const Ice::NoEndpointException& e) {
cerr << "No endpoint for datagram invocations: " << e.proxy << endl;
} catch (const Ice::TwowayOnlyException&) {
cerr << "printString() is not oneway" << endl;
} catch (const Ice::Exception& ex) {
cerr << ex << endl;
status = 1;
}
if (ic)
ic->destroy();
return status;
}
UnitManager.ice
Code:
module Demo {
enum UnitStatus {available, designated, unavailable};
struct UnitDynamicModel {
string id; // unit name identification
long seq_num; // sequence number
double latitude; //ļæ½degrees
double longitude; //ļæ½degrees
int height; // meters
int altitude; // meters
float heading; // degrees
float speed; //ļæ½km/h
UnitStatus status; // enum
};
interface UnitManager {
idempotent void update(UnitDynamicModel unit);
};
};
Thanks for helping!