Added irc support for lobby dialog. Takes some time to connect before messages can be sent/received. No special stuff yet, no user list, no connection notifications. Still work in progress.

This commit is contained in:
lotodore
2007-09-26 11:48:33 +00:00
parent 6c19233c18
commit 7bbf76fe5d
17 changed files with 117 additions and 19 deletions
+26 -5
View File
@@ -34,11 +34,25 @@ struct IrcContext
string channel;
};
void event_connect(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned count)
void
irc_connect(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned count)
{
IrcContext *ctx = (IrcContext *) irc_get_ctx(session);
IrcContext *context = (IrcContext *) irc_get_ctx(session);
irc_cmd_join(session, ctx->channel.c_str(), 0);
irc_cmd_join(session, context->channel.c_str(), 0);
}
void
irc_channel(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned count)
{
IrcContext *context = (IrcContext *) irc_get_ctx(session);
if (context->channel == params[0]) // check whether this message is for our channel
{
// Signal the message (if any) to GUI.
if (params[1] && *params[1] != 0)
context->ircThread.GetCallback().SignalIrcChatMsg(origin, params[1]);
}
}
@@ -69,7 +83,7 @@ IrcThread::Init(const std::string &serverAddress, unsigned serverPort, bool ipv6
irc_callbacks_t callbacks;
memset (&callbacks, 0, sizeof(callbacks));
callbacks.event_connect = event_connect;
callbacks.event_connect = irc_connect;
//callbacks.event_join
//callbacks.event_nick
//callbacks.event_quit
@@ -77,7 +91,7 @@ IrcThread::Init(const std::string &serverAddress, unsigned serverPort, bool ipv6
//callbacks.event_mode
//callbacks.event_topic
//callbacks.event_kick
//callbacks.event_channel
callbacks.event_channel = irc_channel;
//callbacks.event_privmsg
//callbacks.event_notice
//callbacks.event_invite
@@ -100,6 +114,13 @@ IrcThread::Init(const std::string &serverAddress, unsigned serverPort, bool ipv6
}
}
void
IrcThread::SendChatMessage(const std::string &msg)
{
IrcContext &context = GetContext();
irc_cmd_msg(context.session, context.channel.c_str(), msg.c_str());
}
void
IrcThread::SignalTermination()
{
+1 -1
View File
@@ -28,7 +28,7 @@ class IrcCallback
public:
virtual ~IrcCallback();
virtual void SignalIrcPlayerJoined(const std::string &nickName) = 0;
virtual void SignalIrcChatMsg(const std::string &nickName, const std::string &msg) = 0;
};
#endif
+5 -2
View File
@@ -36,8 +36,13 @@ public:
// Set the parameters.
void Init(const std::string &serverAddress, unsigned serverPort, bool ipv6, const std::string &nick, const std::string &channel);
// Send a chat message to the channel.
void SendChatMessage(const std::string &msg);
virtual void SignalTermination();
IrcCallback &GetCallback();
protected:
// Main function of the thread.
@@ -46,8 +51,6 @@ protected:
const IrcContext &GetContext() const;
IrcContext &GetContext();
IrcCallback &GetCallback();
private:
std::auto_ptr<IrcContext> m_context;
IrcCallback &m_callback;