1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
// ==============================================================
// This file is part of MegaGlest Shared Library (www.glest.org)
//
// Copyright (C) 2009-2010 Titus Tscharntke (info@titusgames.de) and
// Mark Vejvoda (mark_vejvoda@hotmail.com)
//
// You can redistribute this code and/or modify it under
// the terms of the GNU General Public License as published
// by the Free Software Foundation; either version 2 of the
// License, or (at your option) any later version
// ==============================================================
#ifndef _SHARED_PLATFORMCOMMON_IRCTHREAD_H_
#define _SHARED_PLATFORMCOMMON_IRCTHREAD_H_
#ifdef WIN32
#include <winsock2.h>
#include <winsock.h>
#endif
#include "base_thread.h"
#include <vector>
#include <string>
#include "leak_dumper.h"
// Special way to forward declare a typedef struct
struct irc_session_s;
typedef struct irc_session_s irc_session_t;
//
using namespace std;
namespace Shared { namespace PlatformCommon {
// =====================================================
// class IRCThreadThread
// =====================================================
enum IRCEventType {
IRC_evt_chatText = 0,
IRC_evt_exitThread = 1
};
void normalizeNick(char *nick);
class IRCCallbackInterface {
public:
virtual void IRC_CallbackEvent(IRCEventType evt, const char* origin, const char **params, unsigned int count) = 0;
virtual ~IRCCallbackInterface() {}
};
class IRCThread : public BaseThread
{
public:
static bool debugEnabled;
protected:
static const char *globalCacheContainerName;
std::vector<string> argv;
Mutex mutexIRCSession;
irc_session_t *ircSession;
string execute_cmd_onconnect;
//string password;
string username;
string channel;
string nick;
string playerName;
bool hasJoinedChannel;
Mutex mutexEventDataDone;
bool eventDataDone;
Mutex mutexNickList;
time_t lastNickListUpdate;
std::vector<string> eventData;
Mutex mutexIRCCB;
IRCCallbackInterface *callbackObj;
bool wantToLeaveChannel;
int irc_run_session(irc_session_t * session);
public:
IRCThread(const std::vector<string> &argv,IRCCallbackInterface *callbackObj);
virtual ~IRCThread();
virtual void execute();
virtual void signalQuit();
virtual bool shutdownAndWait();
static void setGlobalCacheContainerName(const char *name) { globalCacheContainerName = name; }
void setPlayerName(string value) { playerName = value; }
string getPlayerName() const { return playerName; }
bool getWantToLeaveChannel() const { return wantToLeaveChannel; }
void SendIRCCmdMessage(string target, string msg);
std::vector<string> getNickList();
bool isConnected(bool mutexLockRequired=true);
std::vector<string> GetIRCConnectedNickList(string target, bool waitForCompletion);
bool getEventDataDone();
void setEventDataDone(bool value);
bool getHasJoinedChannel() const { return hasJoinedChannel; }
void setHasJoinedChannel(bool value) { hasJoinedChannel=value; }
time_t getLastNickListUpdate() const { return lastNickListUpdate; }
void setLastNickListUpdate(time_t value) { lastNickListUpdate = value;}
string getChannel() const { return channel;}
string getNick() const { return nick;}
string getExecute_cmd_onconnect() const { return execute_cmd_onconnect; }
void setExecute_cmd_onconnect(string value) { execute_cmd_onconnect = value; }
std::vector<string> getArgs() const { return argv;}
Mutex * getMutexNickList() { return &mutexNickList; }
std::vector<string> & getCachedNickList() { return eventData; }
void setCachedNickList(std::vector<string> &list) { eventData = list; }
Mutex * getMutexIRCCB() { return &mutexIRCCB; }
IRCCallbackInterface * getCallbackObj(bool lockObj=true);
void setCallbackObj(IRCCallbackInterface *cb);
void joinChannel();
void leaveChannel();
void connectToHost();
void disconnect();
};
}}//end namespace
#endif
|