<?php
date_default_timezone_set('Asia/Taipei');
require_once './Autoloader.php';
use Workerman\Worker;
use Workerman\Lib\Timer;
spl_autoload_register(function ($class_name) {
$load_FileName = str_replace('\\', '/', $class_name);
$file_name = __DIR__ ."/". $load_FileName .".php";
if ( is_file($file_name) === true ) {
require_once( $file_name );
}
});
//
Use App\MySQL;
use App\onConnect;
use App\onMessage;
use App\onClose;
//
ini_set('display_errors',true);
ini_set('error_reporting',E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
const MYSQL_DBNAME = 'db';
const MYSQL_HOST = 'localhost';
const MYSQL_USERNAME = 'username';
const MYSQL_PASSWORD = 'password';
define( "PDO_DSN", "mysql:dbname=". MYSQL_DBNAME .";host=". MYSQL_HOST .";charset=utf8" );
$checkUser = $connections_array = $Room = array();
// ssl 證書
$context = array(
'ssl' => array(
// 使用绝对路径
'local_cert' => '/etc/httpd/ssl/apache2.crt', // 也可以是crt文件
'local_pk' => '/etc/httpd/ssl/apache2.key',
'verify_peer' => false,
)
);
// 创建一个Worker监听2346端口,使用websocket协议通讯
$worker = new Worker("websocket://0.0.0.0:2346", $context);
$worker->transport = 'ssl';
// 1 個進程 同步資料
$worker->count = 1;
// 定時器
$worker->onWorkerStart = function()
{
// 每秒執行一次
Timer::add( 1, function() {
global $connections_array;
foreach ($connections_array as $conn) {
// 整分報時
if ( date('s')=='00' ) {
$JV = array( 'Command'=>'Ping', 'Value'=>date('H:i:s') );
$conn->send( json_encode($JV) );
}
// 檢查是否有問題存在 沒有的話就隨機出一題
$JV = array( 'Command'=>'CheckQuestionExist', 'Value'=>'' );
$conn->send( json_encode($JV) );
}
});
};
//
$worker->onConnect = function($connection)
{
onConnect::connect($connection);
};
// 接收
$worker->onMessage = function($connection, $data)
{
onMessage::message($connection, $data);
};
// 結束
$worker->onClose = function($connection)
{
onClose::close($connection);
};
// 运行worker
Worker::runAll();