EHS/src/io/socket/rest/TwitchChat.cpp

177 lines
3.1 KiB
C++

#include "ehs/io/socket/rest/TwitchChat.h"
#include "ehs/io/socket/DNS_LNX.h"
#include "ehs/io/Console.h"
namespace ehs
{
TwitchChat::~TwitchChat()
{
UnInitialize();
}
TwitchChat::TwitchChat()
: initialized(false)
{
}
TwitchChat::TwitchChat(const Str_8& username)
: username(username), initialized(false)
{
}
TwitchChat::TwitchChat(const Str_8& username, const Str_8& token)
: username(username), token(token), initialized(false)
{
}
TwitchChat::TwitchChat(const TwitchChat& chat)
: username(chat.username), token(chat.token), initialized(false)
{
}
TwitchChat& TwitchChat::operator=(const TwitchChat& chat)
{
if (this == &chat)
return *this;
client = TCP();
username = chat.username;
token = chat.token;
channel = Str_8();
initialized = false;
return *this;
}
void TwitchChat::SetToken(const Str_8& newToken)
{
token = newToken;
}
void TwitchChat::Initialize()
{
if (initialized)
return;
client = TCP(ehs::AddrType::IPV4);
client.Connect(DNS::Resolve("irc.chat.twitch.tv"), 6667);
client.SetBlocking(false);
Str_8 r("PASS oauth:" + token + "\r\n");
Console::Write_8("< " + r, false);
client.Send(r.ToBytes(), (int) r.Size());
r = "NICK " + username + "\r\n";
Console::Write_8("< " + r, false);
client.Send(r.ToBytes(), (int) r.Size());
initialized = true;
}
void TwitchChat::UnInitialize()
{
if (!initialized)
return;
client.Release();
initialized = false;
}
void TwitchChat::JoinChannel(const Str_8& newChannel)
{
if (!initialized || channel == newChannel)
return;
channel = newChannel;
Str_8 r("Join #" + newChannel + "\r\n");
Console::Write_8("< " + r, false);
client.Send(r.ToBytes(), (int) r.Size());
}
void TwitchChat::LeaveChannel()
{
if (!initialized)
return;
Str_8 r("PART #" + channel + "\r\n");
Console::Write_8("< " + r, false);
client.Send(r.ToBytes(), (int) r.Size());
}
void TwitchChat::SendPong()
{
if (!initialized)
return;
Str_8 r("PONG :tmi.twitch.tv\r\n");
Console::Write_8("< " + r, false);
client.Send(r.ToBytes(), (int) r.Size());
}
void TwitchChat::SendMsg(const Str_8& msg)
{
if (!initialized)
return;
Str_8 r("PRIVMSG #" + channel + " :" + msg + "\r\n");
Console::Write_8("< " + r, false);
client.Send(r.ToBytes(), (int) r.Size());
//irc.SendStr(":" + username + "!" + username + "@" + username + ".tmi.twitch.tv PRIVMSG #" + username + " :" + msg + "\r\n");
}
void TwitchChat::WhisperMsg(const Str_8& user, const Str_8& msg)
{
if (!initialized)
return;
Str_8 r("PRIVMSG #jtv :/w " + user + " " + msg + "\r\n");
Console::Write_8("< " + r, false);
client.Send(r.ToBytes(), (int) r.Size());
}
Str_8 TwitchChat::RecvMsg()
{
Str_8 result;
Byte received[1024];
UInt_64 recvSize = 0;
do
{
recvSize = client.Receive(received, 1024);
if (recvSize)
result.Push((Char_8*) received, recvSize);
else
break;
} while (!result.Find("\r\n", nullptr, SearchPattern::RIGHT_LEFT));
return result;
}
Str_8 TwitchChat::GetUsername() const
{
return username;
}
Str_8 TwitchChat::GetChannel() const
{
return channel;
}
}