package com.weem.epicinventor.network;
import com.weem.epicinventor.*;
import com.weem.epicinventor.actor.*;
import com.weem.epicinventor.actor.monster.*;
import com.weem.epicinventor.hud.*;
import com.weem.epicinventor.placeable.*;
import com.weem.epicinventor.resource.*;
import com.weem.epicinventor.utility.*;
import com.weem.epicinventor.world.block.*;
import java.net.*;
import java.io.*;
import java.util.ArrayList;
public class TCPServerManager extends Thread {
private Registry registry;
private GameController gameController;
private int port;
private ArrayList<TCPServer> tcpServers;
private static int maxConnections = 0;
public boolean readyForUpdates = true;
private ServerSocket listenerSocket;
private boolean shuttingDown = false;
public TCPServerManager(Registry r, GameController gc, int p) {
registry = r;
gameController = gc;
port = p;
tcpServers = new ArrayList<TCPServer>();
}
@Override
public void run() {
int i = 0;
try {
listenerSocket = new ServerSocket(port);
Socket socket;
EIError.debugMsg("Listening");
gameController.showMessage("Success", "Waiting for incoming connection...");
gameController.multiplayerMode = gameController.multiplayerMode.SERVER;
EIError.debugMsg("Waiting for Connection...");
while ((i++ < maxConnections) || (maxConnections == 0)) {
socket = listenerSocket.accept();
if (!shuttingDown) {
TCPServer connection = new TCPServer(registry, gameController, socket, port + (i - 1));
tcpServers.add(connection);
connection.start();
EIError.debugMsg("Connected");
gameController.setNetworkMode(true);
gameController.showMessage("Success", "Network Connection Established");
}
}
} catch (IOException ioe) {
if (!shuttingDown) {
gameController.showMessage("Error", "Couldn't listen on port " + port);
System.out.println("IOException on socket listen: " + ioe);
ioe.printStackTrace();
}
}
}
public boolean sendData(Object data) {
boolean status = true;
TCPServer tcpServer;
for (int i = 0; i < tcpServers.size(); i++) {
tcpServer = tcpServers.get(i);
if (tcpServer != null) {
if (tcpServer.readyForUpdates) {
if (!tcpServer.sendData(data)) {
status = false;
}
}
}
}
return status;
}
public void close() {
System.out.println("tcp servers closed");
TCPServer tcpServer;
for (int i = 0; i < tcpServers.size(); i++) {
tcpServer = tcpServers.get(i);
if (tcpServer != null) {
tcpServer.keepRunning = false;
}
}
shuttingDown = true;
if (listenerSocket != null) {
try {
listenerSocket.close();
} catch (IOException e) {
}
}
gameController.setNetworkMode(false);
gameController.multiplayerMode = gameController.multiplayerMode.NONE;
}
}