package mekanism.common.voice; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketException; import java.util.HashSet; import java.util.Set; import mekanism.api.MekanismConfig.general; import mekanism.common.Mekanism; public class VoiceServerManager { public Set<VoiceConnection> connections = new HashSet<VoiceConnection>(); public ServerSocket serverSocket; public boolean running; public boolean foundLocal = false; public Thread listenThread; public void start() { Mekanism.logger.info("VoiceServer: Starting up server..."); try { running = true; serverSocket = new ServerSocket(general.VOICE_PORT); (listenThread = new ListenThread()).start(); } catch(Exception e) {} } public void stop() { try { Mekanism.logger.info("VoiceServer: Shutting down server..."); try { listenThread.interrupt(); } catch(Exception e) {} foundLocal = false; try { serverSocket.close(); serverSocket = null; } catch(Exception e) {} } catch(Exception e) { Mekanism.logger.error("VoiceServer: Error while shutting down server."); e.printStackTrace(); } running = false; } public void sendToPlayers(short byteCount, byte[] audioData, VoiceConnection connection) { if(connection.getPlayer() == null) { return; } int channel = connection.getCurrentChannel(); if(channel == 0) { return; } for(VoiceConnection iterConn : connections) { if(iterConn.getPlayer() == null || iterConn == connection || !iterConn.canListen(channel)) { continue; } iterConn.sendToPlayer(byteCount, audioData, connection); } } public class ListenThread extends Thread { public ListenThread() { setDaemon(true); setName("VoiceServer Listen Thread"); } @Override public void run() { while(running) { try { Socket s = serverSocket.accept(); VoiceConnection connection = new VoiceConnection(s); connection.start(); connections.add(connection); Mekanism.logger.info("VoiceServer: Accepted new connection."); } catch(SocketException e) { } catch(NullPointerException e) { } catch(Exception e) { Mekanism.logger.error("VoiceServer: Error while accepting connection."); e.printStackTrace(); } } } } }