mirror of
https://gitlab.com/niansa/asbots.git
synced 2025-03-06 20:48:25 +01:00
Just minor code style improvements
This commit is contained in:
parent
3d01909801
commit
36717eb59c
3 changed files with 36 additions and 45 deletions
44
instance.cpp
44
instance.cpp
|
@ -18,7 +18,7 @@ inline std::string_view operator ""_sv(const char *str, unsigned long len) {
|
||||||
return {str, static_cast<std::string_view::size_type>(len)};
|
return {str, static_cast<std::string_view::size_type>(len)};
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::vector<std::string_view> strSplit(std::string_view s, char delimiter, std::vector<std::string>::size_type times = 0) {
|
static std::vector<std::string_view> strSplit(std::string_view s, char delimiter, size_t times = 0) {
|
||||||
std::vector<std::string_view> to_return;
|
std::vector<std::string_view> to_return;
|
||||||
decltype(s.size()) start = 0, finish = 0;
|
decltype(s.size()) start = 0, finish = 0;
|
||||||
while ((finish = s.find_first_of(delimiter, start)) != std::string_view::npos) {
|
while ((finish = s.find_first_of(delimiter, start)) != std::string_view::npos) {
|
||||||
|
@ -37,7 +37,7 @@ static std::tuple<std::string_view, std::string_view> colonSplit(std::string_vie
|
||||||
return {s, ""};
|
return {s, ""};
|
||||||
}
|
}
|
||||||
// Split there
|
// Split there
|
||||||
return {s.substr(0, colonPos+1), s.substr(colonPos+2, s.size()-1)};
|
return {s.substr(0, colonPos), s.substr(colonPos+2, s.size()-1)};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -118,8 +118,8 @@ void User::parse_euid(const Event& event, NetworkInfo& netInfo) {
|
||||||
realname = std::move(event.text);
|
realname = std::move(event.text);
|
||||||
}
|
}
|
||||||
|
|
||||||
void User::removeChannel(const s_Channel& channel) {
|
void User::removeChannel(const u_Channel& channel) {
|
||||||
std::remove(channels.begin(), channels.end(), channel);
|
std::remove_if(channels.begin(), channels.end(), [&] (auto obj) {return obj.get() == channel;});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -135,7 +135,6 @@ void Channel::parse_sjoin(const Event& event, Cache& cache, NetworkInfo& netInfo
|
||||||
mode.parse(split[2], netInfo);
|
mode.parse(split[2], netInfo);
|
||||||
// Get members
|
// Get members
|
||||||
for (auto& raw_uuid : strSplit(event.text, ' ')) {
|
for (auto& raw_uuid : strSplit(event.text, ' ')) {
|
||||||
s_User member;
|
|
||||||
// Erase leading sign
|
// Erase leading sign
|
||||||
if (raw_uuid.size() > UUID_len) {
|
if (raw_uuid.size() > UUID_len) {
|
||||||
raw_uuid = {raw_uuid.data()+1, raw_uuid.size()-1};
|
raw_uuid = {raw_uuid.data()+1, raw_uuid.size()-1};
|
||||||
|
@ -145,18 +144,18 @@ void Channel::parse_sjoin(const Event& event, Cache& cache, NetworkInfo& netInfo
|
||||||
if (res == cache.users.end()) {
|
if (res == cache.users.end()) {
|
||||||
throw DesyncError();
|
throw DesyncError();
|
||||||
}
|
}
|
||||||
member = *res;
|
u_User& member = *res;
|
||||||
// Append member to list
|
// Append member to list
|
||||||
members.push_back(std::move(member));
|
members.push_back(member);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Channel::removeMember(const s_User &member) {
|
void Channel::removeMember(const u_User& member) {
|
||||||
std::remove(members.begin(), members.end(), member);
|
std::remove_if(members.begin(), members.end(), [&] (auto obj) {return obj.get() == member;});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::vector<s_User>::iterator Cache::find_user_by_nick(std::string_view nick) {
|
std::vector<u_User>::iterator Cache::find_user_by_nick(std::string_view nick) {
|
||||||
for (auto it = users.begin(); ; it++) {
|
for (auto it = users.begin(); ; it++) {
|
||||||
if (it == users.end() || it->get()->nick == nick) {
|
if (it == users.end() || it->get()->nick == nick) {
|
||||||
return it;
|
return it;
|
||||||
|
@ -164,7 +163,7 @@ std::vector<s_User>::iterator Cache::find_user_by_nick(std::string_view nick) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<s_User>::iterator Cache::find_user_by_uid(const UUID& uid) {
|
std::vector<u_User>::iterator Cache::find_user_by_uid(const UUID& uid) {
|
||||||
for (auto it = users.begin(); ; it++) {
|
for (auto it = users.begin(); ; it++) {
|
||||||
if (it == users.end() || it->get()->uid == uid) {
|
if (it == users.end() || it->get()->uid == uid) {
|
||||||
return it;
|
return it;
|
||||||
|
@ -172,7 +171,7 @@ std::vector<s_User>::iterator Cache::find_user_by_uid(const UUID& uid) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<s_Channel>::iterator Cache::find_channel_by_name(std::string_view name) {
|
std::vector<u_Channel>::iterator Cache::find_channel_by_name(std::string_view name) {
|
||||||
for (auto it = channels.begin(); ; it++) {
|
for (auto it = channels.begin(); ; it++) {
|
||||||
if (it == channels.end() || it->get()->name == name) {
|
if (it == channels.end() || it->get()->name == name) {
|
||||||
return it;
|
return it;
|
||||||
|
@ -183,7 +182,7 @@ std::vector<s_Channel>::iterator Cache::find_channel_by_name(std::string_view na
|
||||||
|
|
||||||
async::result<void> Instance::run() {
|
async::result<void> Instance::run() {
|
||||||
// Create connection
|
// Create connection
|
||||||
socket = new uvpp::tcp{s};
|
socket.reset(new uvpp::tcp{s});
|
||||||
co_await socket->connect(addr);
|
co_await socket->connect(addr);
|
||||||
socket->recv_start();
|
socket->recv_start();
|
||||||
|
|
||||||
|
@ -231,9 +230,9 @@ async::result<void> Instance::run() {
|
||||||
}
|
}
|
||||||
|
|
||||||
async::result<void> Instance::login() {
|
async::result<void> Instance::login() {
|
||||||
co_await socket->send("PASS {} TS 6 :{}\n"_format(config.auth.send_password, config.server.uid.str()));
|
co_await socket->send("PASS {} TS 6 :{}\n"_format(config.get().auth.send_password, config.get().server.uid.str()));
|
||||||
co_await socket->send("CAPAB :QS EX IE KLN UNKLN ENCAP TB SERVICES EUID EOPMOD MLOCK\n"_sv);
|
co_await socket->send("CAPAB :QS EX IE KLN UNKLN ENCAP TB SERVICES EUID EOPMOD MLOCK\n"_sv);
|
||||||
co_await socket->send("SERVER {} 1 :{}{}\n"_format(config.server.name, config.server.hidden ? "(H) " : "", config.server.description));
|
co_await socket->send("SERVER {} 1 :{}{}\n"_format(config.get().server.name, config.get().server.hidden ? "(H) " : "", config.get().server.description));
|
||||||
co_await socket->send("SVINFO 6 3 0 :{}\n"_format(time(nullptr)));
|
co_await socket->send("SVINFO 6 3 0 :{}\n"_format(time(nullptr)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -253,7 +252,7 @@ async::result<void> Instance::process(const Command command) {
|
||||||
// Check password
|
// Check password
|
||||||
{
|
{
|
||||||
auto given_password = strSplit(command.args, ' ', 1)[0];
|
auto given_password = strSplit(command.args, ' ', 1)[0];
|
||||||
if (given_password != config.auth.accept_password) {
|
if (given_password != config.get().auth.accept_password) {
|
||||||
throw ConnectionError("Server supplied wrong password during authentication");
|
throw ConnectionError("Server supplied wrong password during authentication");
|
||||||
}
|
}
|
||||||
authed = true;
|
authed = true;
|
||||||
|
@ -274,7 +273,7 @@ async::result<void> Instance::process(const Command command) {
|
||||||
co_await burst();
|
co_await burst();
|
||||||
}
|
}
|
||||||
// Reply
|
// Reply
|
||||||
co_await socket->send(":{} PONG {} {} :{}\n"_format(config.server.uid.str(), config.server.name, command.args, command.text));
|
co_await socket->send(":{} PONG {} {} :{}\n"_format(config.get().server.uid.str(), config.get().server.name, command.args, command.text));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -287,7 +286,7 @@ async::result<void> Instance::process(const Event event) {
|
||||||
// Fetched info
|
// Fetched info
|
||||||
else if (event.name == "005") {
|
else if (event.name == "005") {
|
||||||
// Check if that 005 was for me
|
// Check if that 005 was for me
|
||||||
if (event.args.find(config.server.uid.str()) != 0) {
|
if (event.args.find(config.get().server.uid.str()) != 0) {
|
||||||
co_return;
|
co_return;
|
||||||
}
|
}
|
||||||
// Split the list
|
// Split the list
|
||||||
|
@ -301,7 +300,6 @@ async::result<void> Instance::process(const Event event) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// Check if we've got the right key
|
// Check if we've got the right key
|
||||||
std::cout << split[0] << ' ' << split[1] << std::endl;
|
|
||||||
if (split[0] == "NETWORK") {
|
if (split[0] == "NETWORK") {
|
||||||
netInfo.name = std::move(split[1]);
|
netInfo.name = std::move(split[1]);
|
||||||
netInfo.fields_received++;
|
netInfo.fields_received++;
|
||||||
|
@ -327,7 +325,7 @@ async::result<void> Instance::process(const Event event) {
|
||||||
if (event.name == "EUID") {
|
if (event.name == "EUID") {
|
||||||
// User connected to the network
|
// User connected to the network
|
||||||
// Create user and parse event
|
// Create user and parse event
|
||||||
auto user = std::make_shared<User>();
|
auto user = std::make_unique<User>();
|
||||||
user->parse_euid(event, netInfo);
|
user->parse_euid(event, netInfo);
|
||||||
// Append user to cache
|
// Append user to cache
|
||||||
cache.users.push_back(std::move(user));
|
cache.users.push_back(std::move(user));
|
||||||
|
@ -340,7 +338,7 @@ async::result<void> Instance::process(const Event event) {
|
||||||
}
|
}
|
||||||
// Delete user from all channels
|
// Delete user from all channels
|
||||||
for (auto& channel : res->get()->channels) {
|
for (auto& channel : res->get()->channels) {
|
||||||
channel->removeMember({*res});
|
channel.get()->removeMember({*res});
|
||||||
}
|
}
|
||||||
// Delete user from cache
|
// Delete user from cache
|
||||||
cache.users.erase(res);
|
cache.users.erase(res);
|
||||||
|
@ -367,10 +365,10 @@ async::result<void> Instance::process(const Event event) {
|
||||||
else if (event.name == "SJOIN") {
|
else if (event.name == "SJOIN") {
|
||||||
// Channel was created
|
// Channel was created
|
||||||
// Create channel and parse event
|
// Create channel and parse event
|
||||||
auto channel = std::make_shared<Channel>();
|
auto channel = std::make_unique<Channel>();
|
||||||
channel->parse_sjoin(event, cache, netInfo);
|
channel->parse_sjoin(event, cache, netInfo);
|
||||||
// Append channel to cache
|
// Append channel to cache
|
||||||
cache.channels.push_back(channel);
|
cache.channels.push_back(std::move(channel));
|
||||||
} else if (event.name == "TOPIC" || event.name == "TB") {
|
} else if (event.name == "TOPIC" || event.name == "TB") {
|
||||||
// Channels topic changed
|
// Channels topic changed
|
||||||
// Find channel in cache
|
// Find channel in cache
|
||||||
|
|
34
instance.hpp
34
instance.hpp
|
@ -35,15 +35,15 @@ struct User;
|
||||||
struct Channel;
|
struct Channel;
|
||||||
struct Cache;
|
struct Cache;
|
||||||
struct NetworkInfo;
|
struct NetworkInfo;
|
||||||
using s_User = std::shared_ptr<User>;
|
using u_User = std::unique_ptr<User>;
|
||||||
using s_Channel = std::shared_ptr<Channel>;
|
using u_Channel = std::unique_ptr<Channel>;
|
||||||
|
|
||||||
struct Event {
|
struct Event {
|
||||||
AnyUID sender;
|
AnyUID sender;
|
||||||
std::string name, args, text;
|
std::string name, args, text;
|
||||||
|
|
||||||
std::string dump() const {
|
std::string dump() const {
|
||||||
return fmt::format(":{} {} {}{}\n", sender.str(), name, args, (text.empty()?"":":"+text));
|
return fmt::format(":{} {} {}{}\n", sender.str(), name, args, (text.empty()?"":" :"+text));
|
||||||
}
|
}
|
||||||
void parse(std::string_view str);
|
void parse(std::string_view str);
|
||||||
};
|
};
|
||||||
|
@ -61,7 +61,6 @@ struct ModeSet {
|
||||||
std::string str;
|
std::string str;
|
||||||
|
|
||||||
void parse(std::string_view str, NetworkInfo& netInfo);
|
void parse(std::string_view str, NetworkInfo& netInfo);
|
||||||
ModeSet() {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct User {
|
struct User {
|
||||||
|
@ -74,7 +73,7 @@ struct User {
|
||||||
std::string realhost;
|
std::string realhost;
|
||||||
UUID uid;
|
UUID uid;
|
||||||
std::string realname;
|
std::string realname;
|
||||||
std::vector<s_Channel> channels;
|
std::vector<std::reference_wrapper<u_Channel>> channels;
|
||||||
|
|
||||||
Event dump() const {
|
Event dump() const {
|
||||||
return Event{
|
return Event{
|
||||||
|
@ -84,7 +83,7 @@ struct User {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
void parse_euid(const Event &event, NetworkInfo& netInfo);
|
void parse_euid(const Event &event, NetworkInfo& netInfo);
|
||||||
void removeChannel(const s_Channel &channel);
|
void removeChannel(const u_Channel &channel);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Channel {
|
struct Channel {
|
||||||
|
@ -92,19 +91,19 @@ struct Channel {
|
||||||
std::string name;
|
std::string name;
|
||||||
ModeSet mode;
|
ModeSet mode;
|
||||||
std::string topic;
|
std::string topic;
|
||||||
std::vector<s_User> members;
|
std::vector<std::reference_wrapper<u_User>> members;
|
||||||
|
|
||||||
void parse_sjoin(const Event &event, Cache& cache, NetworkInfo& netInfo);
|
void parse_sjoin(const Event &event, Cache& cache, NetworkInfo& netInfo);
|
||||||
void removeMember(const s_User& member);
|
void removeMember(const u_User& member);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Cache {
|
struct Cache {
|
||||||
std::vector<s_User> users;
|
std::vector<u_User> users;
|
||||||
std::vector<s_Channel> channels;
|
std::vector<u_Channel> channels;
|
||||||
|
|
||||||
std::vector<s_User>::iterator find_user_by_nick(std::string_view nick);
|
std::vector<u_User>::iterator find_user_by_nick(std::string_view nick);
|
||||||
std::vector<s_User>::iterator find_user_by_uid(const UUID& uid);
|
std::vector<u_User>::iterator find_user_by_uid(const UUID& uid);
|
||||||
std::vector<s_Channel>::iterator find_channel_by_name(std::string_view name);
|
std::vector<u_Channel>::iterator find_channel_by_name(std::string_view name);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct NetworkInfo {
|
struct NetworkInfo {
|
||||||
|
@ -134,10 +133,10 @@ struct NetworkInfo {
|
||||||
};
|
};
|
||||||
|
|
||||||
class Instance {
|
class Instance {
|
||||||
uvpp::loop_service &s;
|
std::reference_wrapper<uvpp::loop_service> s;
|
||||||
const Config& config;
|
std::reference_wrapper<const Config> config;
|
||||||
uvpp::Addr addr;
|
uvpp::Addr addr;
|
||||||
uvpp::tcp *socket = nullptr;
|
std::unique_ptr<uvpp::tcp> socket;
|
||||||
Config::Server connected_server;
|
Config::Server connected_server;
|
||||||
NetworkInfo netInfo;
|
NetworkInfo netInfo;
|
||||||
Cache cache;
|
Cache cache;
|
||||||
|
@ -149,9 +148,6 @@ public:
|
||||||
Instance(uvpp::loop_service &s, const Config& config) : s(s), config(config) {
|
Instance(uvpp::loop_service &s, const Config& config) : s(s), config(config) {
|
||||||
addr = uvpp::make_ipv4(config.connection.addr, config.connection.port);
|
addr = uvpp::make_ipv4(config.connection.addr, config.connection.port);
|
||||||
}
|
}
|
||||||
~Instance() {
|
|
||||||
if (socket) delete socket;
|
|
||||||
}
|
|
||||||
|
|
||||||
async::result<void> run();
|
async::result<void> run();
|
||||||
async::result<void> login();
|
async::result<void> login();
|
||||||
|
|
3
main.cpp
3
main.cpp
|
@ -3,9 +3,6 @@
|
||||||
|
|
||||||
#include <uvpp.hpp>
|
#include <uvpp.hpp>
|
||||||
#include <async/result.hpp>
|
#include <async/result.hpp>
|
||||||
#include <iostream>
|
|
||||||
#include <string>
|
|
||||||
#include <string_view>
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue