on('open',function(swoole_websocket_server $server,$request){
echo "server: handshake success with fd{$request->fd}\n";
$connection_info = $server->connection_info($request->fd);
if ($connection_info) {
$client_ip = $connection_info['remote_ip'];
$client_port = $connection_info['remote_port'];
// echo "Received message from {$client_ip}:{$client_port}, file descriptor: {$frame->fd}\n";
$东方仙盟_服务返回['ip']=$client_ip;
$东方仙盟_服务返回['port']=$client_port;
}
$东方仙盟_服务返回['type']="success";
$东方仙盟_服务返回['msg']="仙盟服务器".date("Y-m-d H:i:s");
$东方仙盟_服务返回json=json_encode($东方仙盟_服务返回);
$server->push($request->fd, $东方仙盟_服务返回json);
});
$server->on('message',function(swoole_websocket_server $server,$frame){
echo "receive from {$frame->fd}:{$frame->data}";
echo "opcode:{$frame->opcode}";
echo "fin: {$frame->finish}\n";
// $东方仙盟_服务返回['status']=9;
// $东方仙盟_服务返回['path']=$path;
// $东方仙盟_服务返回['收到']=$frame->data;
$path = $frame->data;
/*
$东方仙盟_服务返回json=json_encode($东方仙盟_服务返回);
// $server->push($frame->fd, $东方仙盟_服务返回json);
// 假设消息中包含路径信息,例如:/path1, /path2
switch ($path) {
case '/path1':
// 处理 /path1 的逻辑
$server->push($frame->fd, "You are accessing path1");
break;
case '/path2':
// 处理 /path2 的逻辑
$server->push($frame->fd, "You are accessing path2");
break;
case '/屏幕共享':
// 处理 /path2 的逻辑
//$server->push($frame->fd, "You are accessing path2");
// 将广播任务发送给 Task 进程处理
// $server->task($frame->data);
return;
break;
default:
// 处理其他情况
$东方仙盟_服务返回['message']="Invalid path";
$东方仙盟_服务返回json=json_encode($东方仙盟_服务返回);
// $server->push($frame->fd, $东方仙盟_服务返回json);
// 东方仙盟_屏幕共享($server,$frame,$frame->data);
break;
}
*/
$东方仙盟_服务返回['type']="success";
$东方仙盟_服务返回['msg']="仙盟服务器".date("Y-m-d H:i:s");
$connection_info = $server->connection_info($frame->fd);
if ($connection_info) {
$client_ip = $connection_info['remote_ip'];
$client_port = $connection_info['remote_port'];
// echo "Received message from {$client_ip}:{$client_port}, file descriptor: {$frame->fd}\n";
$东方仙盟_服务返回['ip']=$client_ip;
$东方仙盟_服务返回['port']=$client_port;
}
$解析客户端=json_decode($frame->data,true);
if($解析客户端['type'] == "chat"){
$东方仙盟_服务返回['type']="chat_success";
$东方仙盟_服务返回['msg']= $东方仙盟_服务返回['ip']."口".$client_port."说:".$解析客户端['content'];
}
if($解析客户端['type'] == "create"){
$东方仙盟_服务返回['type']="success";
//room_name
东方仙盟_共享交互_仙界($解析客户端['room_name'],$client_ip);
$东方仙盟_服务返回['msg']= $东方仙盟_服务返回['ip']."口".$client_port."创建:".$解析客户端['room_name'];
}
if($解析客户端['type'] == "offer"){
$东方仙盟_服务返回['type']="offer_success";
//room_name
东方仙盟_共享交互_仙界仙使者($解析客户端['room_name'],$client_ip,$解析客户端);
$东方仙盟_服务返回['msg']= $东方仙盟_服务返回['ip']."口".$client_port."共享:".$解析客户端['room_name'];
}
if($解析客户端['type'] == "join"){
$东方仙盟_服务返回['type']="success";
//room_name
$东方仙盟_服务返回['msg']= $东方仙盟_服务返回['ip']."口".$client_port."加入:".$解析客户端['room_name'];
}
/*
room_name
:
"东方少主"
type
:
"join"
username
:
"东方慧"
*/
//getoffer
if($解析客户端['type'] == "getoffer"){
//请求房间
// $东方仙盟_服务返回['type']="offer_success";
//room_name
$东方仙盟_服务返回['msg']= $东方仙盟_服务返回['ip']."口".$client_port."请求加入屏幕:".$解析客户端['room_name'];
$服务提供者 = 东方仙盟_共享交互_仙界仙获取房间信息($解析客户端['room_name'],$client_ip,$解析客户端);
$东方仙盟_服务返回['type']="getoffer_success";
$东方仙盟_服务返回['offer']=$服务提供者;
if($服务提供者=="cybererror" || $服务提供者=="" ){
$东方仙盟_服务返回['msg']= $东方仙盟_服务返回['ip']."口".$client_port."找不到供应商:".$解析客户端['room_name'];
$东方仙盟_服务返回['type']="error";
}
}
//2025-01-24 2154
if($解析客户端['type'] == "answer"){
// 消息.is_sender = true;
$东方仙盟_服务返回['type']="answer_success";
$东方仙盟_服务返回['answer']=$解析客户端['answer'];
}
/*
if (解码.type.Equals("ice") == true)
{
消息.msg ="ice信息收到,开始发送屏幕";//
// 消息.type = "success";//创建成功
消息.room_name = 解码.room_name;
// 消息.is_sender = true;
if (解码.ice == null)
{
// 消息.ice = CyberWin_Public_var.屏幕提供anser;
}
if (解码.is_sender == true)
{
// 消息.ice = 解码.ice;
消息.msg = "ice信息收到,提供服务";//
消息.type = "ice_success";//创建成功
// 消息.msg = "";// 解码.ice;// "ice信息收到,开始发送屏幕";//
WriteLog("ice", 消息.ice.ToString(), clientIP);
消息json = JsonConvert.SerializeObject(消息);
// 消息.type = "ice_success";//创建成功
// _room_name
Sessions.Broadcast(消息json);
return;
}
if (解码.is_receiver == true)
{
消息.ice = 解码.ice;
消息.type = "ice_success";//创建成功
// 消息.msg = "";// 解码.ice;// "ice信息收到,开始发送屏幕";//
WriteLog("ice", 消息.ice.ToString(), clientIP);
消息json = JsonConvert.SerializeObject(消息);
// 消息.type = "ice_success";//创建成功
// _room_name
Sessions.Broadcast(消息json);
return;
}
消息.ice = 解码.ice;
消息.type = "ice_success";//创建成功
// 消息.msg = "";// 解码.ice;// "ice信息收到,开始发送屏幕";//
WriteLog("ice", 消息.ice.ToString(), clientIP);
消息json = JsonConvert.SerializeObject(消息);
// 消息.type = "ice_success";//创建成功
// _room_name
Sessions.Broadcast(消息json);
return;
}
*/
if($解析客户端['type'] == "answer"){
if ($解析客户端['is_sender']== true)
{
// 消息.msg = "ice信息收到,提供服务";//
// 消息.type = "ice_success";//创建成功
$东方仙盟_服务返回['type']="ice_success";
$东方仙盟_服务返回['msg']= $东方仙盟_服务返回['ip']."口".$client_port."ice信息收到:".$解析客户端['room_name'];
}
if ($解析客户端['is_receiver']== true)
{
// 消息.ice = 解码.ice;
// 消息.type = "ice_success";//创建成功
$东方仙盟_服务返回['type']="ice_success";
$东方仙盟_服务返回['ice']=$解析客户端['ice'];
$东方仙盟_服务返回['msg']= $东方仙盟_服务返回['ip']."口".$client_port."ice我要你:".$解析客户端['room_name'];
}
}
//
// $client_fds = array_keys($server->connections);
if($解析客户端['room_name']){
$东方仙盟_服务返回['room_name']=$解析客户端['room_name'];
}
if($解析客户端['username']){
$东方仙盟_服务返回['username']=$解析客户端['username'];
}
//$东方仙盟_服务返回['所有链接']=$server->connections;
$东方仙盟_服务返回['服务']=json_encode($server);
$东方仙盟_服务返回['服务2']=json_encode($frame);
$东方仙盟_服务返回['type收到']=$解析客户端['type'];
$东方仙盟_服务返回['收到r']=$解析客户端;
$东方仙盟_服务返回json=json_encode($东方仙盟_服务返回);
// $server->push($frame->fd, $东方仙盟_服务返回json);
//$解析客户端['type'] == "getoffer"
$不广播分组 = array("getoffer", "apple");
// 检查值 3 是否存在于数组中
if (in_array($解析客户端['type'], $不广播分组)) {
$server->push($frame->fd, $东方仙盟_服务返回json);
return;
}
if (in_array($解析客户端['type'], $不广播分组)==false) {
foreach($server->connections as $fd)
{
// if ($server->exist($fd)) {
$server->push($fd, $东方仙盟_服务返回json);
// }
}
}
/*
$client_fds = array_keys($server->connections);
// 遍历所有客户端文件描述符
foreach ($client_fds as $fd=>$value) {
if ($server->exist($fd)) {
// 向客户端发送消息
$东方仙盟_服务返回['message']="Invalid path";
$东方仙盟_服务返回json=json_encode($东方仙盟_服务返回);
$server->push($fd, $东方仙盟_服务返回json);
}
}
*/
//$server->push($frame->fd,"this is a server");
});
$server->on('close',function($ser,$fd){
echo "client {$fd} closed\n";
});
// The Request event closure callback is passed the context of $server
//2025-01-23
$server->on('request', function($request, $response)
{
/*
* Loop through all the WebSocket connections to
* send back a response to all clients. Broadcast
* a message back to every WebSocket client.
*/
// global $server;//调用外部的server
foreach($server->connections as $fd)
{
// Validate a correct WebSocket connection otherwise a push may fail
if($server->isEstablished($fd))
{
//$server->push($fd, $request->get['message']);
$东方仙盟_服务返回['type']="success";
$东方仙盟_服务返回['msg']="仙盟服务器".date("Y-m-d H:i:s");
$connection_info = $server->connection_info($fd);
if ($connection_info) {
$client_ip = $connection_info['remote_ip'];
$client_port = $connection_info['remote_port'];
// echo "Received message from {$client_ip}:{$client_port}, file descriptor: {$frame->fd}\n";
$东方仙盟_服务返回['ip']=$client_ip;
$东方仙盟_服务返回['port']=$client_port;
}
$东方仙盟_服务返回['type']="chat_success";
$东方仙盟_服务返回['msg']= ">>>>".$东方仙盟_服务返回['ip']."口".$client_port."说:".$解析客户端['content'];
$东方仙盟_服务返回['type收到']=$$解析客户端['type'];
$东方仙盟_服务返回['收到r']=$request->get['message'];
$东方仙盟_服务返回json=json_encode($东方仙盟_服务返回);
// $server->push($fd, $东方仙盟_服务返回json);
}
}
});
$server->on('workerStart', function (swoole_websocket_server $server, $workerId) {
// 这里进行工作进程启动时的初始化操作
if ($workerId === 0) {
// 主进程(一般进行一些全局资源的初始化)
} else {
// 其他工作进程
}
$东方仙盟_服务返回['type']="success";
$东方仙盟_服务返回['msg']="仙盟服务器".date("Y-m-d H:i:s");
$东方仙盟_服务返回json=json_encode($东方仙盟_服务返回);
foreach($server->connections as $fd)
{
// $server->push($fd, $东方仙盟_服务返回json);
}
});
$server->start();
?>connections);
// 遍历所有客户端文件描述符
foreach ($client_fds as $fd) {
if ($仙盟服务->exist($fd)) {
// 向客户端发送消息
$东方仙盟_服务返回['message']="Invalid path";
$东方仙盟_服务返回json=json_encode($东方仙盟_服务返回);
$仙盟服务->push($fd, $东方仙盟_服务返回json);
}
}
// 任务完成
$仙盟服务->finish($data);
}
?>
$v){
$小世界=$v;
if($小世界['room_name']==$小世界名称){
//return true;
东方仙盟_共享交互_addlog("仙界仙使者","找到了",$东方卷宗);
$东方卷宗[$k]['offer']=$客户数据['offer'];
}
}
东方仙盟_共享交互_addlog("仙界仙使者","处理后",$小世界名称);
$东方卷宗存放 = json_encode($东方卷宗,JSON_UNESCAPED_UNICODE);
file_put_contents($东方卷宗路径,$东方卷宗存放);
}
function 东方仙盟_共享交互_仙界( $小世界名称,$ip){
//room_name
$东方卷宗路径 ="/CyberWin/cyberwin_ws/东方卷宗".date("Y_m_d").".cwp";
$jsonData = file_get_contents($东方卷宗路径);
// 将 JSON 字符串转换为 PHP 数组
$东方卷宗 = json_decode($jsonData, true);
if(!$东方卷宗){
$东方卷宗=[];
}
// echo "客户端 IP 地址是:".$client_ip;
$client_ip = $_SERVER['REMOTE_ADDR'];
$小世界存在 = 东方仙盟_共享交互_仙界_寻找($东方卷宗,$小世界名称);
if($小世界存在==false){
$小世界['room_name']=$小世界名称;
$小世界['offer']="";
$小世界['ip']=$ip;
$小世界['port']="";
$小世界['username']="";
$小世界['client_ip']=$client_ip;
$小世界['create_time']=date("Y-m-d H:i:s");
$东方卷宗[]=$小世界;
$东方卷宗存放 = json_encode($东方卷宗,JSON_UNESCAPED_UNICODE);
file_put_contents($东方卷宗路径,$东方卷宗存放);
}
}
function 东方仙盟_共享交互_仙界_寻找( $东方卷宗,$小世界名称){
foreach($东方卷宗 as $k => $v){
$小世界=$v;
if($小世界['room_name']==$小世界名称){
return true;
}
}
return false;
}
//2025-01-24
function 东方仙盟_共享交互_仙界仙获取房间信息( $小世界名称,$ip,$客户数据){
东方仙盟_共享交互_仙界( $小世界名称,$ip);
//room_name
$东方卷宗路径 ="/CyberWin/cyberwin_ws/东方卷宗".date("Y_m_d").".cwp";
$jsonData = file_get_contents($东方卷宗路径);
// 将 JSON 字符串转换为 PHP 数组
$东方卷宗 = json_decode($jsonData, true);
if(!$东方卷宗){
$东方卷宗=[];
}
// echo "客户端 IP 地址是:".$client_ip;
foreach($东方卷宗 as $k => $v){
$小世界=$v;
if($小世界['room_name']==$小世界名称){
//return true;
//$东方卷宗[$k]['offer']=$客户数据['offer'];
return $东方卷宗[$k]['offer'];
}
}
return "cybererror";
// $东方卷宗存放 = json_encode($东方卷宗,JSON_UNESCAPED_UNICODE);
// file_put_contents($东方卷宗路径,$东方卷宗存放);
}
?>