<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class SwooleServer extends Command
{
protected $signature = 'swoole:server';
protected $description = 'swoole websocket';
public function __construct()
{
parent::__construct();
}
public function handle()
{
session_start();
$server = new \Swoole\WebSocket\Server("0.0.0.0", 9501);
$server->on('open', function (\Swoole\WebSocket\Server $server, $request) {
$this->info($request->fd . '链接成功');
$retunr=array(
'code'=>'0',
'message'=> $request->fd.'--欢迎进入贪吃蛇大作战'
);
$server->push($request->fd,json_encode($retunr));
$userinfo=[
'fq'=>$request->fd,
'name'=>"玩家".$request->fd
];
$requestFd=json_encode(array(
'code'=>'4002',
'message'=>$userinfo['name'].'--进入房间'
));
var_dump($_SESSION['users']);
foreach($server->connections as $k=>$i){
$server->push($i, $requestFd );
}
$_SESSION["users"][$request->fd] = $userinfo;
echo count($_SESSION['users'])."\n"; });
$server->on('message', function (\Swoole\WebSocket\Server $server, $frame) {
$data=explode(',',$frame->data);
$array=json_decode($frame->data,true);
foreach ($server->connections as $i) {
if($array['code']==200){
$requestArray=json_encode(array(
'code'=>'4007',
'fq'=>$frame->fd,
'message'=> '玩家'.$frame->fd.'说:'.$array['message']
));
$server->push($i, $requestArray);
}else{
$requestArray=json_encode(array(
'code'=>'4006',
'fq'=>$frame->fd,
'message'=>$frame->data
));
$server->push($i, $requestArray);
echo 'fd=' . $i . 'm=' . $frame->fd . "\n";
}
}
});
$server->on('close', function ($server, $fd) { unset($_SESSION["user"][$fd]);
$requestFd=json_encode(array(
'code'=>'4003',
'message'=>$_SESSION['users'][$fd]['name'].'---退出房间'
));
foreach ($server->connections as $i) {
$server->push($i, $requestFd );
}
var_dump($requestFd);
});
$server->start();
}
}