Skip to content
Snippets Groups Projects
WebsocketServer.java 3.26 KiB
Newer Older
Spotlight Deveaux's avatar
Hai
Spotlight Deveaux committed
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package io.github.packserver.RegPlug;

/**
 *
 * @author spotlight
 */
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
import java.util.Collection;
import java.util.logging.Level;

Spotlight Deveaux's avatar
Spotlight Deveaux committed
import org.bukkit.entity.Player;
Spotlight Deveaux's avatar
Hai
Spotlight Deveaux committed
import org.bukkit.Bukkit;
import org.java_websocket.WebSocket;
import org.java_websocket.WebSocketImpl;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;

public class WebsocketServer extends WebSocketServer {

    public static WebsocketServer s;

    public WebsocketServer(int port) throws UnknownHostException {
        super(new InetSocketAddress(port));
    }

    public WebsocketServer(InetSocketAddress address) {
        super(address);
    }

    @Override
    public void onOpen(WebSocket conn, ClientHandshake handshake) {
        WebsocketSessionManager.getSessionManager().openSession(conn.getRemoteSocketAddress().getAddress().getHostAddress());
        Bukkit.getLogger().log(Level.INFO, "{0} has connected to the Websocket server!", conn.getRemoteSocketAddress().getAddress().getHostName());
    }

    @Override
    public void onClose(WebSocket conn, int code, String reason, boolean remote) {
        WebsocketSessionManager.getSessionManager().endSession(conn.getRemoteSocketAddress().getAddress().getHostAddress());
    }

    @Override
    public void onMessage(WebSocket conn, String message) {
        Bukkit.getLogger().log(Level.INFO, "Recieve Websocket packet - {0}:{1}", new Object[]{conn, message});
        if (message.split(":")[0].equalsIgnoreCase("name")) {
            WebsocketSessionManager.getSessionManager().addSessionUsername(conn.getRemoteSocketAddress().getAddress().getHostAddress(), message.split(":")[1]);
Spotlight Deveaux's avatar
Spotlight Deveaux committed
            Player p = Bukkit.getPlayer(message.split(":")[1]);
Spotlight Deveaux's avatar
me  
Spotlight Deveaux committed
            p.sendMessage("Hello, " + p.getName() + ", with rank " + message.split(":")[3]);
Spotlight Deveaux's avatar
Hai
Spotlight Deveaux committed
        }
    }

    public static void runServer() throws InterruptedException, IOException {
        WebSocketImpl.DEBUG = true;
        int port = 8887;
        s = new WebsocketServer(port);
        s.start();
        Bukkit.getLogger().log(Level.INFO, "Websocket server started on port: {0}", s.getPort());
    }

    @Override
    public void onError(WebSocket conn, Exception ex) {
        if (conn != null) {
            // some errors like port binding failed may not be assignable to a specific websocket
        }
    }

    public void sendToAll(String data) {
        Collection<WebSocket> con = connections();
        synchronized (con) {
            for (WebSocket c : con) {
                c.send(data);
            }
        }
    }

    public void sendData(WebsocketSession session, String data) {
        Collection<WebSocket> con = connections();
        synchronized (con) {
            for (WebSocket c : con) {
                if (c.getRemoteSocketAddress().getAddress().getHostAddress().equalsIgnoreCase(session.getHost())) {
                    Bukkit.getLogger().log(Level.INFO, "Send data packet: {0}", data);
                    c.send(data);
                }
            }
        }
    }
}