<?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();
|