Login   Register  
PHP Classes

File: examples/case-studies/net/sockets/websocket_logger/websocket_logger.php

Recommend this page to a friend!
  Classes of ASCOOS CMS   Ascoos OS   examples/case-studies/net/sockets/websocket_logger/websocket_logger.php   Download  
File: examples/case-studies/net/sockets/websocket_logger/websocket_logger.php
Role: Example script
Content typex: text/plain
Description: Example script
Class: Ascoos OS
A PHP Web 5.0 Kernel for decentralized web and IoT
Author: By
Last change:
Date: 1 month ago
Size: 2,684 bytes
 

Contents

Class file image Download
<?php
/**
 * @ASCOOS-NAME : Ascoos OS
 * @ASCOOS-VERSION : 26.0.0
 * @ASCOOS-SUPPORT : [email protected]
 * @ASCOOS-BUGS : https://issues.ascoos.com
 *
 * @desc <English> WebSocket server that logs incoming messages and triggers events.
 * @desc <Greek> WebSocket server ??? ?????????? ??????????? ???????? ??? ??????????? ????????.
 *
 * @since PHP 8.2.0
 */
declare(strict_types=1);

use
ASCOOS\OS\Kernel\{
   
Net\TWebSocketHandler,
   
Arrays\Events\TEventHandler
};

global
$AOS_LOGS_PATH;

// <English> Define configuration for logging.
// <Greek> ??????? ????????? ??? ?????????.
$properties = [
   
'logs' => [
       
'useLogger' => true,
       
'dir' => $AOS_LOGS_PATH . '/',
       
'file' => 'websocket_activity.log'
   
]
];

// <English> Initialize WebSocket and event handlers.
// <Greek> ???????????? ????????? WebSocket ??? ?????????.
$ws = new TWebSocketHandler($properties);
$events = new TEventHandler([], $properties);

// <English> Register events for message handling.
// <Greek> ?????????? ????????? ??? ???????? ?????????.
$events->register('ws', 'message.received', fn($msg) => $events->logger->log("Message received: $msg"));
$events->register('ws', 'client.connected', fn($client) => $events->logger->log("Client connected: $client"));
$events->register('ws', 'client.disconnected', fn($client) => $events->logger->log("Client disconnected: $client"));

// <English> Enable WebSocket mode.
// <Greek> ???????????? ??????????? WebSocket.
$ws->enableWebSocket();

// <English> Start listening for connections.
// <Greek> ?????? ???????? ??? ?????????.
$ws->createSocket();
$ws->bindSocket('0.0.0.0', 8080);
$ws->listenSocket(5);

// <English> Handle multiple clients and messages.
// <Greek> ?????????? ????????? ??????? ??? ?????????.
$ws->handleMultipleClients(function ($client, $data) use ($ws, $events) {
   
// <English> Decode WebSocket frame.
    // <Greek> ??????????????? WebSocket frame.
   
$message = $ws->receiveWebSocketFrame();

   
// <English> Trigger message event.
    // <Greek> ???????????? ????????? ?????????.
   
$events->trigger('ws', 'message.received', $message);

   
// <English> Echo message back to client.
    // <Greek> ????????? ????????? ???? ??????.
   
$ws->sendWebSocketFrame("Echo: $message");
},
timeout: 30);