Skip to content

Commit

Permalink
added detachable-client entry
Browse files Browse the repository at this point in the history
  • Loading branch information
matoom committed Jan 23, 2020
1 parent 170d061 commit 0091853
Show file tree
Hide file tree
Showing 7 changed files with 30 additions and 10 deletions.
4 changes: 2 additions & 2 deletions FrostBite.pro.user
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 3.6.1, 2019-12-07T23:48:48. -->
<!-- Written by QtCreator 3.6.1, 2020-01-23T18:48:22. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
Expand Down Expand Up @@ -288,7 +288,7 @@
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/Projects/FrostBite/gui/gui.pro</value>
<value type="bool" key="QmakeProjectManager.QmakeRunConfiguration.UseLibrarySearchPath">true</value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments">--port=8000</value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">gui/gui.pro</value>
<value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
<value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal">false</value>
Expand Down
4 changes: 3 additions & 1 deletion gui/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,9 @@ int main(int argc, char *argv[]) {

QStringList args = QCoreApplication::arguments();
if(!args.isEmpty() && args.count() > 1) {
if (QFile(args.at(1)).exists()) {
if(args.at(1).startsWith("--port=")) {
w.openLocalConnection(args.at(1).mid(7).trimmed());
} else if (QFile(args.at(1)).exists()) {
QSettings settings(args.at(1), QSettings::IniFormat);
if(settings.contains("GAMEHOST") && settings.contains("GAMEPORT") && settings.contains("KEY")){
w.openConnection(settings.value("GAMEHOST").toString(),
Expand Down
4 changes: 4 additions & 0 deletions gui/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,10 @@ void MainWindow::openConnection(QString host, QString port, QString key) {
tcpClient->connectToHost(host, port, key);
}

void MainWindow::openLocalConnection(QString port) {
tcpClient->connectToLocalPort(port);
}

MenuHandler* MainWindow::getMenuHandler() {
return menuHandler;
}
Expand Down
1 change: 1 addition & 0 deletions gui/mainwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ class MainWindow : public QMainWindow {
void updateProfileSettings(QString, QString);
void openConnectDialog();
void openConnection(QString host, QString port, QString key);
void openLocalConnection(QString port);
void openAppearanceDialog();
void saveWindow();

Expand Down
2 changes: 1 addition & 1 deletion gui/scriptapiserver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ void ScriptApiServer::readyRead() {
}
} else if(line.startsWith("CLIENT")) {
ApiRequest request = parseRequest(line.mid(6).trimmed());
if(request.name == "CONNECT") {
if(request.name == "CONNECT") {
QStringList args = request.args;
if(args.size() < 7) {
this->write(socket, tr("0\\0"));
Expand Down
23 changes: 17 additions & 6 deletions gui/tcpclient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ TcpClient::TcpClient(QObject *parent) : QObject(parent) {
api = false;
apiLich = false;

commandPrefix = "<c>";

debugLogger = new DebugLogger();

lich = new Lich(mainWindow);
Expand All @@ -18,6 +20,7 @@ TcpClient::TcpClient(QObject *parent) : QObject(parent) {
connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(socketError(QAbstractSocket::SocketError)));
connect(tcpSocket, SIGNAL(disconnected()), this, SLOT(disconnectedFromHost()));
tcpSocket->setSocketOption(QAbstractSocket::LowDelayOption, 1);
tcpSocket->setSocketOption(QAbstractSocket::KeepAliveOption, 1);
}

connect(mainWindow, SIGNAL(profileChanged()), this, SLOT(reloadSettings()));
Expand Down Expand Up @@ -138,12 +141,21 @@ void TcpClient::connectToLich(QString sessionHost, QString sessionPort, QString
QTimer::singleShot(3000, [=] () {connectToHost(sessionHost, sessionPort, sessionKey);});
}

bool TcpClient::connectToHost(QString sessionHost, QString sessionPort, QString sessionKey) {
bool TcpClient::connectToLocalPort(QString port) {
this->api = false;

windowFacade->writeGameWindow("Connecting ...");
mainWindow->connectEnabled(false);
commandPrefix = "";

tcpSocket->connectToHost("127.0.0.1", port.toInt());
return tcpSocket->waitForConnected();
}

bool TcpClient::connectToHost(QString sessionHost, QString sessionPort, QString sessionKey) {
this->api = false;
windowFacade->writeGameWindow("Connecting ...");
mainWindow->connectEnabled(false);
commandPrefix = "<c>";

tcpSocket->connectToHost(sessionHost, sessionPort.toInt());
bool conntected = tcpSocket->waitForConnected();
Expand Down Expand Up @@ -187,14 +199,13 @@ void TcpClient::writeDefaultSettings(QString settings) {
this->writeCommand("<db>" + settings);
}

void TcpClient::socketReadyRead() {
void TcpClient::socketReadyRead() {
QByteArray data = tcpSocket->readAll();

// log raw data
this->logDebug(data);

buffer.append(data);

if(buffer.endsWith("\n") || xmlParser->isCmgr()) {
// process raw data
emit addToQueue(buffer);
Expand All @@ -205,8 +216,8 @@ void TcpClient::socketReadyRead() {
}
}

void TcpClient::writeCommand(QString cmd) {
QByteArray sendCmd = "<c>" + cmd.append("\n").toUtf8();
void TcpClient::writeCommand(QString cmd) {
QByteArray sendCmd = commandPrefix + cmd.append("\r\n").toUtf8();
this->logDebug(sendCmd);
tcpSocket->write(sendCmd);
tcpSocket->flush();
Expand Down
2 changes: 2 additions & 0 deletions gui/tcpclient.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ class TcpClient : public QObject {
QString sessionKey;
XmlParserThread* xmlParser;
DebugLogger* debugLogger;
QByteArray commandPrefix;

Lich* lich;

Expand Down Expand Up @@ -76,6 +77,7 @@ public slots:
void socketReadyRead();
void socketError(QAbstractSocket::SocketError);
bool connectToHost(QString, QString, QString);
bool connectToLocalPort(QString port);
void connectToLich(QString sessionHost, QString sessionPort, QString sessionKey);
void disconnectedFromHost();
void initEauthSession(QString, QString, QString, QString);
Expand Down

0 comments on commit 0091853

Please sign in to comment.