|
From: <le...@us...> - 2006-12-11 16:48:49
|
Revision: 61
http://svn.sourceforge.net/qcell/?rev=61&view=rev
Author: lessm
Date: 2006-12-11 08:48:46 -0800 (Mon, 11 Dec 2006)
Log Message:
-----------
- massages roster added
- MasterServer tcp write bug removed
Modified Paths:
--------------
trunk/qcell/baseheaders/Client.h
trunk/qcell/baseheaders/MasterServer.h
trunk/qcell/baseheaders/MasterServerInterface.h
trunk/qcell/basesources/Client.cpp
trunk/qcell/basesources/MasterServer.cpp
trunk/qcell/client/main.cpp
trunk/qcell/requests/requests.cpp
trunk/qcell/requests/requests.h
Modified: trunk/qcell/baseheaders/Client.h
===================================================================
--- trunk/qcell/baseheaders/Client.h 2006-12-11 10:50:57 UTC (rev 60)
+++ trunk/qcell/baseheaders/Client.h 2006-12-11 16:48:46 UTC (rev 61)
@@ -70,6 +70,8 @@
bool unregisterClient();
+ QString requestMessageRoster(void);
+
signals:
void kill();
@@ -84,6 +86,7 @@
void registerTimePass();
void pingTimePass();
+public slots:
};
#endif
Modified: trunk/qcell/baseheaders/MasterServer.h
===================================================================
--- trunk/qcell/baseheaders/MasterServer.h 2006-12-11 10:50:57 UTC (rev 60)
+++ trunk/qcell/baseheaders/MasterServer.h 2006-12-11 16:48:46 UTC (rev 61)
@@ -15,6 +15,7 @@
#include <QLibrary>
#include <QTcpServer>
#include <QDataStream>
+#include <QStringList>
#include "ClientInfo.h"
#include "MasterServerPlugin.h"
#include "MasterServerInterface.h"
@@ -40,6 +41,9 @@
QList<MasterServerPlugin *> uiPluginList;
QList<MasterServerPlugin *> comPluginList;
+ QList<message> messageList;
+ int messageListId;
+
QString pingMessage;
QTimer pingTimer;
int serverPingTime;
@@ -56,7 +60,6 @@
bool loadServerConfig(QString file);
bool parseServerConfig(QDomElement *xmlConfig);
-
protected slots:
void datagramRecived();
void parseDatagram(QByteArray datagram, QTcpSocket *socket=NULL);
@@ -81,7 +84,8 @@
int getUsersListId(void);
QList<ClientInfo> * getClientList(void);
-
+ QList<message> * getMassageList(void);
+ void addMessage(QString msg, QString type);
MasterServerInterface * getServerInterface(void);
void run();
@@ -120,6 +124,8 @@
virtual ClientInfo * getClientPointer(int id);
virtual bool sendMessage(ClientInfo client, QString *message);
+ virtual QList<message> * getMassageList(void);
+ virtual void addMessage(QString msg, QString type="");
virtual void addInfoToLog(QString string);
virtual void addWarningToLog(QString string);
Modified: trunk/qcell/baseheaders/MasterServerInterface.h
===================================================================
--- trunk/qcell/baseheaders/MasterServerInterface.h 2006-12-11 10:50:57 UTC (rev 60)
+++ trunk/qcell/baseheaders/MasterServerInterface.h 2006-12-11 16:48:46 UTC (rev 61)
@@ -8,6 +8,12 @@
#define CLIENT_REMOVE 1
#define CLIENT_REGISTERED 2
+struct message
+{
+ int id;
+ QString body;
+ QString type;
+};
class MasterServerInterface : public QObject
{
@@ -42,6 +48,9 @@
virtual bool sendMessage(ClientInfo client, QString *message)=0;
+ virtual QList<message> * getMassageList(void)=0;
+ virtual void addMessage(QString msg, QString type="")=0;
+
// some log methods
virtual void addInfoToLog(QString string)=0;
virtual void addWarningToLog(QString string)=0;
Modified: trunk/qcell/basesources/Client.cpp
===================================================================
--- trunk/qcell/basesources/Client.cpp 2006-12-11 10:50:57 UTC (rev 60)
+++ trunk/qcell/basesources/Client.cpp 2006-12-11 16:48:46 UTC (rev 61)
@@ -321,6 +321,32 @@
return 0;
}
+QString Client::requestMessageRoster(void)
+{
+ QDomDocument doc;
+ QDomElement root, filters;
+ QString out;
+
+ root = doc.createElement("ClientMessage");
+ root.setAttribute("Message", "RosterRequest");
+
+ doc.appendChild(root);
+ QTcpSocket *socket = connectToMasterServer();
+ socket->write(doc.toString().toAscii());
+
+
+ if(socket)
+ {
+ if(socket->waitForReadyRead())
+ {
+ out = socket->readAll();
+ }
+ socket->close();
+ delete socket;
+ }
+ return out;
+}
+
//protected slots:
void Client::processMessages()
@@ -367,5 +393,4 @@
else
++pingTry;
-}
-
+}
\ No newline at end of file
Modified: trunk/qcell/basesources/MasterServer.cpp
===================================================================
--- trunk/qcell/basesources/MasterServer.cpp 2006-12-11 10:50:57 UTC (rev 60)
+++ trunk/qcell/basesources/MasterServer.cpp 2006-12-11 16:48:46 UTC (rev 61)
@@ -232,9 +232,11 @@
{
i->startPing();
i->incCounter();
- tmpString.setNum(getUsersListId());
- tmpString +="\" />";
- sendMessage(i[0], pingMessage + tmpString);
+
+ tmpString = pingMessage;
+ tmpString.arg(i[0].getId()).arg(messageListId);
+
+ sendMessage(i[0], tmpString);
i++;
}
else
@@ -260,6 +262,10 @@
{
socket->waitForReadyRead(serverPingTime/2);
parseDatagram(socket->readAll(), socket);
+ if(!socket->waitForDisconnected(1000))
+ {
+ socket->close();
+ }
delete socket;
}
}
@@ -274,12 +280,13 @@
serverSend = new QUdpSocket(this);
tcpServer = new QTcpServer(this);
srand(curentTime.hour() + curentTime.minute() + curentTime.second());
- pingMessage = "<ServerMessage Message=\"Ping\" UsersListId=\"";
+ pingMessage = "<ServerMessage Message=\"Ping\" UsersListId=\"%1\" MessageListId=\"%2\" />";
serverPingTime = PING_TIME;
pingTimer.setInterval(serverPingTime);
connect(&pingTimer, SIGNAL(timeout()), SLOT(pingClients()));
usersListId = -1;
serverInterface = new ServerInterface(this);
+ messageListId = 0;
}
MasterServer::~MasterServer()
@@ -461,6 +468,33 @@
return &clientsList;
}
+QList<message> * MasterServer::getMassageList(void)
+{
+ return &messageList;
+}
+
+void MasterServer::addMessage(QString msg, QString type)
+{
+ message m;
+ m.body = msg;
+ m.type = type;
+ if(messageList.size()==0)
+ {
+ m.id = 0;
+ messageList.insert(0, m);
+ }
+ else
+ {
+ m.id = messageList.first().id + 1;
+ if(m.id<0)
+ m.id = 0;
+ messageListId = m.id;
+ messageList.insert(0, m);
+ while(messageList.size()>100)
+ messageList.removeLast();
+ }
+}
+
MasterServerInterface * MasterServer::getServerInterface(void)
{
return serverInterface;
@@ -549,6 +583,16 @@
return serverPointer->sendMessage(client, *message);
}
+QList<message> * ServerInterface::getMassageList(void)
+{
+ return serverPointer->getMassageList();
+}
+
+void ServerInterface::addMessage(QString msg, QString type)
+{
+ serverPointer->addMessage(msg, type);
+}
+
void ServerInterface::addInfoToLog(QString string)
{
std::cout<<"II:"<<logCounter<<" : "<<string.toStdString()<<std::endl;
Modified: trunk/qcell/client/main.cpp
===================================================================
--- trunk/qcell/client/main.cpp 2006-12-11 10:50:57 UTC (rev 60)
+++ trunk/qcell/client/main.cpp 2006-12-11 16:48:46 UTC (rev 61)
@@ -12,6 +12,7 @@
if(c.initClient())
{
a.connect(&c, SIGNAL(kill()), SLOT(quit()));
+ c.connect(&c, SIGNAL(serverRegistered()), SLOT(bleble()));
}
return a.exec();
}
Modified: trunk/qcell/requests/requests.cpp
===================================================================
--- trunk/qcell/requests/requests.cpp 2006-12-11 10:50:57 UTC (rev 60)
+++ trunk/qcell/requests/requests.cpp 2006-12-11 16:48:46 UTC (rev 61)
@@ -11,6 +11,111 @@
return out;
}
+QString requests::generateMassageList(void)
+{
+ message msg;
+ QString out, tmp;
+
+ out = "<MessageList CurrentMessageId=\"";
+ if(serverInterface->getMassageList()->size()>0)
+ {
+ tmp.setNum(serverInterface->getMassageList()->first().id);
+ out += tmp + "\">";
+
+ foreach(msg, *(serverInterface->getMassageList()))
+ out += msg.body;
+ }
+ else
+ {
+ tmp.setNum(-1);
+ out += tmp + "\">";
+ }
+ out += "<\\MessageList>";
+ return out;
+}
+
+QString requests::generateMassageList(int lastId)
+{
+ message msg;
+ QString out, tmp;
+
+ out = "<MessageList CurrentMessageId=\"";
+ if(serverInterface->getMassageList()->size()>0)
+ {
+ tmp.setNum(serverInterface->getMassageList()->first().id);
+ out += tmp + "\">";
+
+ foreach(msg, *(serverInterface->getMassageList()))
+ {
+ if(lastId==msg.id)
+ break;
+ out += msg.body;
+ }
+ }
+ else
+ {
+ tmp.setNum(-1);
+ out += tmp + "\">";
+ }
+ out += "<\\MessageList>";
+ return out;
+}
+
+QString requests::generateMassageList(QString type)
+{
+ message msg;
+ QString out, tmp;
+
+ out = "<MessageList CurrentMessageId=\"";
+ if(serverInterface->getMassageList()->size()>0)
+ {
+ tmp.setNum(serverInterface->getMassageList()->first().id);
+ out += tmp + "\">";
+
+ foreach(msg, *(serverInterface->getMassageList()))
+ {
+ if(type==msg.type || msg.type.isEmpty())
+ out += msg.body;
+ }
+ }
+ else
+ {
+ tmp.setNum(-1);
+ out += tmp + "\">";
+ }
+ out += "<\\MessageList>";
+ return out;
+}
+
+QString requests::generateMassageList(int lastId, QString type)
+{
+ message msg;
+ QString out, tmp;
+
+ out = "<MessageList CurrentMessageId=\"";
+ if(serverInterface->getMassageList()->size()>0)
+ {
+ tmp.setNum(serverInterface->getMassageList()->first().id);
+ out += tmp + "\">";
+
+ foreach(msg, *(serverInterface->getMassageList()))
+ {
+ if(lastId==msg.id)
+ break;
+
+ if(type==msg.type || msg.type.isEmpty())
+ out += msg.body;
+ }
+ }
+ else
+ {
+ tmp.setNum(-1);
+ out += tmp + "\">";
+ }
+ out += "<\\MessageList>";
+ return out;
+}
+
// public:
requests::requests(MasterServerInterface *iPointer) : MasterServerPlugin(iPointer)
@@ -25,45 +130,56 @@
bool requests::execute(QDomElement *xml, QTcpSocket *socket)
{
- bool out=false;
- ClientInfo info, *infoPointer;
+ QString temp;
+ QDomDocument doc;
QDomElement child;
- QString temp;
-
- serverInterface->addErrorToLog(xml->text());
-
- //if(socket==NULL)
- //{
- /*
+ if(socket)
+ {
if(xml->tagName()=="ClientMessage")
{
- if(xml->attribute("Message")=="RegisterRequest")
+ if(xml->attribute("Message")=="RosterRequest")
{
- child = xml->firstChildElement("ClientData");
- if(child.isNull())
- return false;
- info.setClientType(child.attribute("Type"));
- info.setClientAddress(child.attribute("Address"));
- info.setClientPort(child.attribute("ListenPort").toInt());
-
- serverInterface->registerUser(&info);
- out = true;
+ child = xml->firstChildElement();
+ if(!child.isNull())
+ {
+ if(child.tagName()=="Filters")
+ {
+ if(child.hasAttribute("Id") && child.hasAttribute("Type"))
+ {
+ temp = generateMassageList(child.attribute("Id").toInt(), child.attribute("Type"));
+ }
+ else
+ if(child.hasAttribute("Id"))
+ {
+ temp = generateMassageList(child.attribute("Id").toInt());
+ }
+ else
+ if(child.hasAttribute("Type"))
+ {
+ temp = generateMassageList(child.attribute("Type"));
+ }
+ else
+ temp = generateMassageList();
+ }
+ }
+ else
+ temp = generateMassageList();
+ socket->write(temp.toAscii());
+ return true;
}
-
- if(xml->attribute("Message")=="Pong")
+ if(xml->attribute("Message")=="AddToRoster")
{
- infoPointer = serverInterface->getClientPointer(xml->attribute("ClientId").toInt());
- if(infoPointer)
+ child = xml->firstChildElement();
+ if(!child.isNull())
{
- infoPointer->endPing();
- infoPointer->resetCounter();
- out = true;
+ doc.appendChild(child);
+ serverInterface->addMessage(doc.toString(), xml->attribute("Type"));
+ return true;
}
}
}
- */
- //}
- return true;
+ }
+ return false;
}
QString requests::getPluginInfo()
Modified: trunk/qcell/requests/requests.h
===================================================================
--- trunk/qcell/requests/requests.h 2006-12-11 10:50:57 UTC (rev 60)
+++ trunk/qcell/requests/requests.h 2006-12-11 16:48:46 UTC (rev 61)
@@ -20,6 +20,11 @@
QString createUserList(ClientInfo info);
QDomElement addClient(QDomDocument *doc, ClientInfo inf);
+ QString generateMassageList(void);
+ QString generateMassageList(int lastId);
+ QString generateMassageList(QString type);
+ QString generateMassageList(int lastId, QString type);
+
public:
requests(MasterServerInterface *iPointer);
~requests();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|