Fixed a JSBridge potential memory leak

parent 4e93a67a
......@@ -2,9 +2,8 @@ function changeContent(id, content)
{
var n=document.getElementById(id);
if(typeof(n)!="undefined")
n.innerHTML="ESTICAZZI";
n.innerHTML=content;
}
function notify(content)
{
if(typeof(notifycb)=="function")
......@@ -17,7 +16,24 @@ function msgalert(content)
else
alert(content);
}
function publicReceived(user, msg)
{
if(typeof(public_received)=="function")
{
public_received(user, msg);
} else {
n = document.getElementById("chatarea");
if(typeof(n)!="undefined")
{
var newel = document.createElement('p');
newel.innerHTML="<"+user+"> "+msg;
n.appendChild(newel);
n.scollTop = n.scrollHeight;
}
}
}
SkyliveX.changeContent.connect(changeContent);
SkyliveX.notify.connect(notify);
SkyliveX.alert.connect(msgalert);
SkyliveX.alertmsg.connect(msgalert);
SkyliveX.public_received.connect(publicReceived);
......@@ -93,33 +93,6 @@
</div>
<div id="right">
<div id="chatarea">
<p>CHAT</p>
<p>CHAT</p>
<p>CHAT</p>
<p>CHAT</p>
<p>CHAT</p>
<p>CHAT</p>
<p>CHAT</p>
<p>CHAT</p>
<p>CHAT</p>
<p>CHAT</p>
<p>CHAT</p>
<p>CHAT</p>
<p>CHAT</p>
<p>CHAT</p>
<p>CHAT</p>
<p>CHAT</p>
<p>CHAT</p>
<p>CHAT</p>
<p>CHAT</p>
<p>CHAT</p>
<p>CHAT</p>
<p>CHAT</p>
<p>CHAT</p>
<p>CHAT</p>
<p>CHAT</p>
<p>CHAT</p>
<p>PIPPO</p>
</div>
<div id="chatlist">
<p>user1</p>
......
......@@ -48,6 +48,7 @@ void SkyliveProtocol::startPlugin()
std::cout << "SkyliveProtocol initialized in thread " << thread() << std::endl;
registerHandler((QString)"connectTelescopes", &SkyliveProtocol::handle_connect);
registerHandler((QString)"putlogin", &SkyliveProtocol::handle_putlogin);
registerHandler((QString)"publicChatSend", &SkyliveProtocol::handle_publicsend);
//pktTimer = new QTimer();
//QObject::connect(pktTimer, SIGNAL(timeout()), this, SLOT(processPackets()));
......@@ -138,9 +139,16 @@ void SkyliveProtocol::processPackets()
{
sendPacket("PONG", "NIL");
}
if(pkt.cmd=="CPUBLIC")
else if(pkt.cmd=="CPUBLIC")
{
QList<QString> paramlist = pkt.params.split(PARAM_SEPARATOR);
if(paramlist.size() > 1) // For safety
{
SKMessage pmsg("publicchatrcv");
pmsg.parameters.insert("username", QByteArray::fromPercentEncoding(paramlist[0].toLocal8Bit()));
pmsg.parameters.insert("msg", QByteArray::fromPercentEncoding(paramlist[1].toLocal8Bit()));
sendMessage(pmsg);
}
}
else if(pkt.cmd=="CPRIVAT")
{
......@@ -149,6 +157,10 @@ void SkyliveProtocol::processPackets()
else if(pkt.cmd=="STATUS")
{
}
else if(pkt.cmd=="ULIST")
{
}
else if(pkt.cmd=="ENABLE")
{
......@@ -328,6 +340,19 @@ void SkyliveProtocol::handle_putlogin(SKMessage msg)
}
void SkyliveProtocol::handle_publicsend(SKMessage msg)
{
if(msg.parameters.size() > 0)
{
QString cmd("CPUBLIC");
QList<QString> paramlist;
QByteArray message(msg.parameters[0].toLocal8Bit());
paramlist.append(message.toPercentEncoding());
sendPacket(cmd, paramlist);
}
}
void SkyliveProtocol::clientConnected()
{
SM_TCPCLIENT = CONNECTED;
......
......@@ -108,6 +108,7 @@ class SkyliveProtocol : public QObject, SkylivexPluginInterface
void registerHandler(QString type, SKHandlerFunction handler);
void handle_connect(SKMessage msg);
void handle_putlogin(SKMessage msg);
void handle_publicsend(SKMessage msg);
void sendPacket(const char* cmd, const char* params);
void sendPacket(QString &cmd, QString &params);
void sendPacket(SKProtoMsg &pkt);
......
......@@ -60,8 +60,15 @@ MainWin::MainWin(QString &htmlfile)
setAttribute(Qt::WA_OpaquePaintEvent, false);
setHtmlFile(htmlfile);
resize(250,200);
//jsbridge.mwin=qobject_cast<MainWin *>(this);
//page()->mainFrame()->addToJavaScriptWindowObject("SkyliveX", &jsbridge);
jsbridge.mwin=qobject_cast<MainWin *>(this);
jsbridge = new JSBridge();
jsbridge->mwin = qobject_cast<MainWin *>(this);
page()->mainFrame()->addToJavaScriptWindowObject("SkyliveX", jsbridge);
connect(page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(refreshJsObject()));
registerHandler((QString)"coreStarted", (SKHandlerFunction)&MainWin::handle_corestarted);
registerHandler((QString)"telescopeConnected", (SKHandlerFunction)&MainWin::handle_connected);
......@@ -70,6 +77,10 @@ MainWin::MainWin(QString &htmlfile)
registerHandler((QString)"notify", (SKHandlerFunction)&MainWin::handle_notify);
registerHandler((QString)"loginok", (SKHandlerFunction)&MainWin::handle_loginres);
registerHandler((QString)"loginfailed", (SKHandlerFunction)&MainWin::handle_loginres);
registerHandler((QString)"publicchatrcv", (SKHandlerFunction)&MainWin::handle_chatreceived);
}
MainWin::~MainWin()
......@@ -86,6 +97,15 @@ void MainWin::dragMoveEvent(QDragMoveEvent *ev)
}
*/
void MainWin::refreshJsObject()
{
//page()->mainFrame()->addToJavaScriptWindowObject("SkyliveX", &jsbridge);
jsbridge = new JSBridge();
jsbridge->mwin = qobject_cast<MainWin *>(this);
page()->mainFrame()->addToJavaScriptWindowObject("SkyliveX", jsbridge);
}
void MainWin::setHtmlFile(QString &fname)
{
......@@ -93,8 +113,8 @@ void MainWin::setHtmlFile(QString &fname)
filename.open(QIODevice::ReadOnly);
htmlFileCont = QString::fromUtf8(filename.readAll().constData());
setHtml(htmlFileCont, baseUrl);
page()->mainFrame()->addToJavaScriptWindowObject("SkyliveX", &jsbridge);
//page()->mainFrame()->addToJavaScriptWindowObject("SkyliveX", &jsbridge);
//jsbridge.mwin=qobject_cast<MainWin *>(this);
}
void MainWin::setHtmlFile(QString &fname, bool borders, bool transparentbg)
......@@ -184,20 +204,23 @@ void MainWin::handle_corestarted(SKMessage &msg)
{
msg.handle = "connectTelescopes";
sendMessage(msg);
jsbridge.notify("Connecting...");
//jsbridge.notify("Connecting...");
jsbridge->notify("Connecting...");
}
void MainWin::handle_connected(SKMessage &msg)
{
std::cout << "Connected by " << msg.sender.toStdString() << std::endl;
jsbridge.notify("Connected");
//jsbridge.notify("Connected");
jsbridge->notify("Connected");
}
void MainWin::handle_asklogin(SKMessage &msg)
{
std::cout << "asklogin by " << msg.sender.toStdString() << std::endl;
jsbridge.notify("Logging in");
//jsbridge.notify("Logging in");
jsbridge->notify("Logging in");
QString html("gui/login.html");
setHtmlFile(html, true, false);
resize(250, 200);
......@@ -207,13 +230,15 @@ void MainWin::handle_asklogin(SKMessage &msg)
void MainWin::handle_alert(SKMessage &msg)
{
if(msg.parameters.contains("msg"))
jsbridge.alert(msg.parameters["msg"]);
//jsbridge.alertmsg(msg.parameters["msg"]);
jsbridge->alertmsg(msg.parameters["msg"]);
}
void MainWin::handle_notify(SKMessage &msg)
{
if(msg.parameters.contains("msg"))
jsbridge.notify(msg.parameters["msg"]);
//jsbridge.notify(msg.parameters["msg"]);
jsbridge->notify(msg.parameters["msg"]);
}
void MainWin::handle_loginres(SKMessage &msg)
......@@ -231,6 +256,18 @@ void MainWin::handle_loginres(SKMessage &msg)
}
}
void MainWin::handle_chatreceived(SKMessage &msg)
{
if(msg.handle=="publicchatrcv")
{
if(msg.parameters.contains("msg") && msg.parameters.contains("username"))
{
//jsbridge.public_received(msg.parameters["username"], msg.parameters["msg"]);
jsbridge->public_received(msg.parameters["username"], msg.parameters["msg"]);
}
}
}
void JSBridge::changePageContent(QString elementid, QString content)
{
......
......@@ -64,7 +64,8 @@ class JSBridge : public QObject
signals:
void changeContent(QString elementid, QString content);
void notify(QString content);
void alert(QString content);
void alertmsg(QString content);
void public_received(QString user, QString content);
public slots:
void pushLogin(QString username, QString password);
......@@ -88,7 +89,8 @@ class MainWin : public QWebView
QUrl baseUrl;
QString htmlfile;
QString htmlFileCont;
JSBridge jsbridge;
//JSBridge jsbridge;
JSBridge* jsbridge;
private:
QHash<QString, SKHandlerFunction> _handlers;
......@@ -107,9 +109,13 @@ class MainWin : public QWebView
void handle_alert(SKMessage &msg);
void handle_notify(SKMessage &msg);
void handle_loginres(SKMessage &msg);
void handle_chatreceived(SKMessage &msg);
void toggleBorders(bool borders);
void toggleTransparentBackground(bool transparentbg);
private slots:
void refreshJsObject();
public slots:
void msgFromCore(SKMessage &msg);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment