summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2025-03-05 14:03:58 +0800
committerlittleblack111 <littleblack11111@gmail.com>2025-03-05 17:33:49 +0800
commit9210605f8e19ede6bac74e0ef860d8759db1c9f1 (patch)
tree81d9fcddd7bfdec096b4ff2b81faa8a91f5dddc9 /src
parent63867d0d1a21be521a0049cdc98e25c0af95f9f0 (diff)
session: dynamic onErrno
refactor: read(std::string)
Diffstat (limited to 'src')
-rw-r--r--src/session.cpp37
-rw-r--r--src/session.hpp6
2 files changed, 19 insertions, 24 deletions
diff --git a/src/session.cpp b/src/session.cpp
index e63d2ab..bfadb5d 100644
--- a/src/session.cpp
+++ b/src/session.cpp
@@ -1,6 +1,5 @@
#include "session.hpp"
#include <cerrno>
-#include <cmath>
#include <cstring>
#include <print>
#include <sys/socket.h>
@@ -23,8 +22,14 @@ void CSession::onDisconnect() const {
std::println("Client disconnected");
}
-void CSession::onErrno() const {
- std::println("Error: {}", strerror(errno));
+void CSession::onErrno(eEventType eventType) const {
+ const auto err = strerror(errno);
+ switch (eventType) {
+ case READ:
+ std::println("Error while reading: {}", err);
+ case WRITE:
+ std::println("Error while writing: {}", err);
+ }
}
void CSession::onRecv(SRecvData &data) const {
@@ -44,7 +49,7 @@ CSession::SRecvData CSession::read() {
ssize_t dataSize = recv(m_sockfd.get(), recvData.data, recvData.dataSize, 0);
if (dataSize < 0) {
recvData.good = false;
- onErrno();
+ onErrno(READ);
}
if (dataSize == 0) {
recvData.good = false;
@@ -56,21 +61,7 @@ CSession::SRecvData CSession::read() {
CSession::SRecvData CSession::read(std::string &msg) {
write(msg);
- SRecvData recvData;
- ssize_t dataSize = recv(m_sockfd.get(), recvData.data, recvData.dataSize, 0);
-
- if (dataSize > 0) {
- recvData.good = false;
-
- if (dataSize < 0)
- onErrno();
-
- if (dataSize == 0)
- onDisconnect();
- }
- onRecv(recvData);
-
- return recvData;
+ return read();
}
void CSession::run() {
@@ -96,11 +87,11 @@ bool CSession::isValid() const {
}
bool CSession::write(const std::string &msg) const {
- bool bad = false;
- ssize_t bytes_sent = send(m_sockfd.get(), msg.c_str(), msg.size(), 0);
- if (bytes_sent < 0) {
+ bool bad = false;
+ ssize_t sentSize = send(m_sockfd.get(), msg.c_str(), msg.size(), 0);
+ if (sentSize < 0) {
bad = true;
- onErrno();
+ onErrno(WRITE);
}
return bad;
}
diff --git a/src/session.hpp b/src/session.hpp
index 2ecd74f..9dc3f0f 100644
--- a/src/session.hpp
+++ b/src/session.hpp
@@ -20,13 +20,17 @@ class CSession {
void run();
private:
+ enum eEventType {
+ READ,
+ WRITE
+ };
Hyprutils::OS::CFileDescriptor m_sockfd;
std::string m_name;
void recvManager();
bool registerSession();
void onConnect() const;
void onDisconnect() const;
- void onErrno() const;
+ void onErrno(eEventType) const;
void onRecv(SRecvData &data) const;
friend class CSessionManager;
};