Moved some code

This commit is contained in:
Kayne Ruse
2013-05-24 18:06:29 +10:00
parent e2fed23659
commit 0d3a69106f
5 changed files with 112 additions and 78 deletions
+36 -12
View File
@@ -68,17 +68,40 @@ void Lobby::Receive() {
while(netUtil->Receive()) { while(netUtil->Receive()) {
memcpy(&packet, netUtil->GetInData(), sizeof(PacketData)); memcpy(&packet, netUtil->GetInData(), sizeof(PacketData));
switch(packet.type) { switch(packet.type) {
// case PacketList::NONE:
// //
// break;
// case PacketList::PING:
// //
// break;
case PacketList::PONG: case PacketList::PONG:
PushServer(&packet); PushServer(&packet);
break; break;
// case PacketList::JOINREQUEST:
// //
// break;
case PacketList::JOINCONFIRM: case PacketList::JOINCONFIRM:
//TODO: enter the game PacketData p;
PacketData jc; memcpy(&p, netUtil->GetInData(), sizeof(PacketData));
memcpy(&jc, netUtil->GetInData(), sizeof(PacketData)); *playerID = p.joinConfirm.playerID;
*playerID = jc.joinConfirm.playerID;
netUtil->Bind(&netUtil->GetInPacket()->address, 0); netUtil->Bind(&netUtil->GetInPacket()->address, 0);
SetNextScene(SceneList::INGAME); SetNextScene(SceneList::INGAME);
break; break;
// case PacketList::DISCONNECT:
// //
// break;
// case PacketList::SYNCHRONIZE:
// //
// break;
// case PacketList::NEWPLAYER:
// //
// break;
// case PacketList::DELETEPLAYER:
// //
// break;
// case PacketList::MOVEMENT:
// //
// break;
} }
} }
} }
@@ -155,10 +178,11 @@ void Lobby::KeyUp(SDL_KeyboardEvent const& key) {
void Lobby::PingNetwork() { void Lobby::PingNetwork() {
//ping the network //ping the network
PacketData packet; PacketData p;
packet.type = PacketList::PING; p.type = PacketList::PING;
netUtil->Send("255.255.255.255", configUtil->Integer("server.port"), reinterpret_cast<void*>(&packet), sizeof(PacketData)); netUtil->Send("255.255.255.255", configUtil->Integer("server.port"), reinterpret_cast<void*>(&p), sizeof(PacketData));
//reset the server list //reset the server list
//TODO: enable this
// serverVector.clear(); // serverVector.clear();
} }
@@ -173,9 +197,9 @@ void Lobby::JoinRequest(ServerData* server) {
if (!server) { if (!server) {
return; return;
} }
PacketData packet; PacketData p;
packet.type = PacketList::JOINREQUEST; p.type = PacketList::JOINREQUEST;
snprintf(packet.joinRequest.handle, PACKET_STRING_SIZE, "%s", configUtil->CString("handle")); snprintf(p.joinRequest.handle, PACKET_STRING_SIZE, "%s", configUtil->CString("handle"));
snprintf(packet.joinRequest.avatar, PACKET_STRING_SIZE, "%s", configUtil->CString("avatar")); snprintf(p.joinRequest.avatar, PACKET_STRING_SIZE, "%s", configUtil->CString("avatar"));
netUtil->Send(&server->address, reinterpret_cast<void*>(&packet), sizeof(PacketData)); netUtil->Send(&server->address, reinterpret_cast<void*>(&p), sizeof(PacketData));
} }
+10 -10
View File
@@ -8,20 +8,20 @@
#define PACKET_STRING_SIZE 100 #define PACKET_STRING_SIZE 100
enum class PacketList { enum class PacketList {
NONE, NONE = 0,
//connections //connections
PING, PING = 1,
PONG, PONG = 2,
JOINREQUEST, JOINREQUEST = 3,
JOINCONFIRM, JOINCONFIRM = 4,
DISCONNECT, DISCONNECT = 5,
//information control //information control
SYNCHRONIZE, SYNCHRONIZE = 6,
NEWPLAYER, NEWPLAYER = 7,
DELETEPLAYER, DELETEPLAYER = 8,
MOVEMENT, MOVEMENT = 9,
}; };
//------------------------- //-------------------------
+3
View File
@@ -1,2 +1,5 @@
Each client needs to know about each other client now.
Have multiple players moving around the server at the same time Have multiple players moving around the server at the same time
keep the docs up to date!!!!! keep the docs up to date!!!!!
+63 -52
View File
@@ -16,12 +16,52 @@ void ServerApplication::Init() {
void ServerApplication::Proc() { void ServerApplication::Proc() {
while(running) { while(running) {
HandleInput(); //handle input
UpdateWorld(); while(netUtil.Receive()) {
HandleOutput(); PacketData packet;
memcpy(reinterpret_cast<void*>(&packet), netUtil.GetInData(), sizeof(PacketData));
switch(packet.type) {
// case PacketList::NONE:
// //
// break;
case PacketList::PING:
Ping(&packet);
break;
// case PacketList::PONG:
// //
// break;
case PacketList::JOINREQUEST:
JoinRequest(&packet);
break;
// case PacketList::JOINCONFIRM:
// //
// break;
case PacketList::DISCONNECT:
Disconnect(packet.disconnect.playerID);
break;
// case PacketList::SYNCHRONIZE:
// //
// break;
// case PacketList::NEWPLAYER:
// //
// break;
// case PacketList::DELETEPLAYER:
// //
// break;
case PacketList::MOVEMENT:
Movement(&packet);
break;
}
}
//update the world
delta.Calculate();
for (auto it : clientMap) {
it.second.Update(delta.GetDelta());
}
//handle output...
//TODO...
//debug
// running = false;
SDL_Delay(10); SDL_Delay(10);
} }
} }
@@ -31,56 +71,17 @@ void ServerApplication::Quit() {
SDLNet_Quit(); SDLNet_Quit();
} }
void ServerApplication::HandleInput() {
//accept new connections
//accept updates from the clients
//read the updates from the clients into internal containers
PacketData packet;
while(netUtil.Receive()) {
memcpy(reinterpret_cast<void*>(&packet), netUtil.GetInData(), sizeof(PacketData));
switch(packet.type) {
case PacketList::PING:
Ping(&packet);
break;
case PacketList::JOINREQUEST:
JoinRequest(&packet);
break;
case PacketList::DISCONNECT:
Disconnect(packet.disconnect.playerID);
break;
case PacketList::MOVEMENT:
Movement(&packet);
break;
}
}
}
void ServerApplication::UpdateWorld() {
//update internals ie.
// ai
// loot drops
delta.Calculate();
for (auto it : clientMap) {
it.second.Update(delta.GetDelta());
}
}
void ServerApplication::HandleOutput() {
//send all information to new connections
//selective updates to existing connectons
}
//------------------------- //-------------------------
//network commands //network commands
//------------------------- //-------------------------
void ServerApplication::Ping(PacketData* packet) { void ServerApplication::Ping(PacketData* packet) {
//respond to pings with the server name
if (!packet) { if (!packet) {
return; return;
} }
//respond to pings with the server name
packet->type = PacketList::PONG; packet->type = PacketList::PONG;
sprintf(packet->pong.metadata, "%s",configUtil.CString("servername")); snprintf(packet->pong.metadata,PACKET_STRING_SIZE, "%s",configUtil.CString("servername"));
netUtil.Send(&netUtil.GetInPacket()->address, reinterpret_cast<void*>(packet), sizeof(PacketData)); netUtil.Send(&netUtil.GetInPacket()->address, reinterpret_cast<void*>(packet), sizeof(PacketData));
} }
@@ -95,14 +96,16 @@ void ServerApplication::JoinRequest(PacketData* packet) {
clientMap[playerID].channel = netUtil.Bind(&netUtil.GetInPacket()->address, -1); clientMap[playerID].channel = netUtil.Bind(&netUtil.GetInPacket()->address, -1);
clientMap[playerID].handle = packet->joinRequest.handle; clientMap[playerID].handle = packet->joinRequest.handle;
clientMap[playerID].avatar = packet->joinRequest.avatar; clientMap[playerID].avatar = packet->joinRequest.avatar;
cout << "New player: " << playerID << endl;
//debug //debug
#ifdef DEBUG #ifdef DEBUG
cout << "playerID: " << clientMap[playerID].playerID << endl; cout << "New player:" << endl;
cout << "channel: " << clientMap[playerID].channel << endl; cout << "\tplayerID: " << clientMap[playerID].playerID << endl;
cout << "handle: " << clientMap[playerID].handle << endl; cout << "\tchannel: " << clientMap[playerID].channel << endl;
cout << "avatar: " << clientMap[playerID].avatar << endl; cout << "\thandle: " << clientMap[playerID].handle << endl;
cout << "\tavatar: " << clientMap[playerID].avatar << endl;
#else
cout << "New player: " << playerID << endl;
#endif #endif
//join confirm //join confirm
@@ -110,16 +113,24 @@ void ServerApplication::JoinRequest(PacketData* packet) {
p.type = PacketList::JOINCONFIRM; p.type = PacketList::JOINCONFIRM;
p.joinConfirm.playerID = clientMap[playerID].playerID; p.joinConfirm.playerID = clientMap[playerID].playerID;
netUtil.Send(clientMap[playerID].channel, &p, sizeof(PacketData)); netUtil.Send(clientMap[playerID].channel, &p, sizeof(PacketData));
//TODO: NewPlayer()
#ifdef DEBUG
cout << "current players: " << clientMap.size() << endl;
#endif
} }
void ServerApplication::Disconnect(int playerID) { void ServerApplication::Disconnect(int playerID) {
//TODO: Delete player
if (clientMap.find(playerID) == clientMap.end()) { if (clientMap.find(playerID) == clientMap.end()) {
return; return;
} }
cout << "disconnecting: " << playerID << endl; cout << "disconnecting: " << playerID << endl;
netUtil.Unbind(clientMap[playerID].channel); netUtil.Unbind(clientMap[playerID].channel);
clientMap.erase(playerID); clientMap.erase(playerID);
//TODO: Delete player
#ifdef DEBUG #ifdef DEBUG
cout << "current players: " << clientMap.size() << endl; cout << "current players: " << clientMap.size() << endl;
#endif #endif
-4
View File
@@ -21,10 +21,6 @@ public:
void Quit(); void Quit();
private: private:
void HandleInput();
void UpdateWorld();
void HandleOutput();
//network commands //network commands
void Ping(PacketData*); void Ping(PacketData*);
void JoinRequest(PacketData*); void JoinRequest(PacketData*);