Wt examples 3.3.12
simpleChat.C
Go to the documentation of this file.
1/*
2 * Copyright (C) 2008 Emweb bvba, Heverlee, Belgium.
3 *
4 * See the LICENSE file for terms of use.
5 */
6
7#include <Wt/WApplication>
8#include <Wt/WContainerWidget>
9#include <Wt/WEnvironment>
10#include <Wt/WPushButton>
11#include <Wt/WServer>
12#include <Wt/WText>
13#include <Wt/WTimer>
14
15#include "SimpleChatServer.h"
16#include "PopupChatWidget.h"
17
18using namespace Wt;
19
24
28{
29public:
33
34private:
39
42 void addChatWidget();
43 void javaScriptTest();
44 void emptyFunc();
45};
46
48 SimpleChatServer& server)
49 : WApplication(env),
50 server_(server),
51 env_(env)
52{
53 setTitle("Wt Chat");
54 useStyleSheet("chatapp.css");
55
56 messageResourceBundle().use(appRoot() + "simplechat");
57
59
60 root()->addWidget(new WText(WString::tr("introduction")));
61
62 SimpleChatWidget *chatWidget =
64 chatWidget->setStyleClass("chat");
65
66 root()->addWidget(new WText(WString::tr("details")));
67
68 WPushButton *b = new WPushButton("I'm schizophrenic ...", root());
69 b->clicked().connect(b, &WPushButton::hide);
70 b->clicked().connect(this, &ChatApplication::addChatWidget);
71}
72
74{
75 if(!env_.javaScript()){
76 javaScriptError_ = new WText(WString::tr("serverpushwarning"), root());
77
78 // The 5 second timer is a fallback for real server push. The updated
79 // server state will piggy back on the response to this timeout.
80 timer_ = new Wt::WTimer(root());
81 timer_->setInterval(5000);
82 timer_->timeout().connect(this, &ChatApplication::emptyFunc);
83 timer_->start();
84 }
85}
86
89
91{
92 SimpleChatWidget *chatWidget2 = new SimpleChatWidget(server_, root());
93 chatWidget2->setStyleClass("chat");
94}
95
99{
100public:
102
103private:
105};
106
108 : WApplication(env),
109 login_(this, "login")
110{
111 setCssTheme("");
112 useStyleSheet("chatwidget.css");
113 useStyleSheet("chatwidget_ie6.css", "lt IE 7");
114
115 messageResourceBundle().use(appRoot() + "simplechat");
116
117 const std::string *div = env.getParameter("div");
118 std::string defaultDiv = "div";
119 if (!div)
120 div = &defaultDiv;
121
122 if (div) {
123 setJavaScriptClass(*div);
124 PopupChatWidget *chatWidget = new PopupChatWidget(server, *div);
125 bindWidget(chatWidget, *div);
126
127 login_.connect(chatWidget, &PopupChatWidget::setName);
128
129 std::string chat = javaScriptClass();
130 doJavaScript("if (window." + chat + "User) "
131 + chat + ".emit(" + chat + ", 'login', " + chat + "User);"
132 + "document.body.appendChild(" + chatWidget->jsRef() + ");");
133 } else {
134 std::cerr << "Missing: parameter: 'div'" << std::endl;
135 quit();
136 }
137}
138
140 SimpleChatServer& server)
141{
142 return new ChatApplication(env, server);
143}
144
146{
147 return new ChatWidget(env, server);
148}
149
150int main(int argc, char **argv)
151{
152 Wt::WServer server(argc, argv, WTHTTP_CONFIGURATION);
153 SimpleChatServer chatServer(server);
154
155 /*
156 * We add two entry points: one for the full-window application,
157 * and one for a widget that can be integrated in another page.
158 */
160 boost::bind(createApplication, _1,
161 boost::ref(chatServer)));
163 boost::bind(createWidget, _1,
164 boost::ref(chatServer)), "/chat.js");
165
166 if (server.start()) {
167 int sig = Wt::WServer::waitForShutdown();
168 std::cerr << "Shutting down: (signal = " << sig << ")" << std::endl;
169 server.stop();
170 }
171}
172
A chat demo application.
Definition simpleChat.C:28
Wt::WText * javaScriptError_
Definition simpleChat.C:36
void addChatWidget()
Add another chat client.
Definition simpleChat.C:90
const WEnvironment & env_
Definition simpleChat.C:37
SimpleChatServer & server_
Definition simpleChat.C:35
Wt::WTimer * timer_
Definition simpleChat.C:38
ChatApplication(const WEnvironment &env, SimpleChatServer &server)
Create a new instance.
Definition simpleChat.C:47
void javaScriptTest()
Definition simpleChat.C:73
A chat application widget.
Definition simpleChat.C:99
ChatWidget(const WEnvironment &env, SimpleChatServer &server)
Definition simpleChat.C:107
JSignal< WString > login_
Definition simpleChat.C:104
A popup chat widget.
void setName(const Wt::WString &name)
A simple chat server.
A self-contained chat widget.
void setCssTheme(const std::string &name)
void doJavaScript(const std::string &javascript, bool afterLoaded=true)
WEnvironment & env()
WMessageResourceBundle & messageResourceBundle()
WContainerWidget * root() const
std::string javaScriptClass()
void setTitle(const WString &title)
void setJavaScriptClass(const std::string &className)
static std::string appRoot()
void useStyleSheet(const WLink &link, const std::string &media="all")
void bindWidget(WWidget *widget, const std::string &domId)
virtual void addWidget(WWidget *widget)
bool javaScript() const
const std::string * getParameter(const std::string &name) const
EventSignal< WMouseEvent > & clicked()
void use(const std::string &path, bool loadInMemory=true)
WTCONNECTOR_API void stop()
WT_API void addEntryPoint(EntryPointType type, ApplicationCreator callback, const std::string &path=std::string(), const std::string &favicon=std::string())
WTCONNECTOR_API bool start()
static WString tr(const char *key)
EventSignal< WMouseEvent > & timeout()
void setInterval(int msec)
void start()
virtual void setStyleClass(const WString &styleClass)
std::string jsRef() const
Application
WidgetSet
int main(int argc, char **argv)
Definition simpleChat.C:150
WApplication * createApplication(const WEnvironment &env, SimpleChatServer &server)
Definition simpleChat.C:139
WApplication * createWidget(const WEnvironment &env, SimpleChatServer &server)
Definition simpleChat.C:145

Generated on Fri May 17 2024 for the C++ Web Toolkit (Wt) by doxygen 1.9.8