mirror of
https://github.com/WiiLink24/wfc-server.git
synced 2026-03-21 17:44:58 -05:00
76 lines
1.8 KiB
Go
76 lines
1.8 KiB
Go
package common
|
|
|
|
import (
|
|
"net/rpc"
|
|
"wwfc/logging"
|
|
)
|
|
|
|
var rpcFrontend *rpc.Client
|
|
|
|
type RPCFrontendPacket struct {
|
|
Server string
|
|
Index uint64
|
|
Data []byte
|
|
}
|
|
|
|
// ConnectFrontend connects to the frontend RPC server
|
|
func ConnectFrontend() {
|
|
var err error
|
|
rpcFrontend, err = rpc.Dial("tcp", "localhost:29998")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
// SendPacket is used by backend servers to send a packet to a connection
|
|
func SendPacket(server string, index uint64, data []byte) error {
|
|
if rpcFrontend == nil {
|
|
ConnectFrontend()
|
|
}
|
|
|
|
err := rpcFrontend.Call("RPCFrontendPacket.SendPacket", RPCFrontendPacket{Server: server, Index: index, Data: data}, nil)
|
|
if err != nil {
|
|
logging.Error("COMMON", "Failed to send packet to frontend:", err)
|
|
}
|
|
return err
|
|
}
|
|
|
|
// CloseConnection is used by backend servers to close a connection
|
|
func CloseConnection(server string, index uint64) error {
|
|
if rpcFrontend == nil {
|
|
ConnectFrontend()
|
|
}
|
|
|
|
err := rpcFrontend.Call("RPCFrontendPacket.CloseConnection", RPCFrontendPacket{Server: server, Index: index}, nil)
|
|
if err != nil {
|
|
logging.Error("COMMON", "Failed to close connection:", err)
|
|
}
|
|
return err
|
|
}
|
|
|
|
// Ready will notify the frontend that the backend is ready to accept connections
|
|
func Ready() error {
|
|
if rpcFrontend == nil {
|
|
ConnectFrontend()
|
|
}
|
|
|
|
err := rpcFrontend.Call("RPCFrontendPacket.Ready", struct{}{}, nil)
|
|
if err != nil {
|
|
logging.Error("COMMON", "Failed to notify frontend that backend is ready:", err)
|
|
}
|
|
return err
|
|
}
|
|
|
|
// Shutdown will notify the frontend that the backend is shutting down
|
|
func Shutdown() error {
|
|
if rpcFrontend == nil {
|
|
ConnectFrontend()
|
|
}
|
|
|
|
err := rpcFrontend.Call("RPCFrontendPacket.ShutdownBackend", struct{}{}, nil)
|
|
if err != nil {
|
|
logging.Error("COMMON", "Failed to notify frontend that backend is shutting down:", err)
|
|
}
|
|
return err
|
|
}
|