#include <iostream>
#include <cstdlib>
#include "../Ganef/client/clientframework.h"
#include "../Ganef/client/clientdata.h"
class MyClientData : public ClientData
{
private:
int x,y;
std::string name;
public:
MyClientData(ClientFramework * f, ClientPacket * p) : ClientData(f,p),x(0),y(0)
{
name = p->readString();
x = p->readInt32();
y = p->readInt32();
std::cout << "Constructed a new object of class: MyClientData" << std::endl;
std::cout << " - The new object has ID: " << getFrameworkId() << std::endl;
std::cout << " - And (x:"<<x<<",y:"<<y<<")" << std::endl;
}
virtual void updatePacket(ClientFramework * f, unsigned char updatetype, ClientPacket * p)
{
switch(updatetype)
{
case 42:
x = p->readInt32();
y = p->readInt32();
break;
}
}
void print() const
{
std::cout << "MyClientData["<<name<<"](x:"<<x<<",y:"<<y<<")" << std::endl;
}
static ClientData * constructMyClientData(ClientFramework * f, ClientPacket * p)
{
return new MyClientData(f,p);
}
};
class TestClientFramework : public ClientFramework
{
private:
bool is_running;
std::string server_hostname;
public:
TestClientFramework(const std::string & server_hostname) : ClientFramework(int(0)),server_hostname(server_hostname)
{
registerConstructor(0x424242, MyClientData::constructMyClientData);
}
~TestClientFramework()
{
};
protected:
virtual void writeHandshakeInitMessage( ClientPacket * fp ){}
virtual void onHandshakingDiscontinue( ClientPacket * fp ){}
virtual bool onHandshakeDescription( ClientPacket * fp, ClientPacket * reply )
{
return true;
}
virtual void onDisconnect( ) { std::cout << "Disconnected\n"; }
virtual void onConnect( ){ std::cout << "Connected\n"; }
public:
void mainLoop( )
{
std::cout << "Connecting to: " << server_hostname <<":"<< 8000<< std::endl;
initServerConnection(server_hostname, 8000);
is_running = true;
while(is_running)
{
keepAlive();
std::map<unsigned int, ClientData *>::const_iterator it;
for(it = getClientDataObjects().begin(); it != getClientDataObjects().end(); ++it)
{
MyClientData * dataobj = dynamic_cast<MyClientData *>(it->second);
if(dataobj)
{
dataobj->print();
}
}
psleep(50);
}
}
};
int main(int argc, char *argv[])
{
std::string server_host("localhost");
if(argc > 1)
server_host = argv[1];
TestClientFramework app(server_host);
app.mainLoop();
}
#include <iostream>
#include <cstdlib>
#include <vector>
#include "../Ganef/server/serverframework.h"
class MyServerData : public ServerData
{
private:
int x,y;
std::string name;
public:
MyServerData(ServerFramework * fw, const std::string & name) : ServerData(fw, 10, false),name(name)
{
x = 0;
y = 0;
};
public:
virtual const unsigned int getClassId() const { return 0x424242; };
virtual void fillUpdatePacket(ServerPacket * packet, unsigned char type) const
{
switch(type)
{
case 42:
packet->writeInt32(x);
packet->writeInt32(y);
break;
}
}
virtual void fillCreateObjectPacket(ServerPacket * packet) const
{
packet->writeString(name);
packet->writeInt32(x);
packet->writeInt32(y);
}
virtual void clientPacket(Client * client, unsigned char type, ServerPacket * packet)
{
}
void move(int dx, int dy)
{
x += dx;
y += dy;
}
};
class TestServerFramework : public ServerFramework
{
public:
TestServerFramework() : ServerFramework(8000)
{
}
~TestServerFramework()
{
}
protected:
virtual bool onInitialHandshake(ServerPacket * handshake, ServerPacket * reply)
{
return true;
}
virtual void onClientConnected(Client * client)
{
std::cout << "Client: " << client->getId() << " connected\n";
}
virtual void onClientDisconnected(Client * client)
{
std::cout << "Client: " << client->getId() << " disconnected\n";
}
virtual Client * createClient(const ipaddress &addr, int port)
{
Client * client = new Client(this, addr, port);
std::map<unsigned int, ServerData *>::const_iterator it;
for(it = getServerDataObjects().begin(); it != getServerDataObjects().end(); ++it)
{
ServerData * s_data = it->second;
s_data->sendCreateObject(client);
}
return client;
}
public:
void mainLoop()
{
std::cout << "TestServerFramework: Running\n";
MyServerData mydata1(this, "MyData1");
MyServerData mydata2(this, "MyData2");
MyServerData mydata3(this, "MyData3");
while(true)
{
keepAlive();
mydata1.move(2,1);
mydata2.move(1,4);
mydata3.move(3,2);
mydata1.sendUpdateToAll(42, false);
mydata2.sendUpdateToAll(42, false);
mydata3.sendUpdateToAll(42, false);
psleep(100);
}
}
};
int main(int argc, char *argv[])
{
try
{
TestServerFramework framework;
framework.start();
framework.mainLoop();
}
catch(FrameworkError *err)
{
std::cout << "FrameworkError:" << err->msg << std::endl;
}
catch(PacketError *err)
{
std::cout << "PacketError:" << err->msg << std::endl;
}
return EXIT_SUCCESS;
}