Files
Hearts/Hearts/network_manager.cpp
Kayne Ruse 19d3f2d39d Imported stable version of my old Hearts game
Included the (now open source) KAGE files
Slightly modified function calls for compatability
Added personal note to README.md
Included VC++ project in the repo for simplicity
2013-01-16 23:37:40 +11:00

156 lines
3.8 KiB
C++

/* File Name: network_manager.cpp
* Copyright: (c) Kayne Ruse, all rights reserved.
* Author: Kayne Ruse
* Date: 21/6/2011
* Version: 3, Stable
* Description: The Network Manager deals with the networking for your game.
* Part of the KAGE Game Engine.
*/
#include <iostream>
#include "network_manager.h"
using namespace std;
using namespace KAGE;
//-------------------------
//Public access members
//-------------------------
NetworkManager::~NetworkManager() {
SDLNet_FreePacket(packet);
SDLNet_Quit();
}
int NetworkManager::Init(int port, int packetSize) {
if (SDLNet_Init() != 0) {
cout << "Error in NetworkManager::Init()" << endl;
cout << "Failed to initialise SDL_net" << endl;
return -1;
}
packet = SDLNet_AllocPacket(packetSize);
if (packet == NULL) {
cout << "Error in NetworkManager::Init()" << endl;
cout << "SDLNet_AllocPacket() returned NULL" << endl;
cout << "packetSize: " << packetSize << endl;
return -1;
}
socket = SDLNet_UDP_Open(port);
if (socket == NULL) {
cout << "Error in NetworkManager::Init()" << endl;
cout << "SDLNet_UDP_Open() returned NULL" << endl;
cout << "port: " << port << endl;
return -1;
}
return 0;
}
IPaddress* NetworkManager::Add(const char* name, char* ip, int port) {
if (Exists(name)) {
cout << "Error in NetworkManager::Add()" << endl;
cout << "An IPaddress of that name already exists" << endl;
cout << "name: " << name << endl;
cout << "ip: " << ip << endl;
cout << "port: " << port << endl;
return NULL;
}
IPaddress* add = new IPaddress;
if (SDLNet_ResolveHost(add,ip,port) != 0) {
cout << "Error in NetworkManager::Add(name,ip,port)" << endl;
cout << "Failed to resolve an IPaddress" << endl;
cout << "name: " << name << endl;
cout << "ip: " << ip << endl;
cout << "port: " << port << endl;
delete add;
return NULL;
}
return NamedManager::Add(name,add);
}
IPaddress* NetworkManager::Add(const char* name, IPaddress* address) {
if (Exists(name)) {
cout << "Error in NetworkManager::Add()" << endl;
cout << "An IPaddress of that name already exists" << endl;
cout << "name: " << name << endl;
return NULL;
}
return NamedManager::Add(name,address);
}
//-------------------------
//Network members
//-------------------------
int NetworkManager::Send(const char* name, const char* data) {
IPaddress* add = Get(name);
if (add == NULL) {
cout << "Error in NetworkManager::Send(name,data)" << endl;
cout << "No such IPaddress with that name" << endl;
cout << "name: " << name << endl;
return -2;
}
return Send(add,data);
}
int NetworkManager::Send(IPaddress* address, const char* data) {
//send this data to the address
strcpy_s((char*)packet->data,512,data);
packet->address = *address;
packet->len = strlen((char*)packet->data) + 1;
SDLNet_UDP_Send(socket,-1,packet);
return 0;
}
int NetworkManager::Send(char* ip, int port, const char* data) {
IPaddress* add = new IPaddress;
if (SDLNet_ResolveHost(add,ip,port) != 0) {
cout << "Error in NetworkManager::Send(ip,port,data)" << endl;
cout << "Failed to resolve an IPaddress" << endl;
cout << "ip: " << ip << endl;
cout << "port: " << port << endl;
cout << "data: " << data << endl;
delete add;
return -1;
}
int ret = Send(add,data);
delete add;
return ret;
}
void NetworkManager::SendAll(const char* data) {
for (MapType::iterator it = mapList.begin(); it != mapList.end(); it++)
Send(it->second,data);
}
int NetworkManager::Receive() {
return SDLNet_UDP_Recv(socket, packet);
}
//-------------------------
//Accessors and mutators
//-------------------------
const char* NetworkManager::Data() {
return (char*)packet->data;
}
bool NetworkManager::CheckData(const char* str) {
return !strcmp((char*)packet->data,str);
}
bool NetworkManager::CheckData(const char* str, int num) {
return !strncmp((char*)packet->data,str,num);
}
UDPpacket* NetworkManager::Packet() {
return packet;
}