1
0
mirror of https://github.com/VCMP-SqMod/SqMod.git synced 2024-11-08 08:47:17 +01:00

Completed the IRC library implementation.

This commit is contained in:
Sandu Liviu Catalin 2015-10-30 15:14:13 +02:00
parent 054d81e4f1
commit f26bf3db4a
2 changed files with 552 additions and 55 deletions

View File

@ -1,4 +1,5 @@
#include "Library/IRC/Session.hpp"
#include "Core.hpp"
#include "Register.hpp"
// ------------------------------------------------------------------------------------------------
@ -25,8 +26,13 @@ Session::Session() noexcept
}
else
{
// Associate this wrapper instance with the session structure
irc_set_ctx(m_Session, this);
// Connect to the on frame event so we can process callbacks
_Core->ServerFrame.Connect< Session, &Session::Process >(this);
}
// Receive notification when the VM is about to be closed to release object references
_Core->VMClose.Connect< Session, &Session::VMClose >(this);
}
// ------------------------------------------------------------------------------------------------
@ -34,8 +40,79 @@ Session::~Session()
{
if (m_Session != nullptr)
{
irc_set_ctx(m_Session, NULL);
irc_destroy_session(m_Session);
m_Session = nullptr;
}
// Disconenct from the on frame event
_Core->ServerFrame.Disconnect< Session, &Session::Process >(this);
// Stop receiving notification when the VM is about to be closed
_Core->VMClose.Disconnect< Session, &Session::VMClose >(this);
}
// ------------------------------------------------------------------------------------------------
void Session::Process(SQFloat delta) noexcept
{
// Make sure that the IRC session is connected
if (!irc_is_connected(m_Session))
{
// @TODO: reconnect it, or abort
LogWrn("Session is not connected");
return;
}
// Create the structures for select()
struct timeval tv;
fd_set in_set, out_set;
int maxfd = 0;
// Wait 1 millisecond for events
tv.tv_usec = 1000;
tv.tv_sec = 0;
// Initialize the sets
memset(&in_set, 0, sizeof(fd_set));
memset(&out_set, 0, sizeof(fd_set));
// Add the IRC session descriptors
irc_add_select_descriptors(m_Session, &in_set, &out_set, &maxfd);
// Call select()
if (select(maxfd + 1, &in_set, &out_set, 0, &tv) < 0)
{
// @TODO: Error
LogWrn("Unable to select() on session");
}
// Call irc_process_select_descriptors() for the session
if (irc_process_select_descriptors (m_Session, &in_set, &out_set))
{
// @TODO: The connection failed, or the server disconnected. Handle it
LogWrn("The connection failed, or the server disconnected.");
}
}
// ------------------------------------------------------------------------------------------------
void Session::VMClose() noexcept
{
// Release the reference to the specified callback
m_OnConnect.Release2();
m_OnNick.Release2();
m_OnQuit.Release2();
m_OnJoin.Release2();
m_OnPart.Release2();
m_OnMode.Release2();
m_OnUmode.Release2();
m_OnTopic.Release2();
m_OnKick.Release2();
m_OnChannel.Release2();
m_OnPrivMSG.Release2();
m_OnNotice.Release2();
m_OnChannel_Notice.Release2();
m_OnInvite.Release2();
m_OnCTCP_Req.Release2();
m_OnCTCP_Rep.Release2();
m_OnCTCP_Action.Release2();
m_OnUnknown.Release2();
m_OnNumeric.Release2();
m_OnDcc_Chat_Req.Release2();
m_OnDcc_Send_Req.Release2();
// Release the reference to the specified user data
m_Data.Release();
}
// ------------------------------------------------------------------------------------------------
@ -175,7 +252,7 @@ void Session::SetData(SqObj & data) noexcept
}
// ------------------------------------------------------------------------------------------------
Function & Session::GetOnConnect() noexcept
Function Session::GetOnConnect() noexcept
{
return m_OnConnect;
}
@ -187,7 +264,13 @@ void Session::SetOnConnect(Function & func) noexcept
}
// ------------------------------------------------------------------------------------------------
Function & Session::GetOnNick() noexcept
void Session::SetOnConnect_Env(SqObj & env, Function & func) noexcept
{
m_OnConnect = Function(env.GetVM(), env, func.GetFunc());
}
// ------------------------------------------------------------------------------------------------
Function Session::GetOnNick() noexcept
{
return m_OnNick;
}
@ -199,7 +282,13 @@ void Session::SetOnNick(Function & func) noexcept
}
// ------------------------------------------------------------------------------------------------
Function & Session::GetOnQuit() noexcept
void Session::SetOnNick_Env(SqObj & env, Function & func) noexcept
{
m_OnNick = Function(env.GetVM(), env, func.GetFunc());
}
// ------------------------------------------------------------------------------------------------
Function Session::GetOnQuit() noexcept
{
return m_OnQuit;
}
@ -211,7 +300,13 @@ void Session::SetOnQuit(Function & func) noexcept
}
// ------------------------------------------------------------------------------------------------
Function & Session::GetOnJoin() noexcept
void Session::SetOnQuit_Env(SqObj & env, Function & func) noexcept
{
m_OnQuit = Function(env.GetVM(), env, func.GetFunc());
}
// ------------------------------------------------------------------------------------------------
Function Session::GetOnJoin() noexcept
{
return m_OnJoin;
}
@ -223,7 +318,13 @@ void Session::SetOnJoin(Function & func) noexcept
}
// ------------------------------------------------------------------------------------------------
Function & Session::GetOnPart() noexcept
void Session::SetOnJoin_Env(SqObj & env, Function & func) noexcept
{
m_OnJoin = Function(env.GetVM(), env, func.GetFunc());
}
// ------------------------------------------------------------------------------------------------
Function Session::GetOnPart() noexcept
{
return m_OnPart;
}
@ -235,7 +336,13 @@ void Session::SetOnPart(Function & func) noexcept
}
// ------------------------------------------------------------------------------------------------
Function & Session::GetOnMode() noexcept
void Session::SetOnPart_Env(SqObj & env, Function & func) noexcept
{
m_OnPart = Function(env.GetVM(), env, func.GetFunc());
}
// ------------------------------------------------------------------------------------------------
Function Session::GetOnMode() noexcept
{
return m_OnMode;
}
@ -247,7 +354,13 @@ void Session::SetOnMode(Function & func) noexcept
}
// ------------------------------------------------------------------------------------------------
Function & Session::GetOnUmode() noexcept
void Session::SetOnMode_Env(SqObj & env, Function & func) noexcept
{
m_OnMode = Function(env.GetVM(), env, func.GetFunc());
}
// ------------------------------------------------------------------------------------------------
Function Session::GetOnUmode() noexcept
{
return m_OnUmode;
}
@ -259,7 +372,13 @@ void Session::SetOnUmode(Function & func) noexcept
}
// ------------------------------------------------------------------------------------------------
Function & Session::GetOnTopic() noexcept
void Session::SetOnUmode_Env(SqObj & env, Function & func) noexcept
{
m_OnUmode = Function(env.GetVM(), env, func.GetFunc());
}
// ------------------------------------------------------------------------------------------------
Function Session::GetOnTopic() noexcept
{
return m_OnTopic;
}
@ -271,7 +390,13 @@ void Session::SetOnTopic(Function & func) noexcept
}
// ------------------------------------------------------------------------------------------------
Function & Session::GetOnKick() noexcept
void Session::SetOnTopic_Env(SqObj & env, Function & func) noexcept
{
m_OnTopic = Function(env.GetVM(), env, func.GetFunc());
}
// ------------------------------------------------------------------------------------------------
Function Session::GetOnKick() noexcept
{
return m_OnKick;
}
@ -283,7 +408,13 @@ void Session::SetOnKick(Function & func) noexcept
}
// ------------------------------------------------------------------------------------------------
Function & Session::GetOnChannel() noexcept
void Session::SetOnKick_Env(SqObj & env, Function & func) noexcept
{
m_OnKick = Function(env.GetVM(), env, func.GetFunc());
}
// ------------------------------------------------------------------------------------------------
Function Session::GetOnChannel() noexcept
{
return m_OnChannel;
}
@ -295,7 +426,13 @@ void Session::SetOnChannel(Function & func) noexcept
}
// ------------------------------------------------------------------------------------------------
Function & Session::GetOnPrivMSG() noexcept
void Session::SetOnChannel_Env(SqObj & env, Function & func) noexcept
{
m_OnChannel = Function(env.GetVM(), env, func.GetFunc());
}
// ------------------------------------------------------------------------------------------------
Function Session::GetOnPrivMSG() noexcept
{
return m_OnPrivMSG;
}
@ -307,7 +444,13 @@ void Session::SetOnPrivMSG(Function & func) noexcept
}
// ------------------------------------------------------------------------------------------------
Function & Session::GetOnNotice() noexcept
void Session::SetOnPrivMSG_Env(SqObj & env, Function & func) noexcept
{
m_OnPrivMSG = Function(env.GetVM(), env, func.GetFunc());
}
// ------------------------------------------------------------------------------------------------
Function Session::GetOnNotice() noexcept
{
return m_OnNotice;
}
@ -319,7 +462,13 @@ void Session::SetOnNotice(Function & func) noexcept
}
// ------------------------------------------------------------------------------------------------
Function & Session::GetOnChannel_Notice() noexcept
void Session::SetOnNotice_Env(SqObj & env, Function & func) noexcept
{
m_OnNotice = Function(env.GetVM(), env, func.GetFunc());
}
// ------------------------------------------------------------------------------------------------
Function Session::GetOnChannel_Notice() noexcept
{
return m_OnChannel_Notice;
}
@ -331,7 +480,13 @@ void Session::SetOnChannel_Notice(Function & func) noexcept
}
// ------------------------------------------------------------------------------------------------
Function & Session::GetOnInvite() noexcept
void Session::SetOnChannel_Notice_Env(SqObj & env, Function & func) noexcept
{
m_OnChannel_Notice = Function(env.GetVM(), env, func.GetFunc());
}
// ------------------------------------------------------------------------------------------------
Function Session::GetOnInvite() noexcept
{
return m_OnInvite;
}
@ -343,7 +498,13 @@ void Session::SetOnInvite(Function & func) noexcept
}
// ------------------------------------------------------------------------------------------------
Function & Session::GetOnCTCP_Req() noexcept
void Session::SetOnInvite_Env(SqObj & env, Function & func) noexcept
{
m_OnInvite = Function(env.GetVM(), env, func.GetFunc());
}
// ------------------------------------------------------------------------------------------------
Function Session::GetOnCTCP_Req() noexcept
{
return m_OnCTCP_Req;
}
@ -355,7 +516,13 @@ void Session::SetOnCTCP_Req(Function & func) noexcept
}
// ------------------------------------------------------------------------------------------------
Function & Session::GetOnCTCP_Rep() noexcept
void Session::SetOnCTCP_Req_Env(SqObj & env, Function & func) noexcept
{
m_OnCTCP_Req = Function(env.GetVM(), env, func.GetFunc());
}
// ------------------------------------------------------------------------------------------------
Function Session::GetOnCTCP_Rep() noexcept
{
return m_OnCTCP_Rep;
}
@ -367,7 +534,13 @@ void Session::SetOnCTCP_Rep(Function & func) noexcept
}
// ------------------------------------------------------------------------------------------------
Function & Session::GetOnCTCP_Action() noexcept
void Session::SetOnCTCP_Rep_Env(SqObj & env, Function & func) noexcept
{
m_OnCTCP_Rep = Function(env.GetVM(), env, func.GetFunc());
}
// ------------------------------------------------------------------------------------------------
Function Session::GetOnCTCP_Action() noexcept
{
return m_OnCTCP_Action;
}
@ -379,7 +552,13 @@ void Session::SetOnCTCP_Action(Function & func) noexcept
}
// ------------------------------------------------------------------------------------------------
Function & Session::GetOnUnknown() noexcept
void Session::SetOnCTCP_Action_Env(SqObj & env, Function & func) noexcept
{
m_OnCTCP_Action = Function(env.GetVM(), env, func.GetFunc());
}
// ------------------------------------------------------------------------------------------------
Function Session::GetOnUnknown() noexcept
{
return m_OnUnknown;
}
@ -391,7 +570,13 @@ void Session::SetOnUnknown(Function & func) noexcept
}
// ------------------------------------------------------------------------------------------------
Function & Session::GetOnNumeric() noexcept
void Session::SetOnUnknown_Env(SqObj & env, Function & func) noexcept
{
m_OnUnknown = Function(env.GetVM(), env, func.GetFunc());
}
// ------------------------------------------------------------------------------------------------
Function Session::GetOnNumeric() noexcept
{
return m_OnNumeric;
}
@ -403,7 +588,13 @@ void Session::SetOnNumeric(Function & func) noexcept
}
// ------------------------------------------------------------------------------------------------
Function & Session::GetOnDcc_Chat_Req() noexcept
void Session::SetOnNumeric_Env(SqObj & env, Function & func) noexcept
{
m_OnNumeric = Function(env.GetVM(), env, func.GetFunc());
}
// ------------------------------------------------------------------------------------------------
Function Session::GetOnDcc_Chat_Req() noexcept
{
return m_OnDcc_Chat_Req;
}
@ -415,7 +606,13 @@ void Session::SetOnDcc_Chat_Req(Function & func) noexcept
}
// ------------------------------------------------------------------------------------------------
Function & Session::GetOnDcc_Send_Req() noexcept
void Session::SetOnDcc_Chat_Req_Env(SqObj & env, Function & func) noexcept
{
m_OnDcc_Chat_Req = Function(env.GetVM(), env, func.GetFunc());
}
// ------------------------------------------------------------------------------------------------
Function Session::GetOnDcc_Send_Req() noexcept
{
return m_OnDcc_Send_Req;
}
@ -426,6 +623,12 @@ void Session::SetOnDcc_Send_Req(Function & func) noexcept
m_OnDcc_Send_Req = func;
}
// ------------------------------------------------------------------------------------------------
void Session::SetOnDcc_Send_Req_Env(SqObj & env, Function & func) noexcept
{
m_OnDcc_Send_Req = Function(env.GetVM(), env, func.GetFunc());
}
// ------------------------------------------------------------------------------------------------
bool Session::IsValid() const noexcept
{
@ -959,6 +1162,88 @@ SQInt32 Session::SendRaw(const SQChar * str) noexcept
return SQMOD_UNKNOWN;
}
// ------------------------------------------------------------------------------------------------
SQInt32 Session::DestroyDcc(SQUint32 dccid) noexcept
{
if (m_Session != nullptr)
{
return irc_dcc_destroy(m_Session, dccid);
}
else
{
LogWrn("Attempting to <destroy dcc> using an invalid session: null");
}
return SQMOD_UNKNOWN;
}
// ------------------------------------------------------------------------------------------------
void Session::SetCtcpVersion(const SQChar * version) noexcept
{
if (m_Session != nullptr)
{
irc_set_ctcp_version(m_Session, version);
}
else
{
LogWrn("Attempting to <set ctcp version> using an invalid session: null");
}
}
// ------------------------------------------------------------------------------------------------
SQInt32 Session::GetErrNo() noexcept
{
if (m_Session != nullptr)
{
return irc_errno(m_Session);
}
else
{
LogWrn("Attempting to <get session error number> using an invalid session: null");
}
return SQMOD_UNKNOWN;
}
// ------------------------------------------------------------------------------------------------
const SQChar * Session::GetErrStr() noexcept
{
if (m_Session != nullptr)
{
return irc_strerror(irc_errno(m_Session));
}
else
{
LogWrn("Attempting to <get session error string> using an invalid session: null");
}
return _SC("");
}
// ------------------------------------------------------------------------------------------------
void Session::SetOption(SQUint32 option) noexcept
{
if (m_Session != nullptr)
{
return irc_option_set(m_Session, option);
}
else
{
LogWrn("Attempting to <set session option> using an invalid session: null");
}
}
// ------------------------------------------------------------------------------------------------
void Session::ResetOption(SQUint32 option) noexcept
{
if (m_Session != nullptr)
{
return irc_option_set(m_Session, option);
}
else
{
LogWrn("Attempting to <reset session option> using an invalid session: null");
}
}
// ------------------------------------------------------------------------------------------------
void Session::OnConnect(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
@ -1299,13 +1584,13 @@ bool Register_IRC(HSQUIRRELVM vm)
{
using namespace IRC;
// Output debugging information
LogDbg("Beginning registration of <IRCSession> type");
LogDbg("Beginning registration of <IRC Session> type");
// IRC sessions should not be copied for the sake of simplicity
typedef NoCopy< Session > Allocator;
//typedef Default< Session > Allocator;
// Attempt to register the specified type
Sqrat::RootTable(vm).Bind(_SC("IRCSession"), Sqrat::Class< Session, Allocator >(vm, _SC("IRCSession"))
Sqrat::Class< Session/*, Allocator*/ > session(vm, _SC("CSession"));
/* Constructors */
.Ctor()
session.Ctor()
/* Metamethods */
.Func(_SC("_cmp"), &Session::Cmp)
.Func(_SC("_tostring"), &Session::ToString)
@ -1334,7 +1619,52 @@ bool Register_IRC(HSQUIRRELVM vm)
.Prop(_SC("on_dcc_chat_req"), &Session::GetOnDcc_Chat_Req, &Session::SetOnDcc_Chat_Req)
.Prop(_SC("on_dcc_send_req"), &Session::GetOnDcc_Send_Req, &Session::SetOnDcc_Send_Req)
.Prop(_SC("connected"), &Session::IsConnected)
.Prop(_SC("err_no"), &Session::GetErrNo)
.Prop(_SC("err_str"), &Session::GetErrStr)
.Prop(_SC("ctcp_version"), &Session::SetCtcpVersion)
/* Functions */
.Func(_SC("get_on_connect"), &Session::GetOnConnect)
.Func(_SC("get_on_nick"), &Session::GetOnNick)
.Func(_SC("get_on_quit"), &Session::GetOnQuit)
.Func(_SC("get_on_join"), &Session::GetOnJoin)
.Func(_SC("get_on_part"), &Session::GetOnPart)
.Func(_SC("get_on_mode"), &Session::GetOnMode)
.Func(_SC("get_on_umode"), &Session::GetOnUmode)
.Func(_SC("get_on_topic"), &Session::GetOnTopic)
.Func(_SC("get_on_kick"), &Session::GetOnKick)
.Func(_SC("get_on_channel"), &Session::GetOnChannel)
.Func(_SC("get_on_priv_msg"), &Session::GetOnPrivMSG)
.Func(_SC("get_on_notice"), &Session::GetOnNotice)
.Func(_SC("get_on_channel_notice"), &Session::GetOnChannel_Notice)
.Func(_SC("get_on_invite"), &Session::GetOnInvite)
.Func(_SC("get_on_ctcp_req"), &Session::GetOnCTCP_Req)
.Func(_SC("get_on_ctcp_rep"), &Session::GetOnCTCP_Rep)
.Func(_SC("get_on_ctcp_action"), &Session::GetOnCTCP_Action)
.Func(_SC("get_on_unknown"), &Session::GetOnUnknown)
.Func(_SC("get_on_numeric"), &Session::GetOnNumeric)
.Func(_SC("get_on_dcc_chat_req"), &Session::GetOnDcc_Chat_Req)
.Func(_SC("get_on_dcc_send_req"), &Session::GetOnDcc_Send_Req)
.Func(_SC("set_on_connect"), &Session::SetOnConnect_Env)
.Func(_SC("set_on_nick"), &Session::SetOnNick_Env)
.Func(_SC("set_on_quit"), &Session::SetOnQuit_Env)
.Func(_SC("set_on_join"), &Session::SetOnJoin_Env)
.Func(_SC("set_on_part"), &Session::SetOnPart_Env)
.Func(_SC("set_on_mode"), &Session::SetOnMode_Env)
.Func(_SC("set_on_umode"), &Session::SetOnUmode_Env)
.Func(_SC("set_on_topic"), &Session::SetOnTopic_Env)
.Func(_SC("set_on_kick"), &Session::SetOnKick_Env)
.Func(_SC("set_on_channel"), &Session::SetOnChannel_Env)
.Func(_SC("set_on_priv_msg"), &Session::SetOnPrivMSG_Env)
.Func(_SC("set_on_notice"), &Session::SetOnNotice_Env)
.Func(_SC("set_on_channel_notice"), &Session::SetOnChannel_Notice_Env)
.Func(_SC("set_on_invite"), &Session::SetOnInvite_Env)
.Func(_SC("set_on_ctcp_req"), &Session::SetOnCTCP_Req_Env)
.Func(_SC("set_on_ctcp_rep"), &Session::SetOnCTCP_Rep_Env)
.Func(_SC("set_on_ctcp_action"), &Session::SetOnCTCP_Action_Env)
.Func(_SC("set_on_unknown"), &Session::SetOnUnknown_Env)
.Func(_SC("set_on_numeric"), &Session::SetOnNumeric_Env)
.Func(_SC("set_on_dcc_chat_req"), &Session::SetOnDcc_Chat_Req_Env)
.Func(_SC("set_on_dcc_send_req"), &Session::SetOnDcc_Send_Req_Env)
.Func(_SC("disconnect"), &Session::Disconnect)
.Func(_SC("cmd_part"), &Session::CmdPart)
.Func(_SC("cmd_invite"), &Session::CmdInvite)
@ -1347,6 +1677,10 @@ bool Register_IRC(HSQUIRRELVM vm)
.Func(_SC("cmd_nick"), &Session::CmdNick)
.Func(_SC("cmd_whois"), &Session::CmdWhois)
.Func(_SC("cmd_send_raw"), &Session::SendRaw)
.Func(_SC("destroy_dcc"), &Session::DestroyDcc)
.Func(_SC("set_ctcp_version"), &Session::SetCtcpVersion)
.Func(_SC("set_option"), &Session::SetOption)
.Func(_SC("reset_option"), &Session::ResetOption)
/* Overloads */
.Overload< SQInt32 (Session::*)(const SQChar *, SQUint32, const SQChar *) >
(_SC("connect"), &Session::Connect)
@ -1391,11 +1725,22 @@ bool Register_IRC(HSQUIRRELVM vm)
.Overload< SQInt32 (Session::*)(void) >
(_SC("cmd_quit"), &Session::CmdQuit)
.Overload< SQInt32 (Session::*)(const SQChar *) >
(_SC("cmd_quit"), &Session::CmdQuit)
);
(_SC("cmd_quit"), &Session::CmdQuit);
// Output debugging information
LogDbg("Registration of <IRCSession> type was successful");
// Output debugging information
LogDbg("Beginning registration of <IRC functions> type");
// Attempt to register the free functions
Sqrat::Table ircns(vm);
ircns.Bind(_SC("CSession"), session);
ircns.Func(_SC("GetNick"), &GetNick);
ircns.Func(_SC("GetHost"), &GetHost);
ircns.Func(_SC("GetErrStr"), &irc_strerror);
// Output debugging information
LogDbg("Registration of <IRC functions> type was successful");
// Attempt to bind verything to the root table
Sqrat::RootTable(vm).Bind(_SC("IRC"), ircns);
// Output debugging information
LogDbg("Beginning registration of <IRC Constants> type");
// Attempt to register the error codes enumeration
Sqrat::ConstTable(vm).Enum(_SC("EIRCERR"), Sqrat::Enumeration(vm)

View File

@ -64,12 +64,12 @@ public:
/* --------------------------------------------------------------------------------------------
* ...
*/
Session(const Session & o) = delete;
Session(const Session & o) = default;
/* --------------------------------------------------------------------------------------------
* ...
*/
Session(Session && o) = delete;
Session(Session && o) = default;
/* --------------------------------------------------------------------------------------------
* ...
@ -79,12 +79,22 @@ public:
/* --------------------------------------------------------------------------------------------
* ...
*/
Session & operator = (const Session & o) = delete;
Session & operator = (const Session & o) = default;
/* --------------------------------------------------------------------------------------------
* ...
*/
Session & operator = (Session && o) = delete;
Session & operator = (Session && o) = default;
/* --------------------------------------------------------------------------------------------
* ...
*/
void Process(SQFloat delta) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
void VMClose() noexcept;
/* --------------------------------------------------------------------------------------------
* ...
@ -119,7 +129,7 @@ public:
/* --------------------------------------------------------------------------------------------
* ...
*/
Function & GetOnConnect() noexcept;
Function GetOnConnect() noexcept;
/* --------------------------------------------------------------------------------------------
* ...
@ -129,7 +139,12 @@ public:
/* --------------------------------------------------------------------------------------------
* ...
*/
Function & GetOnNick() noexcept;
void SetOnConnect_Env(SqObj & env, Function & func) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
Function GetOnNick() noexcept;
/* --------------------------------------------------------------------------------------------
* ...
@ -139,7 +154,12 @@ public:
/* --------------------------------------------------------------------------------------------
* ...
*/
Function & GetOnQuit() noexcept;
void SetOnNick_Env(SqObj & env, Function & func) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
Function GetOnQuit() noexcept;
/* --------------------------------------------------------------------------------------------
* ...
@ -149,7 +169,12 @@ public:
/* --------------------------------------------------------------------------------------------
* ...
*/
Function & GetOnJoin() noexcept;
void SetOnQuit_Env(SqObj & env, Function & func) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
Function GetOnJoin() noexcept;
/* --------------------------------------------------------------------------------------------
* ...
@ -159,7 +184,12 @@ public:
/* --------------------------------------------------------------------------------------------
* ...
*/
Function & GetOnPart() noexcept;
void SetOnJoin_Env(SqObj & env, Function & func) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
Function GetOnPart() noexcept;
/* --------------------------------------------------------------------------------------------
* ...
@ -169,7 +199,12 @@ public:
/* --------------------------------------------------------------------------------------------
* ...
*/
Function & GetOnMode() noexcept;
void SetOnPart_Env(SqObj & env, Function & func) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
Function GetOnMode() noexcept;
/* --------------------------------------------------------------------------------------------
* ...
@ -179,7 +214,12 @@ public:
/* --------------------------------------------------------------------------------------------
* ...
*/
Function & GetOnUmode() noexcept;
void SetOnMode_Env(SqObj & env, Function & func) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
Function GetOnUmode() noexcept;
/* --------------------------------------------------------------------------------------------
* ...
@ -189,7 +229,12 @@ public:
/* --------------------------------------------------------------------------------------------
* ...
*/
Function & GetOnTopic() noexcept;
void SetOnUmode_Env(SqObj & env, Function & func) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
Function GetOnTopic() noexcept;
/* --------------------------------------------------------------------------------------------
* ...
@ -199,7 +244,12 @@ public:
/* --------------------------------------------------------------------------------------------
* ...
*/
Function & GetOnKick() noexcept;
void SetOnTopic_Env(SqObj & env, Function & func) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
Function GetOnKick() noexcept;
/* --------------------------------------------------------------------------------------------
* ...
@ -209,7 +259,12 @@ public:
/* --------------------------------------------------------------------------------------------
* ...
*/
Function & GetOnChannel() noexcept;
void SetOnKick_Env(SqObj & env, Function & func) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
Function GetOnChannel() noexcept;
/* --------------------------------------------------------------------------------------------
* ...
@ -219,7 +274,12 @@ public:
/* --------------------------------------------------------------------------------------------
* ...
*/
Function & GetOnPrivMSG() noexcept;
void SetOnChannel_Env(SqObj & env, Function & func) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
Function GetOnPrivMSG() noexcept;
/* --------------------------------------------------------------------------------------------
* ...
@ -229,7 +289,12 @@ public:
/* --------------------------------------------------------------------------------------------
* ...
*/
Function & GetOnNotice() noexcept;
void SetOnPrivMSG_Env(SqObj & env, Function & func) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
Function GetOnNotice() noexcept;
/* --------------------------------------------------------------------------------------------
* ...
@ -239,7 +304,12 @@ public:
/* --------------------------------------------------------------------------------------------
* ...
*/
Function & GetOnChannel_Notice() noexcept;
void SetOnNotice_Env(SqObj & env, Function & func) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
Function GetOnChannel_Notice() noexcept;
/* --------------------------------------------------------------------------------------------
* ...
@ -249,7 +319,12 @@ public:
/* --------------------------------------------------------------------------------------------
* ...
*/
Function & GetOnInvite() noexcept;
void SetOnChannel_Notice_Env(SqObj & env, Function & func) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
Function GetOnInvite() noexcept;
/* --------------------------------------------------------------------------------------------
* ...
@ -259,7 +334,12 @@ public:
/* --------------------------------------------------------------------------------------------
* ...
*/
Function & GetOnCTCP_Req() noexcept;
void SetOnInvite_Env(SqObj & env, Function & func) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
Function GetOnCTCP_Req() noexcept;
/* --------------------------------------------------------------------------------------------
* ...
@ -269,7 +349,12 @@ public:
/* --------------------------------------------------------------------------------------------
* ...
*/
Function & GetOnCTCP_Rep() noexcept;
void SetOnCTCP_Req_Env(SqObj & env, Function & func) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
Function GetOnCTCP_Rep() noexcept;
/* --------------------------------------------------------------------------------------------
* ...
@ -279,7 +364,12 @@ public:
/* --------------------------------------------------------------------------------------------
* ...
*/
Function & GetOnCTCP_Action() noexcept;
void SetOnCTCP_Rep_Env(SqObj & env, Function & func) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
Function GetOnCTCP_Action() noexcept;
/* --------------------------------------------------------------------------------------------
* ...
@ -289,7 +379,12 @@ public:
/* --------------------------------------------------------------------------------------------
* ...
*/
Function & GetOnUnknown() noexcept;
void SetOnCTCP_Action_Env(SqObj & env, Function & func) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
Function GetOnUnknown() noexcept;
/* --------------------------------------------------------------------------------------------
* ...
@ -299,7 +394,12 @@ public:
/* --------------------------------------------------------------------------------------------
* ...
*/
Function & GetOnNumeric() noexcept;
void SetOnUnknown_Env(SqObj & env, Function & func) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
Function GetOnNumeric() noexcept;
/* --------------------------------------------------------------------------------------------
* ...
@ -309,7 +409,12 @@ public:
/* --------------------------------------------------------------------------------------------
* ...
*/
Function & GetOnDcc_Chat_Req() noexcept;
void SetOnNumeric_Env(SqObj & env, Function & func) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
Function GetOnDcc_Chat_Req() noexcept;
/* --------------------------------------------------------------------------------------------
* ...
@ -319,13 +424,23 @@ public:
/* --------------------------------------------------------------------------------------------
* ...
*/
Function & GetOnDcc_Send_Req() noexcept;
void SetOnDcc_Chat_Req_Env(SqObj & env, Function & func) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
Function GetOnDcc_Send_Req() noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
void SetOnDcc_Send_Req(Function & func) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
void SetOnDcc_Send_Req_Env(SqObj & env, Function & func) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
@ -510,6 +625,36 @@ public:
*/
SQInt32 SendRaw(const SQChar * str) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
SQInt32 DestroyDcc(SQUint32 dccid) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
void SetCtcpVersion(const SQChar * version) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
SQInt32 GetErrNo() noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
const SQChar * GetErrStr() noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
void SetOption(SQUint32 option) noexcept;
/* --------------------------------------------------------------------------------------------
* ...
*/
void ResetOption(SQUint32 option) noexcept;
private:
/* --------------------------------------------------------------------------------------------
@ -517,7 +662,9 @@ private:
*/
irc_session_t* m_Session;
// --------------------------------------------------------------------------------------------
/* --------------------------------------------------------------------------------------------
* ...
*/
Function m_OnConnect;
Function m_OnNick;
Function m_OnQuit;
@ -540,9 +687,14 @@ private:
Function m_OnDcc_Chat_Req;
Function m_OnDcc_Send_Req;
// --------------------------------------------------------------------------------------------
/* --------------------------------------------------------------------------------------------
* ...
*/
String m_Tag;
/* --------------------------------------------------------------------------------------------
* ...
*/
SqObj m_Data;
public: