1
0
Fork 0
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:
Nils 2021-06-18 22:50:21 +02:00
parent 3d01909801
commit 36717eb59c
3 changed files with 36 additions and 45 deletions

View file

@ -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

View file

@ -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();

View file

@ -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;