IRC polishing work - kicks are shown, error messages are displayed. Rename somehow buggy still.
This commit is contained in:
@@ -129,5 +129,9 @@ void ServerGuiWrapper::SignalNetServerError(int errorID, int osErrorID) { if (my
|
||||
void ServerGuiWrapper::SignalIrcConnect(const string &server) { if (myIrccb) myIrccb->SignalIrcConnect(server); }
|
||||
void ServerGuiWrapper::SignalIrcSelfJoined(const string &nickName, const std::string &channel) { if (myIrccb) myIrccb->SignalIrcSelfJoined(nickName, channel); }
|
||||
void ServerGuiWrapper::SignalIrcPlayerJoined(const string &nickName) { if (myIrccb) myIrccb->SignalIrcPlayerJoined(nickName); }
|
||||
void ServerGuiWrapper::SignalIrcPlayerChanged(const string &oldNick, const string &newNick) { if (myIrccb) myIrccb->SignalIrcPlayerChanged(oldNick, newNick); }
|
||||
void ServerGuiWrapper::SignalIrcPlayerKicked(const string &nickName, const string &byWhom, const string &reason) { if (myIrccb) myIrccb->SignalIrcPlayerKicked(nickName, byWhom, reason); }
|
||||
void ServerGuiWrapper::SignalIrcPlayerLeft(const string &nickName) { if (myIrccb) myIrccb->SignalIrcPlayerLeft(nickName); }
|
||||
void ServerGuiWrapper::SignalIrcChatMsg(const string &nickName, const string &msg) { if (myIrccb) myIrccb->SignalIrcChatMsg(nickName, msg); }
|
||||
void ServerGuiWrapper::SignalIrcError(int errorCode) { if (myIrccb) myIrccb->SignalIrcError(errorCode); }
|
||||
void ServerGuiWrapper::SignalIrcServerError(int errorCode) {if (myIrccb) myIrccb->SignalIrcServerError(errorCode); }
|
||||
|
||||
@@ -114,8 +114,12 @@ public:
|
||||
void SignalIrcConnect(const std::string &server);
|
||||
void SignalIrcSelfJoined(const std::string &nickName, const std::string &channel);
|
||||
void SignalIrcPlayerJoined(const std::string &nickName);
|
||||
void SignalIrcPlayerChanged(const std::string &oldNick, const std::string &newNick);
|
||||
void SignalIrcPlayerKicked(const std::string &nickName, const std::string &byWhom, const std::string &reason);
|
||||
void SignalIrcPlayerLeft(const std::string &nickName);
|
||||
void SignalIrcChatMsg(const std::string &nickName, const std::string &msg);
|
||||
void SignalIrcError(int errorCode);
|
||||
void SignalIrcServerError(int errorCode);
|
||||
|
||||
private:
|
||||
|
||||
|
||||
@@ -36,12 +36,6 @@ gameLobbyDialogImpl::gameLobbyDialogImpl(QWidget *parent, ConfigFile *c)
|
||||
connect( lineEdit_ChatInput, SIGNAL( returnPressed () ), this, SLOT( sendChatMessage() ) );
|
||||
connect( lineEdit_ChatInput, SIGNAL( textChanged (QString) ), this, SLOT( checkChatInputLength(QString) ) );
|
||||
|
||||
connect( this, SIGNAL( signalChatConnect(QString) ), myChat, SLOT( connected (QString) ) );
|
||||
connect( this, SIGNAL( signalChatSelfJoined(QString, QString) ), myChat, SLOT( selfJoined (QString, QString) ) );
|
||||
connect( this, SIGNAL( signalChatPlayerJoined (QString) ), myChat, SLOT( playerJoined (QString) ) );
|
||||
connect( this, SIGNAL( signalChatPlayerLeft (QString) ), myChat, SLOT( playerLeft (QString) ) );
|
||||
connect( this, SIGNAL( signalChatMessage (QString, QString) ), myChat, SLOT( displayMessage (QString, QString) ) );
|
||||
|
||||
clearDialog();
|
||||
}
|
||||
|
||||
|
||||
@@ -40,18 +40,13 @@ public:
|
||||
|
||||
void exec();
|
||||
|
||||
LobbyChat *getLobbyChat() { return myChat; }
|
||||
|
||||
void setSession(Session *session);
|
||||
Session& getSession() { return *mySession; }
|
||||
|
||||
void setMyW ( mainWindowImpl* theValue ) { myW = theValue; }
|
||||
|
||||
signals:
|
||||
void signalChatConnect(QString server);
|
||||
void signalChatSelfJoined(QString nickName, QString channel);
|
||||
void signalChatPlayerJoined(QString nickName);
|
||||
void signalChatPlayerLeft(QString nickName);
|
||||
void signalChatMessage(QString nickName, QString msg);
|
||||
|
||||
public slots:
|
||||
|
||||
void createGame();
|
||||
|
||||
@@ -18,6 +18,9 @@
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
#include "lobbychat.h"
|
||||
#define IN_INCLUDE_LIBIRC_H
|
||||
#include <core/libircclient/include/libirc_rfcnumeric.h>
|
||||
#include <net/socket_msg.h>
|
||||
|
||||
#include "gamelobbydialogimpl.h"
|
||||
#include "session.h"
|
||||
@@ -71,6 +74,29 @@ void LobbyChat::playerJoined(QString playerName)
|
||||
myLobby->treeWidget_NickList->sortItems(0, Qt::AscendingOrder);
|
||||
}
|
||||
|
||||
void LobbyChat::playerChanged(QString oldNick, QString newNick)
|
||||
{
|
||||
QList<QTreeWidgetItem *> tmpList(myLobby->treeWidget_NickList->findItems(oldNick, Qt::MatchExactly));
|
||||
if (!tmpList.empty())
|
||||
tmpList.front()->setData(0, Qt::DisplayRole, newNick);
|
||||
|
||||
if (myNick == oldNick)
|
||||
myNick = newNick;
|
||||
}
|
||||
|
||||
void LobbyChat::playerKicked(QString nickName, QString byWhom, QString reason)
|
||||
{
|
||||
if (myNick == nickName)
|
||||
{
|
||||
myLobby->accept();
|
||||
QMessageBox::warning(myLobby, tr("Network Notification"),
|
||||
tr("You were kicked from the server."),
|
||||
QMessageBox::Close);
|
||||
}
|
||||
else
|
||||
myLobby->textBrowser_ChatDisplay->append(nickName + " " + tr("was kicked from the server by") + " " + byWhom + " (" + reason + ")");
|
||||
}
|
||||
|
||||
void LobbyChat::playerLeft(QString playerName)
|
||||
{
|
||||
QList<QTreeWidgetItem *> tmpList(myLobby->treeWidget_NickList->findItems(playerName, Qt::MatchExactly));
|
||||
@@ -106,3 +132,92 @@ void LobbyChat::clearChat() {
|
||||
// // lineEdit_ChatInput->setCompleter(completer);
|
||||
|
||||
}
|
||||
|
||||
void LobbyChat::chatError(int errorCode)
|
||||
{
|
||||
QString errorMsg;
|
||||
switch (errorCode)
|
||||
{
|
||||
case ERR_IRC_INTERNAL :
|
||||
case ERR_IRC_SELECT_FAILED :
|
||||
case ERR_IRC_RECV_FAILED :
|
||||
case ERR_IRC_SEND_FAILED :
|
||||
case ERR_IRC_INVALID_PARAM :
|
||||
errorMsg = tr("An internal IRC error has occured:") + " " + QString::number(errorCode);
|
||||
break;
|
||||
case ERR_IRC_CONNECT_FAILED :
|
||||
errorMsg = tr("Could not connect to the IRC server. Chat will be unavailable.");
|
||||
break;
|
||||
case ERR_IRC_TERMINATED :
|
||||
errorMsg = tr("The IRC server terminated the connection. Chat will be unavailable.");
|
||||
break;
|
||||
case ERR_IRC_TIMEOUT :
|
||||
errorMsg = tr("An IRC action timed out.");
|
||||
break;
|
||||
}
|
||||
if (errorMsg.size())
|
||||
myLobby->textBrowser_ChatDisplay->append(errorMsg);
|
||||
}
|
||||
|
||||
void LobbyChat::chatServerError(int errorCode)
|
||||
{
|
||||
QString errorMsg;
|
||||
switch (errorCode)
|
||||
{
|
||||
case LIBIRC_RFC_ERR_NOSUCHNICK :
|
||||
case LIBIRC_RFC_ERR_NOSUCHCHANNEL :
|
||||
case LIBIRC_RFC_ERR_CANNOTSENDTOCHAN :
|
||||
case LIBIRC_RFC_ERR_TOOMANYCHANNELS :
|
||||
case LIBIRC_RFC_ERR_WASNOSUCHNICK :
|
||||
case LIBIRC_RFC_ERR_TOOMANYTARGETS :
|
||||
case LIBIRC_RFC_ERR_NOSUCHSERVICE :
|
||||
case LIBIRC_RFC_ERR_NOORIGIN :
|
||||
case LIBIRC_RFC_ERR_NORECIPIENT :
|
||||
case LIBIRC_RFC_ERR_NOTEXTTOSEND :
|
||||
case LIBIRC_RFC_ERR_NOTOPLEVEL :
|
||||
case LIBIRC_RFC_ERR_WILDTOPLEVEL :
|
||||
case LIBIRC_RFC_ERR_BADMASK :
|
||||
case LIBIRC_RFC_ERR_UNKNOWNCOMMAND :
|
||||
case LIBIRC_RFC_ERR_NOMOTD :
|
||||
case LIBIRC_RFC_ERR_NOADMININFO :
|
||||
case LIBIRC_RFC_ERR_FILEERROR :
|
||||
case LIBIRC_RFC_ERR_NONICKNAMEGIVEN :
|
||||
case LIBIRC_RFC_ERR_ERRONEUSNICKNAME :
|
||||
case LIBIRC_RFC_ERR_UNAVAILRESOURCE :
|
||||
case LIBIRC_RFC_ERR_USERNOTINCHANNEL :
|
||||
case LIBIRC_RFC_ERR_NOTONCHANNEL :
|
||||
case LIBIRC_RFC_ERR_USERONCHANNEL :
|
||||
case LIBIRC_RFC_ERR_NOLOGIN :
|
||||
case LIBIRC_RFC_ERR_SUMMONDISABLED :
|
||||
case LIBIRC_RFC_ERR_USERSDISABLED :
|
||||
case LIBIRC_RFC_ERR_NOTREGISTERED :
|
||||
case LIBIRC_RFC_ERR_NEEDMOREPARAMS :
|
||||
case LIBIRC_RFC_ERR_ALREADYREGISTRED :
|
||||
case LIBIRC_RFC_ERR_NOPERMFORHOST :
|
||||
case LIBIRC_RFC_ERR_PASSWDMISMATCH :
|
||||
case LIBIRC_RFC_ERR_YOUREBANNEDCREEP :
|
||||
case LIBIRC_RFC_ERR_YOUWILLBEBANNED :
|
||||
case LIBIRC_RFC_ERR_KEYSET :
|
||||
case LIBIRC_RFC_ERR_CHANNELISFULL :
|
||||
case LIBIRC_RFC_ERR_UNKNOWNMODE :
|
||||
case LIBIRC_RFC_ERR_INVITEONLYCHAN :
|
||||
case LIBIRC_RFC_ERR_BANNEDFROMCHAN :
|
||||
case LIBIRC_RFC_ERR_BADCHANNELKEY :
|
||||
case LIBIRC_RFC_ERR_BADCHANMASK :
|
||||
case LIBIRC_RFC_ERR_NOCHANMODES :
|
||||
case LIBIRC_RFC_ERR_BANLISTFULL :
|
||||
case LIBIRC_RFC_ERR_NOPRIVILEGES :
|
||||
case LIBIRC_RFC_ERR_CHANOPRIVSNEEDED :
|
||||
case LIBIRC_RFC_ERR_CANTKILLSERVER :
|
||||
case LIBIRC_RFC_ERR_RESTRICTED :
|
||||
case LIBIRC_RFC_ERR_UNIQOPPRIVSNEEDED :
|
||||
case LIBIRC_RFC_ERR_NOOPERHOST :
|
||||
case LIBIRC_RFC_ERR_UMODEUNKNOWNFLAG :
|
||||
case LIBIRC_RFC_ERR_USERSDONTMATCH :
|
||||
errorMsg = tr("The IRC server reported an error:") + " " + QString::number(errorCode);
|
||||
break;
|
||||
}
|
||||
// if (errorMsg.size())
|
||||
// myLobby->textBrowser_ChatDisplay->append(errorMsg);
|
||||
}
|
||||
|
||||
|
||||
@@ -41,11 +41,16 @@ public slots:
|
||||
void connected(QString server);
|
||||
void selfJoined(QString ownName, QString channel);
|
||||
void playerJoined(QString playerName);
|
||||
void playerChanged(QString oldNick, QString newNick);
|
||||
void playerKicked(QString nickName, QString byWhom, QString reason);
|
||||
void playerLeft(QString playerName);
|
||||
void displayMessage(QString playerName, QString msg);
|
||||
void checkInputLength(QString);
|
||||
void clearChat();
|
||||
|
||||
|
||||
void chatError(int errorCode);
|
||||
void chatServerError(int errorCode);
|
||||
|
||||
private:
|
||||
gameLobbyDialogImpl *myLobby;
|
||||
|
||||
|
||||
@@ -142,7 +142,11 @@ void GuiWrapper::SignalNetServerError(int errorID, int osErrorID) { myW->signalN
|
||||
|
||||
void GuiWrapper::SignalIrcConnect(const string &server) { myW->signalIrcConnect(QString::fromUtf8(server.c_str())); }
|
||||
void GuiWrapper::SignalIrcSelfJoined(const string &nickName, const string &channel) { myW->signalIrcSelfJoined(QString::fromUtf8(nickName.c_str()), QString::fromUtf8(channel.c_str())); }
|
||||
void GuiWrapper::SignalIrcPlayerJoined(const std::string &nickName) { myW->signalIrcPlayerJoined(QString::fromUtf8(nickName.c_str())); }
|
||||
void GuiWrapper::SignalIrcPlayerJoined(const string &nickName) { myW->signalIrcPlayerJoined(QString::fromUtf8(nickName.c_str())); }
|
||||
void GuiWrapper::SignalIrcPlayerChanged(const string &oldNick, const string &newNick) { myW->signalIrcPlayerChanged(QString::fromUtf8(oldNick.c_str()), QString::fromUtf8(newNick.c_str())); }
|
||||
void GuiWrapper::SignalIrcPlayerKicked(const std::string &nickName, const std::string &byWhom, const std::string &reason) { myW->signalIrcPlayerKicked(QString::fromUtf8(nickName.c_str()), QString::fromUtf8(byWhom.c_str()), QString::fromUtf8(reason.c_str())); }
|
||||
void GuiWrapper::SignalIrcPlayerLeft(const std::string &nickName) { myW->signalIrcPlayerLeft(QString::fromUtf8(nickName.c_str())); }
|
||||
void GuiWrapper::SignalIrcChatMsg(const std::string &nickName, const std::string &msg) { myW->signalIrcChatMessage(QString::fromUtf8(nickName.c_str()), QString::fromUtf8(msg.c_str())); }
|
||||
void GuiWrapper::SignalIrcError(int errorCode) { myW->signalIrcError(errorCode); }
|
||||
void GuiWrapper::SignalIrcServerError(int errorCode) {myW->signalIrcServerError(errorCode); }
|
||||
|
||||
|
||||
@@ -122,8 +122,12 @@ public:
|
||||
void SignalIrcConnect(const std::string &server);
|
||||
void SignalIrcSelfJoined(const std::string &nickName, const std::string &channel);
|
||||
void SignalIrcPlayerJoined(const std::string &nickName);
|
||||
void SignalIrcPlayerChanged(const std::string &oldNick, const std::string &newNick);
|
||||
void SignalIrcPlayerKicked(const std::string &nickName, const std::string &byWhom, const std::string &reason);
|
||||
void SignalIrcPlayerLeft(const std::string &nickName);
|
||||
void SignalIrcChatMsg(const std::string &nickName, const std::string &msg);
|
||||
void SignalIrcError(int errorCode);
|
||||
void SignalIrcServerError(int errorCode);
|
||||
|
||||
private:
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
#include "changehumanplayernamedialogimpl.h"
|
||||
#include "changecompleteblindsdialogimpl.h"
|
||||
#include "gamelobbydialogimpl.h"
|
||||
#include "lobbychat.h"
|
||||
|
||||
#include "startsplash.h"
|
||||
#include "mycardspixmaplabel.h"
|
||||
@@ -678,11 +679,15 @@ mainWindowImpl::mainWindowImpl(ConfigFile *c, QMainWindow *parent)
|
||||
connect(this, SIGNAL(signalNetServerError(int, int)), this, SLOT(networkError(int, int)));
|
||||
connect(this, SIGNAL(signalNetClientGameStart(boost::shared_ptr<Game>)), this, SLOT(networkStart(boost::shared_ptr<Game>)));
|
||||
|
||||
connect(this, SIGNAL(signalIrcConnect(QString)), myGameLobbyDialog, SIGNAL(signalChatConnect(QString)));
|
||||
connect(this, SIGNAL(signalIrcSelfJoined(QString, QString)), myGameLobbyDialog, SIGNAL(signalChatSelfJoined(QString, QString)));
|
||||
connect(this, SIGNAL(signalIrcPlayerJoined(QString)), myGameLobbyDialog, SIGNAL(signalChatPlayerJoined(QString)));
|
||||
connect(this, SIGNAL(signalIrcPlayerLeft(QString)), myGameLobbyDialog, SIGNAL(signalChatPlayerLeft(QString)));
|
||||
connect(this, SIGNAL(signalIrcChatMessage(QString, QString)), myGameLobbyDialog, SIGNAL(signalChatMessage(QString, QString)));
|
||||
connect(this, SIGNAL(signalIrcConnect(QString)), myGameLobbyDialog->getLobbyChat(), SLOT(connected(QString)));
|
||||
connect(this, SIGNAL(signalIrcSelfJoined(QString, QString)), myGameLobbyDialog->getLobbyChat(), SLOT(selfJoined(QString, QString)));
|
||||
connect(this, SIGNAL(signalIrcPlayerJoined(QString)), myGameLobbyDialog->getLobbyChat(), SLOT(playerJoined(QString)));
|
||||
connect(this, SIGNAL(signalIrcPlayerChanged(QString, QString)), myGameLobbyDialog->getLobbyChat(), SLOT(playerChanged(QString, QString)));
|
||||
connect(this, SIGNAL(signalIrcPlayerKicked(QString, QString, QString)), myGameLobbyDialog->getLobbyChat(), SLOT(playerKicked(QString, QString, QString)));
|
||||
connect(this, SIGNAL(signalIrcPlayerLeft(QString)), myGameLobbyDialog->getLobbyChat(), SLOT(playerLeft(QString)));
|
||||
connect(this, SIGNAL(signalIrcChatMessage(QString, QString)), myGameLobbyDialog->getLobbyChat(), SLOT(displayMessage(QString, QString)));
|
||||
connect(this, SIGNAL(signalIrcError(int)), myGameLobbyDialog->getLobbyChat(), SLOT(chatError(int)));
|
||||
connect(this, SIGNAL(signalIrcServerError(int)), myGameLobbyDialog->getLobbyChat(), SLOT(chatServerError(int)));
|
||||
|
||||
//Sound
|
||||
mySDLPlayer = new SDLPlayer(myConfig);
|
||||
|
||||
@@ -142,8 +142,12 @@ signals:
|
||||
void signalIrcConnect(QString server);
|
||||
void signalIrcSelfJoined(QString nickName, QString channel);
|
||||
void signalIrcPlayerJoined(QString nickName);
|
||||
void signalIrcPlayerChanged(QString oldNick, QString newNick);
|
||||
void signalIrcPlayerKicked(QString nickName, QString byWhom, QString reason);
|
||||
void signalIrcPlayerLeft(QString nickName);
|
||||
void signalIrcChatMessage(QString nickName, QString msg);
|
||||
void signalIrcError(int errorCode);
|
||||
void signalIrcServerError(int errorCode);
|
||||
|
||||
public slots:
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include <net/ircthread.h>
|
||||
|
||||
#include <net/socket_helper.h>
|
||||
#include <net/socket_msg.h>
|
||||
#include <libircclient.h>
|
||||
#include <sstream>
|
||||
#include <cctype>
|
||||
@@ -78,6 +79,13 @@ void irc_notify_player_list(irc_session_t *session, const char *players)
|
||||
}
|
||||
}
|
||||
|
||||
void irc_handle_server_error(irc_session_t *session, unsigned irc_error_code)
|
||||
{
|
||||
IrcContext *context = (IrcContext *) irc_get_ctx(session);
|
||||
|
||||
context->ircThread.GetCallback().SignalIrcServerError(irc_error_code);
|
||||
}
|
||||
|
||||
void
|
||||
irc_event_connect(irc_session_t *session, const char *irc_event, const char *origin, const char **params, unsigned count)
|
||||
{
|
||||
@@ -99,6 +107,36 @@ irc_event_join(irc_session_t *session, const char *irc_event, const char *origin
|
||||
context->ircThread.GetCallback().SignalIrcPlayerJoined(origin);
|
||||
}
|
||||
|
||||
void
|
||||
irc_event_nick(irc_session_t *session, const char *irc_event, const char *origin, const char **params, unsigned count)
|
||||
{
|
||||
// someone changed his/her nick
|
||||
IrcContext *context = (IrcContext *) irc_get_ctx(session);
|
||||
|
||||
if (context->nick != params[0]) // only act if this was not an auto-rename
|
||||
{
|
||||
if (context->nick == origin)
|
||||
context->nick = params[0];
|
||||
context->ircThread.GetCallback().SignalIrcPlayerChanged(origin, params[0]);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
irc_event_kick(irc_session_t *session, const char *irc_event, const char *origin, const char **params, unsigned count)
|
||||
{
|
||||
// someone got kicked
|
||||
IrcContext *context = (IrcContext *) irc_get_ctx(session);
|
||||
|
||||
string byWhom(origin);
|
||||
string who;
|
||||
string reason;
|
||||
if (count >= 2)
|
||||
who = params[1];
|
||||
if (count >= 3)
|
||||
reason = params[2];
|
||||
context->ircThread.GetCallback().SignalIrcPlayerKicked(who, byWhom, reason);
|
||||
}
|
||||
|
||||
void
|
||||
irc_event_leave(irc_session_t *session, const char *irc_event, const char *origin, const char **params, unsigned count)
|
||||
{
|
||||
@@ -136,6 +174,58 @@ irc_event_numeric(irc_session_t * session, unsigned irc_event, const char *origi
|
||||
if (count >= 4)
|
||||
irc_notify_player_list(session, params[3]);
|
||||
break;
|
||||
case LIBIRC_RFC_ERR_NOSUCHNICK :
|
||||
case LIBIRC_RFC_ERR_NOSUCHCHANNEL :
|
||||
case LIBIRC_RFC_ERR_CANNOTSENDTOCHAN :
|
||||
case LIBIRC_RFC_ERR_TOOMANYCHANNELS :
|
||||
case LIBIRC_RFC_ERR_WASNOSUCHNICK :
|
||||
case LIBIRC_RFC_ERR_TOOMANYTARGETS :
|
||||
case LIBIRC_RFC_ERR_NOSUCHSERVICE :
|
||||
case LIBIRC_RFC_ERR_NOORIGIN :
|
||||
case LIBIRC_RFC_ERR_NORECIPIENT :
|
||||
case LIBIRC_RFC_ERR_NOTEXTTOSEND :
|
||||
case LIBIRC_RFC_ERR_NOTOPLEVEL :
|
||||
case LIBIRC_RFC_ERR_WILDTOPLEVEL :
|
||||
case LIBIRC_RFC_ERR_BADMASK :
|
||||
case LIBIRC_RFC_ERR_UNKNOWNCOMMAND :
|
||||
case LIBIRC_RFC_ERR_NOMOTD :
|
||||
case LIBIRC_RFC_ERR_NOADMININFO :
|
||||
case LIBIRC_RFC_ERR_FILEERROR :
|
||||
case LIBIRC_RFC_ERR_NONICKNAMEGIVEN :
|
||||
case LIBIRC_RFC_ERR_ERRONEUSNICKNAME :
|
||||
case LIBIRC_RFC_ERR_UNAVAILRESOURCE :
|
||||
case LIBIRC_RFC_ERR_USERNOTINCHANNEL :
|
||||
case LIBIRC_RFC_ERR_NOTONCHANNEL :
|
||||
case LIBIRC_RFC_ERR_USERONCHANNEL :
|
||||
case LIBIRC_RFC_ERR_NOLOGIN :
|
||||
case LIBIRC_RFC_ERR_SUMMONDISABLED :
|
||||
case LIBIRC_RFC_ERR_USERSDISABLED :
|
||||
case LIBIRC_RFC_ERR_NOTREGISTERED :
|
||||
case LIBIRC_RFC_ERR_NEEDMOREPARAMS :
|
||||
case LIBIRC_RFC_ERR_ALREADYREGISTRED :
|
||||
case LIBIRC_RFC_ERR_NOPERMFORHOST :
|
||||
case LIBIRC_RFC_ERR_PASSWDMISMATCH :
|
||||
case LIBIRC_RFC_ERR_YOUREBANNEDCREEP :
|
||||
case LIBIRC_RFC_ERR_YOUWILLBEBANNED :
|
||||
case LIBIRC_RFC_ERR_KEYSET :
|
||||
case LIBIRC_RFC_ERR_CHANNELISFULL :
|
||||
case LIBIRC_RFC_ERR_UNKNOWNMODE :
|
||||
case LIBIRC_RFC_ERR_INVITEONLYCHAN :
|
||||
case LIBIRC_RFC_ERR_BANNEDFROMCHAN :
|
||||
case LIBIRC_RFC_ERR_BADCHANNELKEY :
|
||||
case LIBIRC_RFC_ERR_BADCHANMASK :
|
||||
case LIBIRC_RFC_ERR_NOCHANMODES :
|
||||
case LIBIRC_RFC_ERR_BANLISTFULL :
|
||||
case LIBIRC_RFC_ERR_NOPRIVILEGES :
|
||||
case LIBIRC_RFC_ERR_CHANOPRIVSNEEDED :
|
||||
case LIBIRC_RFC_ERR_CANTKILLSERVER :
|
||||
case LIBIRC_RFC_ERR_RESTRICTED :
|
||||
case LIBIRC_RFC_ERR_UNIQOPPRIVSNEEDED :
|
||||
case LIBIRC_RFC_ERR_NOOPERHOST :
|
||||
case LIBIRC_RFC_ERR_UMODEUNKNOWNFLAG :
|
||||
case LIBIRC_RFC_ERR_USERSDONTMATCH :
|
||||
irc_handle_server_error(session, irc_event);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -147,6 +237,9 @@ IrcThread::IrcThread(IrcCallback &callback)
|
||||
|
||||
IrcThread::~IrcThread()
|
||||
{
|
||||
IrcContext &context = GetContext();
|
||||
if (context.session)
|
||||
irc_destroy_session(context.session);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -168,12 +261,12 @@ IrcThread::Init(const std::string &serverAddress, unsigned serverPort, bool ipv6
|
||||
|
||||
callbacks.event_connect = irc_event_connect;
|
||||
callbacks.event_join = irc_event_join;
|
||||
//callbacks.event_nick
|
||||
callbacks.event_nick = irc_event_nick;
|
||||
callbacks.event_quit = irc_event_leave;
|
||||
callbacks.event_part = irc_event_leave;
|
||||
//callbacks.event_mode
|
||||
//callbacks.event_topic
|
||||
//callbacks.event_kick
|
||||
callbacks.event_kick = irc_event_kick;
|
||||
callbacks.event_channel = irc_event_channel;
|
||||
//callbacks.event_privmsg
|
||||
//callbacks.event_notice
|
||||
@@ -219,7 +312,9 @@ IrcThread::Main()
|
||||
irc_session_t *s = context.session;
|
||||
if (s)
|
||||
{
|
||||
if (irc_connect(s, context.serverAddress.c_str(), context.serverPort, 0, context.nick.c_str(), 0, 0) == 0)
|
||||
if (irc_connect(s, context.serverAddress.c_str(), context.serverPort, 0, context.nick.c_str(), 0, 0) != 0)
|
||||
HandleIrcError(irc_errno(s));
|
||||
else
|
||||
{
|
||||
// Main loop.
|
||||
while (irc_is_connected(s))
|
||||
@@ -251,21 +346,52 @@ IrcThread::Main()
|
||||
int selectResult = select(maxfd + 1, &readSet, &writeSet, 0, &timeout);
|
||||
if (!IS_VALID_SELECT(selectResult))
|
||||
{
|
||||
//todo
|
||||
GetCallback().SignalIrcError(ERR_IRC_SELECT_FAILED);
|
||||
break;
|
||||
}
|
||||
|
||||
if (irc_process_select_descriptors(s, &readSet, &writeSet) != 0)
|
||||
{
|
||||
//todo
|
||||
HandleIrcError(irc_errno(s));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
irc_destroy_session(s);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
IrcThread::HandleIrcError(int errorCode)
|
||||
{
|
||||
int internalErrorCode = ERR_IRC_INTERNAL;
|
||||
switch(errorCode)
|
||||
{
|
||||
case LIBIRC_ERR_RESOLV:
|
||||
case LIBIRC_ERR_SOCKET:
|
||||
case LIBIRC_ERR_CONNECT:
|
||||
internalErrorCode = ERR_IRC_CONNECT_FAILED;
|
||||
break;
|
||||
case LIBIRC_ERR_INVAL:
|
||||
case LIBIRC_ERR_STATE:
|
||||
internalErrorCode = ERR_IRC_INVALID_PARAM;
|
||||
break;
|
||||
case LIBIRC_ERR_CLOSED:
|
||||
case LIBIRC_ERR_TERMINATED:
|
||||
internalErrorCode = ERR_IRC_TERMINATED;
|
||||
break;
|
||||
case LIBIRC_ERR_READ:
|
||||
internalErrorCode = ERR_IRC_RECV_FAILED;
|
||||
break;
|
||||
case LIBIRC_ERR_WRITE:
|
||||
internalErrorCode = ERR_IRC_SEND_FAILED;
|
||||
break;
|
||||
case LIBIRC_ERR_TIMEOUT:
|
||||
internalErrorCode = ERR_IRC_TIMEOUT;
|
||||
break;
|
||||
}
|
||||
GetCallback().SignalIrcError(internalErrorCode);
|
||||
}
|
||||
|
||||
const IrcContext &
|
||||
IrcThread::GetContext() const
|
||||
{
|
||||
|
||||
@@ -31,8 +31,12 @@ public:
|
||||
virtual void SignalIrcConnect(const std::string &server) = 0;
|
||||
virtual void SignalIrcSelfJoined(const std::string &nickName, const std::string &channel) = 0;
|
||||
virtual void SignalIrcPlayerJoined(const std::string &nickName) = 0;
|
||||
virtual void SignalIrcPlayerChanged(const std::string &oldNick, const std::string &newNick) = 0;
|
||||
virtual void SignalIrcPlayerKicked(const std::string &nickName, const std::string &byWhom, const std::string &reason) = 0;
|
||||
virtual void SignalIrcPlayerLeft(const std::string &nickName) = 0;
|
||||
virtual void SignalIrcChatMsg(const std::string &nickName, const std::string &msg) = 0;
|
||||
virtual void SignalIrcError(int errorCode) = 0;
|
||||
virtual void SignalIrcServerError(int errorCode) = 0;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -49,6 +49,8 @@ protected:
|
||||
// Main function of the thread.
|
||||
virtual void Main();
|
||||
|
||||
void HandleIrcError(int errorCode);
|
||||
|
||||
const IrcContext &GetContext() const;
|
||||
IrcContext &GetContext();
|
||||
|
||||
|
||||
@@ -58,6 +58,15 @@
|
||||
#define ERR_NET_PLAYER_KICKED 114
|
||||
#define ERR_NET_INVALID_PLAYER_COUNT 115
|
||||
|
||||
#define ERR_IRC_INTERNAL 151
|
||||
#define ERR_IRC_CONNECT_FAILED 152
|
||||
#define ERR_IRC_TERMINATED 153
|
||||
#define ERR_IRC_SELECT_FAILED 154
|
||||
#define ERR_IRC_RECV_FAILED 155
|
||||
#define ERR_IRC_SEND_FAILED 156
|
||||
#define ERR_IRC_INVALID_PARAM 157
|
||||
#define ERR_IRC_TIMEOUT 158
|
||||
|
||||
// Notifications - removed from game
|
||||
#define NTF_NET_INTERNAL 201
|
||||
#define NTF_NET_REMOVED_ON_REQUEST 202
|
||||
|
||||
Reference in New Issue
Block a user