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)};
|
||||
}
|
||||
|
||||
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
|
||||
|
|
34
instance.hpp
34
instance.hpp
|
@ -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();
|
||||
|
|
3
main.cpp
3
main.cpp
|
@ -3,9 +3,6 @@
|
|||
|
||||
#include <uvpp.hpp>
|
||||
#include <async/result.hpp>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <string_view>
|
||||
using namespace std;
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue