#include <iostream>
#include <cstdlib>
#include "../Ganef/client/clientframework.h"
#include "../Ganef/client/clientdata.h"
class MyClientData : public ClientData
{
private:
std::string name;
MyClientData * child;
public:
MyClientData(ClientFramework * f, ClientPacket * p) : ClientData(f,p)
{
name = p->readString();
p->readPtr(this, &child, f);
std::cout << "Constructed a new object of class: MyClientData" << std::endl;
std::cout << " - ID: " << getFrameworkId() << std::endl;
std::cout << " - Name: "<<name<<std::endl;
std::cout << " - Child: "<<(child ? child->name : "No child")<<std::endl;
}
virtual void updatePacket(ClientFramework * f, unsigned char updatetype, ClientPacket * p)
{
switch(updatetype)
{
case 42:
p->readPtr(this, &child, f);
std::cout << "Update of class: MyClientData" << std::endl;
std::cout << " - ID: " << getFrameworkId() << std::endl;
std::cout << " - Name: "<<name<<std::endl;
std::cout << " - Child: "<<(child ? child->name : "No child")<<std::endl;
break;
}
}
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;
int counter = 0;
while(is_running)
{
keepAlive();
if(counter++ % 50 == 0)
{
printPointerPointerMapDebug( );
}
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
{
public:
std::string name;
MyServerData * child;
public:
MyServerData(ServerFramework * fw, const std::string & name, MyServerData * child) : ServerData(fw, 10, false),name(name),child(child)
{
};
public:
virtual const unsigned int getClassId() const { return 0x424242; };
virtual void fillUpdatePacket(ServerPacket * packet, unsigned char type) const
{
switch(type)
{
case 42:
packet->writePtr(child);
break;
}
}
virtual void fillCreateObjectPacket(ServerPacket * packet) const
{
packet->writeString(name);
packet->writePtr(child);
}
virtual void clientPacket(Client * client, unsigned char type, ServerPacket * packet)
{
}
};
class TestServerFramework : public ServerFramework
{
MyServerData * m_pointing_obj;
MyServerData * m_pointee_obj;
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";
m_pointee_obj->sendCreateObject(client);
m_pointing_obj->sendCreateObject(client);
}
virtual void onClientDisconnected(Client * client)
{
std::cout << "Client: " << client->getId() << " disconnected\n";
}
virtual Client * createClient(const ipaddress &addr, int port)
{
return new Client(this, addr, port);
}
public:
void mainLoop()
{
std::cout << "TestServerFramework: Running\n";
m_pointee_obj = new MyServerData(this, "The Pointee Objects", 0);
m_pointing_obj = new MyServerData(this, "The Pointing Objects", m_pointee_obj);
int counter = 0;
while(true)
{
keepAlive();
if(getAllClients().size() > 0)
{
counter++;
if(counter == 100)
{
std::cout << "Unset the child of m_pointing_obj\n";
m_pointing_obj->child = 0;
m_pointing_obj->sendUpdateToAll(42, true);
}
}
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;
}