Proxy with server socket handling
Connect when the plugin that will use the proxy is activated
NOTE: If you try to call the class without the library loaded, you will get an error. After adding DEVirion to depend
, call the proxy class in the onEnable
method.
protected function onEnable() : void{
$this->proxy = libProxyThread::createMultiProxy($this, $address ?? "127.0.0.1");
}
This proxy library can connect multiple servers
NOTE: receivePort
must not be duplicated, sendPort
is the receivePort of another proxy server.
$this->proxy->insert("lobby_multi_chat", new ProxyThread($this->multiProxy, 1000, (function(): Volatile{
$volatile = new Volatile();
$volatile[] = 1001; //skywars multi chat proxy port
return $volatile;
})()));
$this->proxy->insert("skywars_multi_chat", new ProxyThread($this->multiProxy, 1001, (function(): Volatile{
$volatile = new Volatile();
$volatile[] = 1000; //lobby multi chat proxy port
return $volatile;
})()));
When the chat is sent from the lobby server, it is also sent to the skywars server.
CHANNEL: lobby
public function onPlayerChatEvent(PlayerChatEvent $event): void{
if(!$event->isCancelled()){
$this->proxy->select("skywars_multi_chat")->send([
ProxyThread::KEY_IDENTIFY => "multi-chat",
ProxyThread::KEY_DATA => ["format" => $event->getFormat()]
]);
}
}
CHANNEL: skywars
public function onProxyReceiveDataEvent(ProxyReceiveDataEvent $event): void{
$iterator = $event->getIterator();
if($iterator->offsetGet(ProxyThread::KEY_IDENTIFY) !== "multi-chat"){
return;
}
$data = $iterator->offsetGet(ProxyThread::KEY_DATA);
$this->getServer()->broadcastMessage($data["format"]);
}