2
0
nordsoft 3 жил өмнө
parent
commit
6eb43d3834

+ 11 - 0
launcher/lobby/lobby_moc.cpp

@@ -1,5 +1,6 @@
 #include "lobby_moc.h"
 #include "ui_lobby_moc.h"
+#include "../mainwindow_moc.h"
 #include "../lib/GameConstants.h"
 #include "../jsonutils.h"
 #include "../../lib/CConfigHandler.h"
@@ -106,6 +107,7 @@ Lobby::Lobby(QWidget *parent) :
 	ui(new Ui::Lobby)
 {
 	ui->setupUi(this);
+	ui->buttonReady->setEnabled(false);
 
 	connect(&socketLobby, SIGNAL(text(QString)), this, SLOT(chatMessage(QString)));
 	connect(&socketLobby, SIGNAL(receive(QString)), this, SLOT(dispatchMessage(QString)));
@@ -137,6 +139,7 @@ void Lobby::serverCommand(const ServerCommand & command) try
 		hostSession = args[0];
 		session = args[0];
 		chatMessage("System: new session started");
+		ui->buttonReady->setEnabled(true);
 		break;
 
 	case SESSIONS:
@@ -172,6 +175,8 @@ void Lobby::serverCommand(const ServerCommand & command) try
 			chatMessage(joinStr.arg("you", args[0]));
 			session = args[0];
 			ui->stackedWidget->setCurrentWidget(command.command == JOINED ? ui->roomPage : ui->sessionsPage);
+			if(command.command == KICKED)
+				ui->buttonReady->setEnabled(false);
 		}
 		else
 		{
@@ -202,8 +207,11 @@ void Lobby::serverCommand(const ServerCommand & command) try
 		node["server"].String() = ui->hostEdit->text().toStdString();
 		node["serverport"].Integer() = ui->portEdit->text().toInt();
 		node["uuid"].String() = args[0].toStdString();
+		startGame = true;
+		//on_startGameButton_clicked
 		//node["names"].Vector().clear();
 		//node["names"].Vector().pushBack(username.toStdString());
+		
 		break;
 		}
 
@@ -247,6 +255,9 @@ void Lobby::dispatchMessage(QString txt) try
 		ServerCommand cmd(ctype, parseArgs);
 		serverCommand(cmd);
 	}
+	
+	if(startGame)
+		qobject_cast<MainWindow *>(qApp->activeWindow())->on_startGameButton_clicked();
 }
 catch(const ProtocolError & e)
 {

+ 1 - 0
launcher/lobby/lobby_moc.h

@@ -123,6 +123,7 @@ private:
 	QString hostSession;
 	QString session;
 	QString username;
+	bool startGame = false;
 
 private:
 	void protocolAssert(bool);

+ 1 - 1
launcher/mainwindow_moc.h

@@ -35,6 +35,6 @@ public:
 	explicit MainWindow(QWidget * parent = 0);
 	~MainWindow();
 
-private slots:
+public slots:
 	void on_startGameButton_clicked();
 };

+ 5 - 3
proxyServer.py

@@ -207,13 +207,13 @@ def startSession(session: Session):
     session.started = True
     session.host_uuid = str(uuid.uuid4())
     hostMessage = f":>>HOST:{session.host_uuid}:{session.joined - 1}" #one client will be connected locally
+    #host message must be before start message
+    send(session.host, hostMessage)
+
     for player in session.players:
         client_sockets[player]['uuid'] = str(uuid.uuid4())
         msg = f":>>START:{client_sockets[player]['uuid']}"
         send(player, msg)
-    
-    #host message must be after start message
-    send(session.host, hostMessage)
 
 
 def dispatch(client: socket, sender: dict, arr: bytes):
@@ -355,6 +355,8 @@ def dispatch(client: socket, sender: dict, arr: bytes):
             return
 
         sender["session"].total = int(tag_value)
+        message = f":>>CREATED:{sender['session'].name}"
+        send(client, message)
         #now session is ready to be broadcasted
         message = f":>>JOIN:{sender['session'].name}:{sender['username']}"
         send(client, message)

+ 5 - 7
server/CVCMIServer.cpp

@@ -170,8 +170,12 @@ void CVCMIServer::run()
 #endif
 
 		startAsyncAccept();
-		if(!remoteConnectionsThread)
+		if(!remoteConnectionsThread && !settings["server"]["lobby"].isNull() && settings["server"]["lobby"].Bool())
+		{
 			remoteConnectionsThread = vstd::make_unique<boost::thread>(&CVCMIServer::establishRemoteConnections, this);
+			Settings node = settings.write["server"]["lobby"];
+			node->Bool() = false;
+		}
 
 #if defined(VCMI_ANDROID)
 		CAndroidVMHelper vmHelper;
@@ -199,12 +203,6 @@ void CVCMIServer::run()
 
 void CVCMIServer::establishRemoteConnections()
 {
-	if(settings["server"]["lobby"].isNull() || !settings["server"]["lobby"].Bool())
-		return;
-	
-	Settings node = settings.write["server"];
-	node["lobby"].Bool() = false;
-	
 	uuid = settings["server"]["host"]["uuid"].String();
 	int numOfConnections = settings["server"]["host"]["connections"].Integer();
 	auto address = settings["server"]["server"].String();