/**
* Copyright (c) Lambda Innovation, 2013-2016
* This file is part of the AcademyCraft mod.
* https://github.com/LambdaInnovation/AcademyCraft
* Licensed under GPLv3, see project root for more information.
*/
package cn.academy.energy.client.app;
import cn.academy.energy.api.WirelessHelper;
import cn.academy.energy.api.block.IWirelessMatrix;
import cn.academy.energy.api.block.IWirelessNode;
import cn.academy.energy.api.block.IWirelessUser;
import cn.academy.energy.api.event.node.LinkUserEvent;
import cn.academy.energy.api.event.wen.LinkNodeEvent;
import cn.academy.energy.internal.WirelessNet;
import cn.lambdalib.annoreg.core.Registrant;
import cn.lambdalib.s11n.network.Future;
import cn.lambdalib.s11n.network.NetworkMessage;
import cn.lambdalib.s11n.network.NetworkS11n.NetworkS11nType;
import cpw.mods.fml.relauncher.Side;
import net.minecraftforge.common.MinecraftForge;
/**
* @author WeAthFolD
*/
@Registrant
@NetworkS11nType
public class Syncs {
private static final String
MSG_QUERY_SSID = "query_ssid",
MSG_AUTH_MATRIX = "auth_matrix",
MSG_AUTH_NODE = "auth_node",
MSG_LINK_NODE = "link_node",
MSG_LINK_USER = "link_user";
private static Object delegate = NetworkMessage.staticCaller(Syncs.class);
static void querySSID(IWirelessMatrix matrix, Future<String> future) {
send(MSG_QUERY_SSID, matrix, future);
}
static void authorizeMatrix(IWirelessMatrix matrix, String password, Future<Boolean> future) {
send(MSG_AUTH_MATRIX, matrix, password, future);
}
static void authorizeNode(IWirelessNode node, String password, Future<Boolean> future) {
send(MSG_AUTH_NODE, node, password, future);
}
static void linkNodeToMatrix(IWirelessNode node, IWirelessMatrix matrix, String password, Future<Boolean> future) {
send(MSG_LINK_NODE, node, matrix, password, future);
}
static void linkUserToNode(IWirelessUser user, IWirelessNode node, Future<Boolean> future) {
send(MSG_LINK_USER, user, node, future);
}
@NetworkMessage.Listener(channel=MSG_QUERY_SSID, side=Side.SERVER)
static void hQuerySSID(IWirelessMatrix matrix, Future<String> future) {
WirelessNet net = WirelessHelper.getWirelessNet(matrix);
future.sendResult(net != null ? net.getSSID() : null);
}
@NetworkMessage.Listener(channel=MSG_AUTH_MATRIX, side=Side.SERVER)
static void hAuthorizeMatrix(IWirelessMatrix matrix, String password, Future<Boolean> future) {
WirelessNet net = WirelessHelper.getWirelessNet(matrix);
future.sendResult(net != null && net.getPassword().equals(password));
}
@NetworkMessage.Listener(channel=MSG_LINK_NODE, side=Side.SERVER)
static void hLinkNodeToMatrix(IWirelessNode node, IWirelessMatrix matrix, String password, Future<Boolean> future) {
WirelessNet net = WirelessHelper.getWirelessNet(matrix);
future.sendResult(net != null &&
!MinecraftForge.EVENT_BUS.post(new LinkNodeEvent(node, net.getMatrix(), password)));
}
@NetworkMessage.Listener(channel=MSG_LINK_USER, side=Side.SERVER)
static void hLinkUserToNode(IWirelessUser user, IWirelessNode node, Future<Boolean> future) {
future.sendResult(!MinecraftForge.EVENT_BUS.post(new LinkUserEvent(user, node)));
}
@NetworkMessage.Listener(channel=MSG_AUTH_NODE, side=Side.SERVER)
static void hAuthNode(IWirelessNode node, String pass, Future<Boolean> future) {
future.sendResult(node.getPassword().equals(pass));
}
private static void send(String channel, Object... args) {
NetworkMessage.sendToServer(delegate, channel, args);
}
}