<?php 
 
require __DIR__ . '/../vendor/autoload.php'; 
 
use Ratchet\Client\WebSocket; 
use React\EventLoop\Loop; 
 
// Connect to WebSocket server 
\Ratchet\Client\connect('ws://127.0.0.1:8080', [], [], $loop = Loop::get())->then(function(WebSocket $conn) { 
    // Example 1: Tool Call with progress updates 
    $conn->send(json_encode([ 
        'type' => 'tool_call', 
        'name' => 'long_running_tool', 
        'arguments' => ['param1' => 'value1'] 
    ])); 
 
    // Example 2: Resource Request 
    $conn->send(json_encode([ 
        'type' => 'resource_request', 
        'uri' => 'example://resource/123' 
    ])); 
 
    // Example 3: Prompt Request with streaming response 
    $conn->send(json_encode([ 
        'type' => 'prompt_request', 
        'name' => 'streaming_prompt', 
        'arguments' => ['context' => 'Generate a streaming response'] 
    ])); 
 
    // Handle incoming messages 
    $conn->on('message', function($msg) { 
        $data = json_decode($msg, true); 
         
        switch ($data['status'] ?? '') { 
            case 'progress': 
                echo "Progress: Step {$data['step']}/{$data['total_steps']} - {$data['message']}\n"; 
                break; 
             
            case 'streaming': 
                echo "Streaming token: {$data['token']}\n"; 
                break; 
             
            case 'success': 
                echo "Success Response:\n"; 
                echo json_encode($data, JSON_PRETTY_PRINT) . "\n\n"; 
                break; 
             
            default: 
                echo "Received message:\n"; 
                echo json_encode($data, JSON_PRETTY_PRINT) . "\n\n"; 
        } 
    }); 
 
}, function ($e) { 
    echo "Could not connect: {$e->getMessage()}\n"; 
}); 
 
// Run the event loop 
$loop->run(); 
 
 |