daily work
This commit is contained in:
parent
6383cfaf67
commit
3593290f71
|
@ -39,5 +39,5 @@ int GameParser::execute(void* arg)
|
|||
|
||||
void GameParser::cleanup()
|
||||
{
|
||||
LogSystem::log(LOG_DEBUG, "GameParser::cleanup()");
|
||||
// LogSystem::log(LOG_DEBUG, "GameParser::cleanup()");
|
||||
}
|
||||
|
|
|
@ -86,11 +86,11 @@ int main(int argc, char *argv[])
|
|||
GameParser parser(conf, scanner, modList);
|
||||
HlswServer server(conf, parser);
|
||||
|
||||
modList.reg(new ModHalfLife());
|
||||
modList.reg(new ModQ3Engine());
|
||||
modList.reg(new ModD3Engine());
|
||||
modList.reg(new ModGameSpy1());
|
||||
modList.reg(new ModGameSpy2());
|
||||
// modList.reg(new ModHalfLife());
|
||||
// modList.reg(new ModQ3Engine());
|
||||
// modList.reg(new ModD3Engine());
|
||||
// modList.reg(new ModGameSpy1());
|
||||
// modList.reg(new ModGameSpy2());
|
||||
|
||||
server.start();
|
||||
parser.start();
|
||||
|
|
|
@ -9,9 +9,43 @@
|
|||
#include "logging.h"
|
||||
#include "hlswserver.h"
|
||||
|
||||
#define HLSW_HEADER "\xFF\xFF\xFF\xFFHLSWLANSEARCH\x00"
|
||||
#define HLSW_HEADER_LEN 0x12
|
||||
#define HLSW_MASTER_PORT 7140
|
||||
static const char hlsw_header[] = "\xFF\xFF\xFF\xFFHLSWLANSEARCH";
|
||||
|
||||
HlswServer::HlswPacket::HlswPacket(HlswPacket* next)
|
||||
: next(next), count(0)
|
||||
{
|
||||
memcpy(data, hlsw_header, sizeof(hlsw_header));
|
||||
memset(data + sizeof(hlsw_header), 0, sizeof(data) - sizeof(hlsw_header));
|
||||
}
|
||||
|
||||
HlswServer::HlswPacket::~HlswPacket()
|
||||
{
|
||||
if (next)
|
||||
delete next;
|
||||
}
|
||||
|
||||
bool HlswServer::HlswPacket::addGame(void* ptr)
|
||||
{
|
||||
if (count < 140) {
|
||||
count++;
|
||||
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void HlswServer::HlswPacket::send(int socket, struct sockaddr_in* dst)
|
||||
{
|
||||
if (next)
|
||||
next->send(socket, dst);
|
||||
|
||||
if (sendto(socket, data, sizeof(hlsw_header) + count * 10, 0,
|
||||
(struct sockaddr *)dst, sizeof(*dst)) < 0) {
|
||||
LogSystem::log(LOG_WARN, "HlswPacket::send()");
|
||||
}
|
||||
}
|
||||
|
||||
HlswServer::HlswServer(Config& conf, GameList& slist)
|
||||
{
|
||||
|
@ -35,12 +69,13 @@ HlswServer::HlswServer(Config& conf, GameList& slist)
|
|||
return;
|
||||
}
|
||||
|
||||
out = new HlswPacket();
|
||||
pktlist = new HlswPacket(NULL);
|
||||
}
|
||||
|
||||
HlswServer::~HlswServer()
|
||||
{
|
||||
close(sock);
|
||||
delete pktlist;
|
||||
}
|
||||
|
||||
int HlswServer::execute(void* arg)
|
||||
|
@ -54,25 +89,40 @@ int HlswServer::execute(void* arg)
|
|||
/* auf clientanfrage warten */
|
||||
len = sizeof(src);
|
||||
ret = recvfrom(sock, buf, sizeof(buf), 0, (struct sockaddr *)&src, &len);
|
||||
if (ret != HLSW_HEADER_LEN) {
|
||||
|
||||
if (ret != sizeof(hlsw_header)) {
|
||||
LogSystem::log(LOG_NOTICE, "HlswServer: invalid packet");
|
||||
continue;
|
||||
}
|
||||
|
||||
/* testen ob es sich um ein HLSW anforderung handelt */
|
||||
if (memcmp(buf, HLSW_HEADER, HLSW_HEADER_LEN)) {
|
||||
if (memcmp(buf, hlsw_header, sizeof(hlsw_header))) {
|
||||
LogSystem::log(LOG_NOTICE, "HlswServer: not a hlsw packet");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (out != NULL && out->count > 0) {
|
||||
HlswPacket* pkt;
|
||||
for (pkt = out; pkt != NULL; pkt = pkt->next) {
|
||||
sendto(sock, pkt->data, pkt->getSize(), 0,
|
||||
(struct sockaddr *)&src, sizeof(src));
|
||||
}
|
||||
}
|
||||
mutex.lock();
|
||||
pktlist->send(sock, &src);
|
||||
mutex.unlock();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
HlswPacket* newlist;
|
||||
while (it->hasNext()) {
|
||||
Data* d = it->next();
|
||||
if (!newlist || !newlist->add(d))
|
||||
newlist = new HlswPacket(newlist);
|
||||
newlist->add(d);
|
||||
}
|
||||
}
|
||||
|
||||
mutex.lock();
|
||||
HlswPacket* oldlist = pktlist;
|
||||
pktlist = newlist;
|
||||
mutex.unlock();
|
||||
|
||||
delete oldlist;
|
||||
*/
|
||||
|
||||
|
|
22
hlswserver.h
22
hlswserver.h
|
@ -6,7 +6,7 @@
|
|||
#include "thread.h"
|
||||
#include "config.h"
|
||||
#include "gamelist.h"
|
||||
|
||||
#include "mutex.h"
|
||||
|
||||
class HlswServer : public Thread {
|
||||
public:
|
||||
|
@ -22,24 +22,20 @@ protected:
|
|||
private:
|
||||
class HlswPacket {
|
||||
public:
|
||||
HlswPacket() : next(0), count(0)
|
||||
{
|
||||
memset(data, 0, sizeof(data));
|
||||
}
|
||||
HlswPacket(HlswPacket* next);
|
||||
~HlswPacket();
|
||||
|
||||
int getSize()
|
||||
{
|
||||
return 12 + count * 10;
|
||||
}
|
||||
|
||||
void addGame(void* ptr) {}
|
||||
bool addGame(void* ptr);
|
||||
void send(int socket, struct sockaddr_in* dst);
|
||||
|
||||
private:
|
||||
HlswPacket* next;
|
||||
int count;
|
||||
char data[1412];
|
||||
char data[1418];
|
||||
};
|
||||
|
||||
HlswPacket* out;
|
||||
HlswPacket* pktlist;
|
||||
Mutex mutex;
|
||||
int sock;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue