Samchon Framework for CPP  1.0.0
ChatServer.cpp
1 #include <samchon/examples/console_chat_server/ChatServer.hpp>
2 #include <samchon/examples/console_chat_server/ChatClient.hpp>
3 
4 #include <thread>
5 #include <samchon/protocol/Invoke.hpp>
6 
7 using namespace std;
8 using namespace samchon::library;
9 using namespace samchon::protocol;
11 
12 ChatServer::ChatServer()
13  : super()
14 {
15 }
16 void ChatServer::addClient(Socket *socket)
17 {
18  ChatClient *client = new ChatClient(this, socket);
19 
21  clientSet.insert(client);
22 
23  thread(&ChatClient::listen, client).detach();
24 }
26 {
28  clientSet.erase(client);
29 }
30 
31 void ChatServer::replyData(shared_ptr<Invoke> invoke)
32 {
33  sendData(invoke);
34 }
35 void ChatServer::sendData(shared_ptr<Invoke> invoke)
36 {
38 
39  for(auto it = clientSet.begin(); it != clientSet.end(); it++)
40  (*it)->sendData(invoke);
41 }
An interface of a physical server.
Definition: IServer.hpp:43
library::RWMutex rwMutex
A rw_mutex managing clientSet.
Definition: ChatServer.hpp:45
Definition: RWMutex.hpp:4
Package of libraries.
Definition: library.hpp:84
virtual void replyData(std::shared_ptr< protocol::Invoke >) override
Handling replied message.
Definition: ChatServer.cpp:31
std::set< ChatClient * > clientSet
List of clients.
Definition: ChatServer.hpp:40
Unique lock for reading.
Package of network protocol and libraries.
Definition: protocol.hpp:185
Unique lock for writing.
virtual void sendData(std::shared_ptr< protocol::Invoke >) override
Sending a message.
Definition: ChatServer.cpp:35
virtual void addClient(protocol::Socket *socket) override
Add a client.
Definition: ChatServer.cpp:16
void eraseClient(ChatClient *client)
Erase client when disconnected.
Definition: ChatServer.cpp:25
virtual void listen()
Listens message from a related system.
Definition: IClient.cpp:45