alexya-framework / sockswork
Alexya的SocksWork组件
Requires
- php: >=7.0
This package is not auto-updated.
Last update: 2024-09-14 19:20:13 UTC
README
Alexya的SocksWork库
内容
SocksWork
类\Alexya\SocksWork\SocksWork
提供了一个简单的方式连接服务器并发送数据包。
构造函数接受服务器的主机、端口和连接超时作为参数。它还接受一个布尔参数,指示构造函数完成后SocksWork是否应该连接到服务器,默认设置为true。然而,如果您将其设置为false,则需要调用\Alexya\SocksWork\SocksWork::connect
方法。
示例
<?php $SocksWork = new SocksWork("localhost", 8080, 100); // Connects to localhost:8080 and sets a timeout of 100ms
一旦建立连接,您可以使用\Alexya\SocksWork\SocksWork::send
命令发送任何东西,该命令接受要发送的二进制数据或\Alexya\SocksWork\PacketBuilder
实例作为参数。
如果参数是二进制数据,则响应将设置为\Alexya\SocksWork\SocksWork::$response
属性,如果是\Alexya\SocksWork\PacketBuilder
实例,则响应将直接发送到其属性。
该方法还接受一个布尔参数,指示SocksWork是否应该等待响应。
示例
<?php $SocksWork->send((binary) "Hello world!"); echo $SocksWork->response; // Response to the packet $packet = new PacketBuilder(); $packet->writeString("message", "Hello World!"); $SocksWork->send($packet); echo $packet->readString("response"); // Response to the packet
要关闭连接,只需调用方法\Alexya\SocksWork\SocksWork::close
,当您想重新连接时,调用方法\Alexya\SocksWork\SocksWork::connect
,要检查SocksWork是否已连接,请使用方法\Alexya\SocksWork\SocksWork::isConnected
。
PacketBuilder
类\Alexya\SocksWork\PacketBuilder
提供了一个接口来构建将要通过\Alexya\SocksWork\SocksWork
发送的数据包,它还提供了读取响应的方法。
构造函数接受一个类型为\Alexya\SocksWork\IEncoder
的对象作为参数,该对象将是用于写入和读取数据包的编码器(默认情况下是一个\Alexya\SocksWork\Encoders\StringEncoder
实例)。
一旦调用构造函数,您就可以通过实例对象调用编码器的各种方法来开始向数据包添加参数。
示例
<?php $packet = new PacketBuilder(); $packet->writeShort("id", 1); $packet->writeString("name", "test"); $SocksWork->send($packet); $id = $packet->readShort("id"); $name = $packet->readString("name");
您还可以扩展此类以简化对象的实例化
<?php class SetUserName extends PacketBuilder { private $_id = 1; public $id = -1; public $name = ""; public function onInstance(string $name) { $this->_encoder->writeShort("id", $this->_id); $this->_encoder->writeString("name", $name); } public function onResponse() { $this->id = $this->_ecoder->readShort("id"); $this->name = $this->_encoder->readString("name"); } } $packet = new SetUserName("test"); $SocksWork->send($packet); $id = $packet->id; $name = $packet->name;
方法\Alexya\SocksWork\PacketBuilder::onInstance
在构造函数之后立即执行,并接收传递给构造函数的参数(不包括编码器实例)。
例如
<?php class Packet extends PacketBuilder { public function onInstance() { foreach(func_get_args() as $key => $val) { echo "{$key} => {$value}\n"; } } } $packet = new Packet(1, "test", "foo"); // Output: // 0 => 1 // 1 => test // 2 => foo $packet = new Packet(new \Alexya\SocksWork\Encoders\String(), 1, "test"); // Output: // 0 => 1 // 1 => test
方法\Alexya\SocksWork\PacketBuilder::onResponse
在接收到响应后立即执行。
编码器
编码器是将在SocksWork
中发送数据的类,它们必须扩展类\Alexya\SocksWork\Encoder
。您可以在命名空间\Alexya\SocksWork\Encoders
中查看可用的编码器。