Wt examples  4.2.2
SimpleChatServer.h
Go to the documentation of this file.
1 // This may look like C code, but it's really -*- C++ -*-
2 /*
3  * Copyright (C) 2008 Emweb bv, Herent, Belgium.
4  *
5  * See the LICENSE file for terms of use.
6  */
7 #ifndef SIMPLECHATSERVER_H_
8 #define SIMPLECHATSERVER_H_
9 
10 #include <Wt/WSignal.h>
11 #include <Wt/WString.h>
12 
13 namespace Wt {
14  class WServer;
15 }
16 
17 #include <set>
18 #include <map>
19 #include <thread>
20 #include <mutex>
21 
26 
29 class ChatEvent
30 {
31 public:
35 
38  Type type() const { return type_; }
39 
42  const Wt::WString& user() const { return user_; }
43 
46  const Wt::WString& message() const { return message_; }
47 
50  const Wt::WString& data() const { return data_; }
51 
57  Wt::TextFormat format) const;
58 
59 private:
64 
65  /*
66  * Both user and html will be formatted as html
67  */
70  { }
71 
74  : type_(type), user_(user), data_(data)
75  { }
76 
77  friend class SimpleChatServer;
78 };
79 
80 typedef std::function<void (const ChatEvent&)> ChatEventCallback;
81 
85 {
86 public:
87  /*
88  * A reference to a client.
89  */
90  class Client
91  {
92  };
93 
97 
98  SimpleChatServer(const SimpleChatServer &) = delete;
99  SimpleChatServer &operator=(const SimpleChatServer &) = delete;
100 
109  bool connect(Client *client, const ChatEventCallback& handleEvent);
110 
116  bool disconnect(Client *client);
117 
122  bool login(const Wt::WString& user);
123 
126  void logout(const Wt::WString& user);
127 
130  bool changeName(const Wt::WString& user, const Wt::WString& newUser);
131 
135 
138  void sendMessage(const Wt::WString& user, const Wt::WString& message);
139 
142  typedef std::set<Wt::WString> UserSet;
143 
146  UserSet users();
147 
148 private:
149  struct ClientInfo {
150  std::string sessionId;
152  };
153 
154  typedef std::map<Client *, ClientInfo> ClientMap;
155 
157  std::recursive_mutex mutex_;
160 
161  void postChatEvent(const ChatEvent& event);
162 };
163 
166 #endif // SIMPLECHATSERVER_H_
SimpleChatServer::clients_
ClientMap clients_
Definition: SimpleChatServer.h:158
ChatEvent::message_
Wt::WString message_
Definition: SimpleChatServer.h:63
ChatEvent::formattedHTML
const Wt::WString formattedHTML(const Wt::WString &user, Wt::TextFormat format) const
Get the message formatted as HTML, rendered for the given user.
Definition: SimpleChatServer.C:13
SimpleChatServer::operator=
SimpleChatServer & operator=(const SimpleChatServer &)=delete
Wt
SimpleChatServer::server_
Wt::WServer & server_
Definition: SimpleChatServer.h:156
SimpleChatServer::disconnect
bool disconnect(Client *client)
Disconnect from the chat server.
Definition: SimpleChatServer.C:77
SimpleChatServer::ClientInfo::sessionId
std::string sessionId
Definition: SimpleChatServer.h:150
SimpleChatServer::ClientInfo::eventCallback
ChatEventCallback eventCallback
Definition: SimpleChatServer.h:151
ChatEvent::message
const Wt::WString & message() const
Get the message of the event.
Definition: SimpleChatServer.h:46
Wt::WString::Empty
static const WString Empty
SimpleChatServer::Client
Definition: SimpleChatServer.h:90
ChatEvent::Rename
@ Rename
Definition: SimpleChatServer.h:34
ChatEvent::user_
Wt::WString user_
Definition: SimpleChatServer.h:61
ChatEvent
Encapsulate a chat event.
Definition: SimpleChatServer.h:29
ChatEvent::type_
Type type_
Definition: SimpleChatServer.h:60
ChatEvent::Logout
@ Logout
Definition: SimpleChatServer.h:34
ChatEvent::ChatEvent
ChatEvent(const Wt::WString &user, const Wt::WString &message)
Definition: SimpleChatServer.h:68
Wt::WString
ChatEvent::type
Type type() const
Get the event type.
Definition: SimpleChatServer.h:38
SimpleChatServer::users_
UserSet users_
Definition: SimpleChatServer.h:159
ChatEvent::ChatEvent
ChatEvent(Type type, const Wt::WString &user, const Wt::WString &data=Wt::WString::Empty)
Definition: SimpleChatServer.h:72
SimpleChatServer::ClientInfo
Definition: SimpleChatServer.h:149
ChatEvent::Type
Type
Enumeration for the event type.
Definition: SimpleChatServer.h:34
SimpleChatServer
A simple chat server.
Definition: SimpleChatServer.h:84
Wt::TextFormat
TextFormat
ChatEvent::Message
@ Message
Definition: SimpleChatServer.h:34
Wt::WServer
SimpleChatServer::ClientMap
std::map< Client *, ClientInfo > ClientMap
Definition: SimpleChatServer.h:154
SimpleChatServer::SimpleChatServer
SimpleChatServer(Wt::WServer &server)
Create a new chat server.
Definition: SimpleChatServer.C:55
SimpleChatServer::sendMessage
void sendMessage(const Wt::WString &user, const Wt::WString &message)
Send a message on behalve of a user.
Definition: SimpleChatServer.C:147
SimpleChatServer::users
UserSet users()
Get the users currently logged in.
Definition: SimpleChatServer.C:178
ChatEventCallback
std::function< void(const ChatEvent &)> ChatEventCallback
Definition: SimpleChatServer.h:80
SimpleChatServer::login
bool login(const Wt::WString &user)
Try to login with given user name.
Definition: SimpleChatServer.C:84
SimpleChatServer::connect
bool connect(Client *client, const ChatEventCallback &handleEvent)
Connects to the chat server.
Definition: SimpleChatServer.C:59
SimpleChatServer::suggestGuest
Wt::WString suggestGuest()
Get a suggestion for a guest user name.
Definition: SimpleChatServer.C:134
SimpleChatServer::changeName
bool changeName(const Wt::WString &user, const Wt::WString &newUser)
Changes the name.
Definition: SimpleChatServer.C:111
ChatEvent::data_
Wt::WString data_
Definition: SimpleChatServer.h:62
ChatEvent::data
const Wt::WString & data() const
Get the extra data for this event.
Definition: SimpleChatServer.h:50
SimpleChatServer::UserSet
std::set< Wt::WString > UserSet
Typedef for a collection of user names.
Definition: SimpleChatServer.h:142
SimpleChatServer::postChatEvent
void postChatEvent(const ChatEvent &event)
Definition: SimpleChatServer.C:152
ChatEvent::Login
@ Login
Definition: SimpleChatServer.h:34
ChatEvent::user
const Wt::WString & user() const
Get the user who caused the event.
Definition: SimpleChatServer.h:42
SimpleChatServer::logout
void logout(const Wt::WString &user)
Logout from the server.
Definition: SimpleChatServer.C:98
SimpleChatServer::mutex_
std::recursive_mutex mutex_
Definition: SimpleChatServer.h:157

Generated on Fri Mar 20 2020 for the C++ Web Toolkit (Wt) by doxygen 1.8.17