mirror of
https://github.com/mumble-voip/mumble.git
synced 2025-10-26 11:19:16 +00:00
git-svn-id: https://mumble.svn.sourceforge.net/svnroot/mumble/trunk@12 05730e5d-ab1b-0410-a4ac-84af385074fa
121 lines
3.7 KiB
C++
121 lines
3.7 KiB
C++
/* Copyright (C) 2005, Thorvald Natvig <thorvald@natvig.com>
|
|
|
|
All rights reserved.
|
|
|
|
Redistribution and use in source and binary forms, with or without
|
|
modification, are permitted provided that the following conditions
|
|
are met:
|
|
|
|
- Redistributions of source code must retain the above copyright notice,
|
|
this list of conditions and the following disclaimer.
|
|
- Redistributions in binary form must reproduce the above copyright notice,
|
|
this list of conditions and the following disclaimer in the documentation
|
|
and/or other materials provided with the distribution.
|
|
- Neither the name of the Mumble Developers nor the names of its
|
|
contributors may be used to endorse or promote products derived from this
|
|
software without specific prior written permission.
|
|
|
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR
|
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#include "ServerHandler.h"
|
|
#include "MainWindow.h"
|
|
#include <QApplication>
|
|
|
|
extern MainWindow *g_mwMainWindow;
|
|
|
|
ServerHandler *g_shServer;
|
|
|
|
ServerHandlerMessageEvent::ServerHandlerMessageEvent(Message *mMsg) : QEvent((QEvent::Type) SERVERSEND_EVENT) {
|
|
m_mMsg = mMsg;
|
|
}
|
|
|
|
ServerHandlerMessageEvent::~ServerHandlerMessageEvent() {
|
|
delete m_mMsg;
|
|
}
|
|
|
|
ServerHandler::ServerHandler()
|
|
{
|
|
cConnection = NULL;
|
|
}
|
|
|
|
ServerHandler::~ServerHandler()
|
|
{
|
|
}
|
|
|
|
void ServerHandler::customEvent(QEvent *evt) {
|
|
if (evt->type() != SERVERSEND_EVENT)
|
|
return;
|
|
|
|
ServerHandlerMessageEvent *shme=static_cast<ServerHandlerMessageEvent *>(evt);
|
|
|
|
if (cConnection) {
|
|
cConnection->sendMessage(shme->m_mMsg);
|
|
}
|
|
}
|
|
|
|
void ServerHandler::sendMessage(Message *mMsg)
|
|
{
|
|
ServerHandlerMessageEvent *shme=new ServerHandlerMessageEvent(mMsg);
|
|
QApplication::postEvent(this, shme);
|
|
}
|
|
|
|
void ServerHandler::run()
|
|
{
|
|
QTcpSocket *qtsSock = new QTcpSocket(this);
|
|
cConnection = new Connection(this, qtsSock);
|
|
|
|
connect(qtsSock, SIGNAL(connected()), this, SLOT(serverConnectionConnected()));
|
|
connect(cConnection, SIGNAL(connectionClosed(Connection *)), this, SLOT(serverConnectionClosed(Connection *)));
|
|
connect(cConnection, SIGNAL(message(Message *, Connection *, bool *)), this, SLOT(message(Message *, Connection *, bool *)));
|
|
qtsSock->connectToHost(m_qsHostName, 64738);
|
|
exec();
|
|
cConnection->disconnect();
|
|
delete cConnection;
|
|
delete qtsSock;
|
|
}
|
|
|
|
void ServerHandler::message(Message *mMsg, Connection *, bool *bDel) {
|
|
// Handle speex directly (into player threads)
|
|
// But for now....
|
|
|
|
*bDel = FALSE;
|
|
ServerHandlerMessageEvent *shme=new ServerHandlerMessageEvent(mMsg);
|
|
QApplication::postEvent(g_mwMainWindow, shme);
|
|
}
|
|
|
|
void ServerHandler::disconnect() {
|
|
cConnection->disconnect();
|
|
}
|
|
|
|
void ServerHandler::serverConnectionClosed(Connection *) {
|
|
emit disconnected();
|
|
|
|
exit(0);
|
|
// Clean up player threads
|
|
}
|
|
|
|
void ServerHandler::serverConnectionConnected() {
|
|
MessageServerJoin msjMsg;
|
|
msjMsg.m_qsPlayerName = m_qsUserName;
|
|
cConnection->sendMessage(&msjMsg);
|
|
|
|
emit connected();
|
|
}
|
|
|
|
|
|
void ServerHandler::setConnectionInfo(QString qsHostName, QString qsUserName) {
|
|
m_qsHostName = qsHostName;
|
|
m_qsUserName = qsUserName;
|
|
}
|