1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
/*
* Copyright (C) 2008 Emweb bvba, Heverlee, Belgium.
*
* See the LICENSE file for terms of use.
*/
#include "SimpleChatServer.h"
#include <iostream>
#include <boost/lexical_cast.hpp>
using namespace Wt;
const WString ChatEvent::formattedHTML(const WString& user) const
{
switch (type_) {
case Login:
return "<span class='chat-info'>"
+ user_ + " joined the conversation.</span>";
case Logout:
return "<span class='chat-info'>"
+ ((user == user_) ? "You" : user_)
+ " logged out.</span>";
case Message:{
WString result;
result = WString("<span class='")
+ ((user == user_) ? "chat-self" : "chat-user")
+ "'>" + user_ + ":</span>";
if (message_.toUTF8().find(user.toUTF8()) != std::string::npos)
return result + "<span class='chat-highlight'>" + message_ + "</span>";
else
return result + message_;
}
default:
return "";
}
}
SimpleChatServer::SimpleChatServer()
: chatEvent_(this)
{ }
bool SimpleChatServer::login(const WString& user)
{
boost::mutex::scoped_lock lock(mutex_);
if (users_.find(user) == users_.end()) {
users_.insert(user);
chatEvent_.emit(ChatEvent(ChatEvent::Login, user));
return true;
} else
return false;
}
void SimpleChatServer::logout(const WString& user)
{
boost::mutex::scoped_lock lock(mutex_);
UserSet::iterator i = users_.find(user);
if (i != users_.end()) {
users_.erase(i);
chatEvent_.emit(ChatEvent(ChatEvent::Logout, user));
}
}
WString SimpleChatServer::suggestGuest()
{
boost::mutex::scoped_lock lock(mutex_);
for (int i = 1;; ++i) {
std::string s = "guest " + boost::lexical_cast<std::string>(i);
WString ss = s;
if (users_.find(ss) == users_.end())
return ss;
}
}
void SimpleChatServer::sendMessage(const WString& user, const WString& message)
{
boost::mutex::scoped_lock lock(mutex_);
chatEvent_.emit(ChatEvent(user, message));
}
SimpleChatServer::UserSet SimpleChatServer::users()
{
return users_;
}
|