Skip to content

Commit

Permalink
클라이언트 데이터와 채널의 연결 및 연결 해제 메서드 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
haelime committed Apr 13, 2024
1 parent c2a6d4b commit fee45ae
Show file tree
Hide file tree
Showing 6 changed files with 323 additions and 218 deletions.
7 changes: 7 additions & 0 deletions include/Channel.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include <map> // to store connected clients

#include "defines.hpp"
#include "types.hpp"
#include "Server.hpp"
#include "ClientData.hpp"

Expand Down Expand Up @@ -53,6 +54,12 @@ class Channel
const bool& getIsKeyProtected() const { return mIsKeyProtected; };
const int& getUserLimit() const { return mUserLimit; };

// 353 RPL_NAMREPLY
const Message getNameReply(const ClientData *requestClient);

// 366 RPL_ENDOFNAMES
const Message getEndOfNames(const ClientData *requestClient);

std::map<std::string, ClientData *> &getNickToClientDataMap() { return mNickToClientDataMap; };
std::map<std::string, ClientData *> &getNickToOperatorClientsMap() { return mNickToOperatorClientsMap; };

Expand Down
5 changes: 3 additions & 2 deletions include/ClientData.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include "defines.hpp"

class Channel;
typedef int SOCKET_FD;

// ClientData Must have it's information, and it's connected channels
class ClientData
Expand Down Expand Up @@ -58,8 +59,8 @@ class ClientData
const std::string& getRealname() const { return mRealname; };
void setRealname(std::string& realname) { mRealname = realname; };

const SOCKET_FD& getClientSocket() const { return mClientSocket; };
void setClientSocket(SOCKET_FD& clientSocket) { mClientSocket = clientSocket; };
const SOCKET_FD& getClientSocket() const;
void setClientSocket(SOCKET_FD& clientSocket);

void setIp(std::string& ip) { mClientIp = ip; };
const std::string& getIp() const { return mClientIp; };
Expand Down
2 changes: 2 additions & 0 deletions include/Server.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ class Server
void sendChannelJoinSucessMessageToClientData(ClientData *clientData, Channel *channel);
void sendMessagetoChannel(Channel* channel, const Message& message);

void sendWelcomeMessageToClientData(ClientData *clientData);

private: // server network data
SOCKET_FD mServerListenSocket;
sockaddr_in mServerAddress;
Expand Down
34 changes: 34 additions & 0 deletions srcs/Channel.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#include "Channel.hpp"

const Message Channel::getNameReply(const ClientData *requestClient)
{
Message reply;
reply.mCommand = NONE;
reply.mMessageTokens.push_back(RPL_NAMREPLY);
reply.mMessageTokens.push_back(requestClient->getClientNickname());
reply.mMessageTokens.push_back("=");
reply.mMessageTokens.push_back(mChannelName);
std::string names;
names += ":";
for (std::map<std::string, ClientData*>::const_iterator it = mNickToClientDataMap.begin(); it != mNickToClientDataMap.end(); it++)
{
std::map<std::string, ClientData*>::const_iterator opit = mNickToOperatorClientsMap.find(it->first);
if (opit != mNickToOperatorClientsMap.end())
names += "@";
names += it->first + " ";
}
names.pop_back();
reply.mMessageTokens.push_back(names);
return reply;
}

const Message Channel::getEndOfNames(const ClientData *requestClient)
{
Message reply;
reply.mCommand = NONE;
reply.mMessageTokens.push_back(RPL_ENDOFNAMES);
reply.mMessageTokens.push_back(requestClient->getClientNickname());
reply.mMessageTokens.push_back(mChannelName);
reply.mMessageTokens.push_back("End of /NAMES list.");
return reply;
}
4 changes: 4 additions & 0 deletions srcs/ClientData.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#include "ClientData.hpp"

const SOCKET_FD& ClientData::getClientSocket() const { return mClientSocket; };
void ClientData::setClientSocket(SOCKET_FD& clientSocket) { mClientSocket = clientSocket; };
Loading

0 comments on commit fee45ae

Please sign in to comment.