public function start()
{
$pid = @file_get_contents($this->config['pid']);
if ($pid) {
if (posix_getpgid($pid)) {
die("already started\r\n");
} else {
unlink($this->config['pid']);
}
}
if (empty($this->config['websocket']) && empty($this->config['localsocket']) && empty($this->config['master'])) {
die("error: config: !websocket && !localsocket && !master\r\n");
}
$server = $service = $master = null;
if (!empty($this->config['websocket'])) {
//open server socket
$server = stream_socket_server($this->config['websocket'], $errorNumber, $errorString);
stream_set_blocking($server, 0);
if (!$server) {
die("error: stream_socket_server: {$errorString} ({$errorNumber})\r\n");
}
}
if (!empty($this->config['localsocket'])) {
//create a socket for the processing of messages from scripts
$service = stream_socket_server($this->config['localsocket'], $errorNumber, $errorString);
stream_set_blocking($service, 0);
if (!$service) {
die("error: stream_socket_server: {$errorString} ({$errorNumber})\r\n");
}
}
if (!empty($this->config['master'])) {
//create a socket for the processing of messages from slaves
$master = stream_socket_client($this->config['master'], $errorNumber, $errorString);
stream_set_blocking($master, 0);
if (!$master) {
die("error: stream_socket_client: {$errorString} ({$errorNumber})\r\n");
}
}
if (!empty($this->config['eventDriver']) && $this->config['eventDriver'] == 'libevent') {
class_alias('morozovsk\\websocket\\GenericLibevent', 'morozovsk\\websocket\\Generic');
} elseif (!empty($this->config['eventDriver']) && $this->config['eventDriver'] == 'event') {
class_alias('morozovsk\\websocket\\GenericEvent', 'morozovsk\\websocket\\Generic');
} else {
class_alias('morozovsk\\websocket\\GenericSelect', 'morozovsk\\websocket\\Generic');
}
file_put_contents($this->config['pid'], posix_getpid());
//list($pid, $master, $workers) = $this->spawnWorkers();//create child processes
/*if ($pid) {//мастер
file_put_contents($this->config['pid'], $pid);
fclose($server);//master will not handle incoming connections on the main socket
$masterClass = $this->config['master']['class'];
$master = new $masterClass ($service, $workers);//master will process messages from the script and send them to a worker
if (!empty($this->config['master']['timer'])) {
$master->timer = $this->config['worker']['timer'];
}
$master->start();
} else {//воркер*/
$workerClass = $this->config['class'];
$worker = new $workerClass($server, $service, $master);
if (!empty($this->config['timer'])) {
$worker->timer = $this->config['timer'];
}
$worker->start();
//}
}