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)};
}
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;
decltype(s.size()) start = 0, finish = 0;
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, ""};
}
// 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);
}
void User::removeChannel(const s_Channel& channel) {
std::remove(channels.begin(), channels.end(), channel);
void User::removeChannel(const u_Channel& 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);
// Get members
for (auto& raw_uuid : strSplit(event.text, ' ')) {
s_User member;
// Erase leading sign
if (raw_uuid.size() > UUID_len) {
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()) {
throw DesyncError();
}
member = *res;
u_User& member = *res;
// Append member to list
members.push_back(std::move(member));
members.push_back(member);
}
}
void Channel::removeMember(const s_User &member) {
std::remove(members.begin(), members.end(), member);
void Channel::removeMember(const u_User& 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++) {
if (it == users.end() || it->get()->nick == nick) {
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++) {
if (it == users.end() || it->get()->uid == uid) {
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++) {
if (it == channels.end() || it->get()->name == name) {
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() {
// Create connection
socket = new uvpp::tcp{s};
socket.reset(new uvpp::tcp{s});
co_await socket->connect(addr);
socket->recv_start();
@ -231,9 +230,9 @@ async::result<void> Instance::run() {
}
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("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)));
}
@ -253,7 +252,7 @@ async::result<void> Instance::process(const Command command) {
// Check password
{
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");
}
authed = true;
@ -274,7 +273,7 @@ async::result<void> Instance::process(const Command command) {
co_await burst();
}
// 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
else if (event.name == "005") {
// 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;
}
// Split the list
@ -301,7 +300,6 @@ async::result<void> Instance::process(const Event event) {
continue;
}
// Check if we've got the right key
std::cout << split[0] << ' ' << split[1] << std::endl;
if (split[0] == "NETWORK") {
netInfo.name = std::move(split[1]);
netInfo.fields_received++;
@ -327,7 +325,7 @@ async::result<void> Instance::process(const Event event) {
if (event.name == "EUID") {
// User connected to the network
// Create user and parse event
auto user = std::make_shared<User>();
auto user = std::make_unique<User>();
user->parse_euid(event, netInfo);
// Append user to cache
cache.users.push_back(std::move(user));
@ -340,7 +338,7 @@ async::result<void> Instance::process(const Event event) {
}
// Delete user from all channels
for (auto& channel : res->get()->channels) {
channel->removeMember({*res});
channel.get()->removeMember({*res});
}
// Delete user from cache
cache.users.erase(res);
@ -367,10 +365,10 @@ async::result<void> Instance::process(const Event event) {
else if (event.name == "SJOIN") {
// Channel was created
// Create channel and parse event
auto channel = std::make_shared<Channel>();
auto channel = std::make_unique<Channel>();
channel->parse_sjoin(event, cache, netInfo);
// Append channel to cache
cache.channels.push_back(channel);
cache.channels.push_back(std::move(channel));
} else if (event.name == "TOPIC" || event.name == "TB") {
// Channels topic changed
// Find channel in cache

View file

@ -35,15 +35,15 @@ struct User;
struct Channel;
struct Cache;
struct NetworkInfo;
using s_User = std::shared_ptr<User>;
using s_Channel = std::shared_ptr<Channel>;
using u_User = std::unique_ptr<User>;
using u_Channel = std::unique_ptr<Channel>;
struct Event {
AnyUID sender;
std::string name, args, text;
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);
};
@ -61,7 +61,6 @@ struct ModeSet {
std::string str;
void parse(std::string_view str, NetworkInfo& netInfo);
ModeSet() {}
};
struct User {
@ -74,7 +73,7 @@ struct User {
std::string realhost;
UUID uid;
std::string realname;
std::vector<s_Channel> channels;
std::vector<std::reference_wrapper<u_Channel>> channels;
Event dump() const {
return Event{
@ -84,7 +83,7 @@ struct User {
};
}
void parse_euid(const Event &event, NetworkInfo& netInfo);
void removeChannel(const s_Channel &channel);
void removeChannel(const u_Channel &channel);
};
struct Channel {
@ -92,19 +91,19 @@ struct Channel {
std::string name;
ModeSet mode;
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 removeMember(const s_User& member);
void removeMember(const u_User& member);
};
struct Cache {
std::vector<s_User> users;
std::vector<s_Channel> channels;
std::vector<u_User> users;
std::vector<u_Channel> channels;
std::vector<s_User>::iterator find_user_by_nick(std::string_view nick);
std::vector<s_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_User>::iterator find_user_by_nick(std::string_view nick);
std::vector<u_User>::iterator find_user_by_uid(const UUID& uid);
std::vector<u_Channel>::iterator find_channel_by_name(std::string_view name);
};
struct NetworkInfo {
@ -134,10 +133,10 @@ struct NetworkInfo {
};
class Instance {
uvpp::loop_service &s;
const Config& config;
std::reference_wrapper<uvpp::loop_service> s;
std::reference_wrapper<const Config> config;
uvpp::Addr addr;
uvpp::tcp *socket = nullptr;
std::unique_ptr<uvpp::tcp> socket;
Config::Server connected_server;
NetworkInfo netInfo;
Cache cache;
@ -149,9 +148,6 @@ public:
Instance(uvpp::loop_service &s, const Config& config) : s(s), config(config) {
addr = uvpp::make_ipv4(config.connection.addr, config.connection.port);
}
~Instance() {
if (socket) delete socket;
}
async::result<void> run();
async::result<void> login();

View file

@ -3,9 +3,6 @@
#include <uvpp.hpp>
#include <async/result.hpp>
#include <iostream>
#include <string>
#include <string_view>
using namespace std;