add broadcasting

This commit is contained in:
2026-07-19 23:01:36 -05:00
parent 799521f51f
commit a400b233a2
4 changed files with 43 additions and 17 deletions

View File

@@ -36,7 +36,6 @@ ErrorCode TcpServer::init() {
struct sockaddr_in clientAddress; // ip address of the client
char clientIp[20];
int clientPort;
uint32_t clientCount = 0;
serverSocket = socket(AF_INET, SOCK_STREAM, 0); // create the server's endpoint
// AF_INET: address-family: internet (alias for IPV4, AF_INET6 for ipv6)
@@ -153,20 +152,9 @@ ErrorCode TcpServer::init() {
sockets[i].fd = -1;
} else {
// receive success, everything below is a simulated "processMessage()"
std::string message(buffer, receiveBytes);
logger_->log("TcpClient", LogFlag::Debug, "Received {} bytes from client {}: {}",
receiveBytes, clientAddresses[i], message);
// echo back received data back to the client
ssize_t sendBytes = tcpSend(sockets[i].fd, buffer, receiveBytes);
if(sendBytes < 0) {
logger_->log("TcpServer", LogFlag::Error, "Unable to send to client.");
return ErrorCode::Error;
}
logger_->log("TcpClient", LogFlag::Debug, "Echoed {} bytes back to client {}",
sendBytes, clientAddresses[i]);
// receive success
handleMessage(buffer, receiveBytes, 0, i);
}
}
}
@@ -177,3 +165,34 @@ ErrorCode TcpServer::init() {
return ErrorCode::Success;
}
ErrorCode TcpServer::handleMessage(const char* message, size_t msgLength, uint32_t messageType, size_t socketId) {
std::string messageString(message, msgLength);
logger_->log("TcpClient", LogFlag::Debug, "Received {} bytes from client {}: {}",
msgLength, clientAddresses[socketId], messageString);
// broadcast to all clients
if(broadcastMessage(message, msgLength) != ErrorCode::Success) {
logger_->log("TcpServer", LogFlag::Error, "Broadcast failure.");
return ErrorCode::Error;
}
return ErrorCode::Success;
}
ErrorCode TcpServer::broadcastMessage(const char* message, size_t msgLength) {
for(size_t i = 1; i < clientCount; i++) {
ssize_t sendBytes = tcpSend(sockets[i].fd, message, msgLength);
if(sendBytes != msgLength) {
logger_->log("TcpServer", LogFlag::Error, "Unable to send to client {}", clientAddresses[i]);
return ErrorCode::Error;
}
}
logger_->log("TcpClient", LogFlag::Debug, "Broadcasted {} bytes to {} clients", msgLength, clientCount);
return ErrorCode::Success;
}

View File

@@ -33,5 +33,9 @@ private:
struct pollfd sockets[kMaxClients + 1];
std::string clientAddresses[kMaxClients + 1];
uint32_t clientCount = 0;
ErrorCode handleMessage(const char* message, size_t msgLength, uint32_t messageType, size_t socketId);
ErrorCode broadcastMessage(const char* message, size_t msgLength);
};