Merge pull request #1846 from milo1000/issue_1843

Issue 1843 - RCON worker threads synchronization corrected
This commit is contained in:
Shoghi Cervantes 2014-08-08 16:26:47 +02:00
commit dfdf9ddb45
2 changed files with 12 additions and 4 deletions

View File

@ -85,11 +85,15 @@ class RCON{
}elseif($this->workers[$n]->isWaiting()){
if($this->workers[$n]->response !== ""){
MainLogger::getLogger()->info($this->workers[$n]->response);
$this->workers[$n]->notify();
$this->workers[$n]->synchronized(function($thread){
$thread->notify();
}, $this->workers[$n]);
}else{
Server::getInstance()->dispatchCommand($response = new RemoteConsoleCommandSender(), $this->workers[$n]->cmd);
$this->workers[$n]->response = TextFormat::clean($response->getMessage());
$this->workers[$n]->notify();
$this->workers[$n]->synchronized(function($thread){
$thread->notify();
}, $this->workers[$n]);
}
}
}

View File

@ -133,7 +133,9 @@ class RCONInstance extends \Thread{
if($payload === $this->password){
@socket_getpeername($client, $addr, $port);
$this->response = "[INFO] Successful Rcon connection from: /$addr:$port";
$this->wait();
$this->synchronized(function($thread){
$thread->wait();
}, $this);
$this->response = "";
$this->writePacket($client, $requestID, 2, "");
$this->{"status" . $n} = 1;
@ -150,7 +152,9 @@ class RCONInstance extends \Thread{
}
if(strlen($payload) > 0){
$this->cmd = ltrim($payload);
$this->wait();
$this->synchronized(function($thread){
$thread->wait();
}, $this);
$this->writePacket($client, $requestID, 0, str_replace("\n", "\r\n", trim($this->response)));
$this->response = "";
$this->cmd = "";