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.io.*;
import java.net.*;
public class NetworkThread extends Thread {
private Registry registry;
private GameController gameController;
private Socket clientSocket;
private ServerSocket serverSocket;
private String ip;
private int port;
private ObjectInputStream input;
private ObjectOutputStream output;
protected int currentStartCollumn;
public boolean keepRunning = true;
public boolean readyForUpdates = false;
public ServerReceiveThread serverReceiveThread;
public ClientReceiveThread clientReceiveThread;
protected static int collumnChunkSize;
public NetworkThread(Registry r, GameController gc, String i, int p) {
registry = r;
gameController = gc;
ip = i;
port = p;
currentStartCollumn = 0;
collumnChunkSize = 200;
}
@Override
public void run() // read server messages and act on them.
{
if (ip.isEmpty()) {
doServer();
} else {
doClient();
}
return;
}
public void close() {
EIError.debugMsg("Closing");
if (serverSocket != null) {
try {
sendData("goodbye");
serverSocket.close();
} catch (IOException e) {
//oh well, ain't no thang
}
}
keepRunning = false;
serverSocket = null;
}
private void listen() {
EIError.debugMsg("Trying to listen...");
if (serverSocket != null) {
try {
serverSocket.close();
} catch (IOException e) {
//oh well, ain't no thang
}
}
serverSocket = null;
try {
serverSocket = new ServerSocket(port);
} catch (IOException e) {
gameController.showMessage("Error", "Couldn't listen on port " + port);
return;
}
EIError.debugMsg("Listening");
gameController.showMessage("Success", "Waiting for incoming connection...");
gameController.multiplayerMode = gameController.multiplayerMode.SERVER;
EIError.debugMsg("Waiting for Connection...");
try {
clientSocket = serverSocket.accept();
DatagramSocket socket = new DatagramSocket(5556);
System.out.println(port);
serverReceiveThread = new ServerReceiveThread(registry, gameController, socket, port);
serverReceiveThread.start();
} catch (IOException e) {
gameController.showMessage("Error", "Couldn't accept connection...");
return;
}
EIError.debugMsg("Connected");
gameController.setNetworkMode(true);
gameController.showMessage("Success", "Network Connection Established");
}
private void doServer() {
Object data;
String playerId = "";
listen();
if (clientSocket != null) {
if (clientSocket.isConnected()) {
try {
EIError.debugMsg("Creating output stream");
output = new ObjectOutputStream(clientSocket.getOutputStream());
EIError.debugMsg("Creating input stream");
input = new ObjectInputStream(clientSocket.getInputStream());
EIError.debugMsg("IO Created");
while (keepRunning && clientSocket.isConnected()) {
data = input.readObject();
EIError.debugMsg("Received data: " + data.toString());
if (data.getClass().equals(String.class)) {
data = (String) data;
if (data.toString().equals("goodbye")) {
clientSocket.close();
if (serverSocket != null) {
serverSocket.close();
}
keepRunning = false;
} else if (data.toString().equals("send block manager")) {
EIError.debugMsg("Sending Block Manager Data...");
BlockManager bm = (BlockManager)(registry.getBlockManager().clone());
bm.clearBlockArray();
sendData(bm);
bm = null;
EIError.debugMsg("Block Manager Data Sent");
} else if (data.toString().equals("send block manager chunk")) {
EIError.debugMsg("Sending Block Manager Data...");
//BlockManager bm = registry.getBlockManager();
short[][] blockChunk = registry.getBlockManager().getBlockCollumns(currentStartCollumn, currentStartCollumn + NetworkThread.collumnChunkSize);
currentStartCollumn += NetworkThread.collumnChunkSize;
sendData(blockChunk);
blockChunk = null;
EIError.debugMsg("Block Manager Data Sent 0..200");
try {
sleep(10);
} catch (InterruptedException ex) {
}
} else if (data.toString().equals("send placable manager")) {
EIError.debugMsg("Sending Placeable Manager Data...");
PlaceableManager pm = registry.getPlaceableManager();
sendData(pm);
pm = null;
EIError.debugMsg("Placeable Manager Data Sent");
} else if (data.toString().equals("send resource manager")) {
EIError.debugMsg("Sending Resource Manager Data...");
ResourceManager rm = registry.getResourceManager();
sendData(rm);
rm = null;
EIError.debugMsg("Resource Manager Data Sent");
} else if (data.toString().equals("send monster manager")) {
EIError.debugMsg("Sending Monster Manager Data...");
MonsterManager mm = registry.getMonsterManager();
sendData(mm);
mm = null;
EIError.debugMsg("Monster Manager Data Sent");
} else if (data.toString().equals("send player")) {
EIError.debugMsg("Sending Player Data...");
sendData(registry.getPlayerManager().getCurrentPlayer());
EIError.debugMsg("Player Data Sent");
} else if (data.toString().length() >= 6 && data.toString().substring(0, 6).equals("place ")) {
String parts[] = data.toString().split(" ");
if (parts.length == 4) {
EIError.debugMsg("Adding placeable...");
registry.getPlaceableManager().loadPlaceable(parts[1], Integer.parseInt(parts[2]), Integer.parseInt(parts[3]), Placeable.State.Placed);
}
} else if (data.toString().length() >= 18 && data.toString().substring(0, 18).equals("send monster data:")) {
String id = data.toString().substring(19);
Monster monster = registry.getMonsterManager().getMonsterById(id);
if (monster != null) {
EIError.debugMsg("Sending Monster Data (" + monster.getId() + ")...");
sendData(monster);
EIError.debugMsg("Monster Data Sent");
}
} else if (data.toString().length() >= 20 && data.toString().substring(0, 20).equals("send placeable data:")) {
String id = data.toString().substring(21);
Placeable placeable = registry.getPlaceableManager().getPlaceableById(id);
if (placeable != null) {
EIError.debugMsg("Sending Placeable Data (" + placeable.getId() + ")...");
sendData(placeable);
EIError.debugMsg("Placeable Data Sent");
}
} else {
if (!data.toString().isEmpty()) {
gameController.showMessage("Success", "Message: " + data);
}
}
} else if (data.getClass().equals(Player.class)) {
EIError.debugMsg("Adding Player...");
Player p = (Player) data;
p.setTransient(registry);
registry.getPlayerManager().registerPlayer(p);
playerId = p.getId();
EIError.debugMsg("Player Added");
readyForUpdates = true;
} else if (data.getClass().equals(UpdatePlayer.class)) {
UpdatePlayer up = (UpdatePlayer) data;
EIError.debugMsg("Updating Player (" + up.id + ")...");
registry.getPlayerManager().processPlayerUpdate(up);
EIError.debugMsg("Player Updated");
} else if (data.getClass().equals(UpdatePlaceable.class)) {
UpdatePlaceable up = (UpdatePlaceable) data;
EIError.debugMsg("Updating Placeable (" + up.id + ")...");
registry.getPlaceableManager().processPlaceableUpdate(up);
EIError.debugMsg("Placeable Updated");
}
data = null;
}
} catch (IOException e) {
EIError.debugMsg("Network IO Error: " + e.getMessage());
} catch (ClassNotFoundException e) {
EIError.debugMsg("Network Class Error: " + e.getMessage());
} catch (Exception e) {
EIError.debugMsg("Network Error: " + e.getMessage());
}
}
}
readyForUpdates = false;
gameController.setNetworkMode(false);
gameController.multiplayerMode = gameController.multiplayerMode.NONE;
PlayerManager pm = registry.getPlayerManager();
if (pm != null) {
pm.removePlayer(playerId);
}
//restart the server
if (keepRunning) {
this.doServer();
}
}
private void doClient() {
Object data;
gameController.setLoading(true);
registry.getHUDManager().loadHUD(HUDManager.HUDType.ScreenLoading);
try {
clientSocket = new Socket(ip, port);
} catch (IOException e) {
gameController.setLoading(false);
registry.getHUDManager().unloadHUD("ScreenLoading");
gameController.showMessage("Error", "Couldn't connect to " + ip + ":" + port);
return;
}
gameController.setNetworkMode(true);
gameController.multiplayerMode = gameController.multiplayerMode.CLIENT;
try {
Game.loadingText = "Establishing Connection";
EIError.debugMsg("Creating output stream");
output = new ObjectOutputStream(clientSocket.getOutputStream());
EIError.debugMsg("Creating input stream");
input = new ObjectInputStream(clientSocket.getInputStream());
EIError.debugMsg("IO Created");
output.writeObject("send block manager");
data = input.readObject();
BlockManager bm = (BlockManager) data;
bm.resetBlockArray(registry.getBlockManager().getMapCols(), registry.getBlockManager().getMapRows());
bm.setTransient(registry);
gameController.setBlockManager(bm);
bm = null;
EIError.debugMsg("Block Manager set");
output.writeObject("send block manager chunk");
Game.loadingText = "Getting World Data...";
while (keepRunning && clientSocket.isConnected()) {
data = input.readObject();
EIError.debugMsg("Received data: " + data.toString());
if (data.getClass().equals(String.class)) {
data = (String) data;
if (data.toString().equals("goodbye")) {
clientSocket.close();
if (serverSocket != null) {
serverSocket.close();
}
keepRunning = false;
} else {
if (!data.toString().isEmpty()) {
gameController.showMessage("Success", "Message: " + data);
}
}
// } else if (data.getClass().equals(BlockManager.class)) {
// EIError.debugMsg("Setting Block Manager...");
// BlockManager bm = (BlockManager) data;
// bm.setTransient(registry);
// gameController.setBlockManager(bm);
// bm = null;
// EIError.debugMsg("Block Manager set");
// sendData("send placable manager");
// Game.loadingText = "Getting Building Data...";
} else if (data.getClass().equals(short[][].class)) {
EIError.debugMsg("Setting Block Manager...");
short[][] blockChunk = (short[][]) data;
if (blockChunk.length >= NetworkThread.collumnChunkSize) {
registry.getBlockManager().setBlockCollumns(blockChunk, currentStartCollumn, currentStartCollumn + NetworkThread.collumnChunkSize);
if (currentStartCollumn == 0) {
sendData("send placable manager");
}
currentStartCollumn += NetworkThread.collumnChunkSize;
EIError.debugMsg("Block Manager chunk " + currentStartCollumn + " " + currentStartCollumn + NetworkThread.collumnChunkSize);
output.writeObject("send block manager chunk");
try {
sleep(10);
} catch (InterruptedException ex) {
}
} else {
EIError.debugMsg("Block Manager set");
}
blockChunk = null;
Game.loadingText = "Getting Building Data...";
} else if (data.getClass().equals(PlaceableManager.class)) {
EIError.debugMsg("Setting Placeable Manager...");
PlaceableManager pm = (PlaceableManager) data;
pm.setTransient(registry);
gameController.setPlaceableManager(pm);
pm = null;
registry.getPlayerManager().getCurrentPlayer().init();
EIError.debugMsg("Placeable Manager set");
sendData("send resource manager");
Game.loadingText = "Making Shinies...";
} else if (data.getClass().equals(ResourceManager.class)) {
EIError.debugMsg("Setting Resource Manager...");
ResourceManager rm = (ResourceManager) data;
rm.setTransient(registry);
gameController.setResourceManager(rm);
rm = null;
EIError.debugMsg("Resource Manager set");
sendData("send monster manager");
Game.loadingText = "Spawning Evil Bad Guys";
} else if (data.getClass().equals(MonsterManager.class)) {
EIError.debugMsg("Setting Monster Manager...");
MonsterManager mm = (MonsterManager) data;
mm.setTransient(registry);
gameController.setMonsterManager(mm);
mm = null;
EIError.debugMsg("Monster Manager set");
sendData("send player");
Game.loadingText = "Initializing Inventors";
} else if (data.getClass().equals(Player.class)) {
EIError.debugMsg("Adding Player...");
Player p = (Player) data;
p.setTransient(registry);
registry.getPlayerManager().registerPlayer(p);
EIError.debugMsg("Player Added");
EIError.debugMsg("Sending Player Data...");
sendData(registry.getPlayerManager().getCurrentPlayer());
EIError.debugMsg("Player Data Sent");
Game.loadingText = "Here we go!";
gameController.setLoading(false);
registry.getHUDManager().unloadHUD("ScreenLoading");
registry.getBlockManager().updateResolution();
gameController.setIsInGame(true);
readyForUpdates = true;
try {
DatagramSocket socket = new DatagramSocket();
clientReceiveThread = new ClientReceiveThread(registry, gameController, socket, ip, 5556);
clientReceiveThread.start();
System.out.println("Socket Created");
} catch (IOException e) {
e.printStackTrace();
}
} else if (data.getClass().equals(Resource.class)) {
Resource r = (Resource) data;
EIError.debugMsg("Adding Resource (" + r.getId() + ")...");
r.setTransient(registry, registry.getResourceManager());
registry.getResourceManager().registerResource(r);
EIError.debugMsg("Resource Added");
} else if (data.getClass().equals(AggressiveSnake.class)) {
AggressiveSnake m = (AggressiveSnake) data;
m.setTransient(registry, registry.getMonsterManager());
registry.getMonsterManager().registerMonster(m);
} else if (data.getClass().equals(BlueThorn.class)) {
BlueThorn m = (BlueThorn) data;
m.setTransient(registry, registry.getMonsterManager());
registry.getMonsterManager().registerMonster(m);
} else if (data.getClass().equals(BossOrc.class)) {
BossOrc m = (BossOrc) data;
m.setTransient(registry, registry.getMonsterManager());
registry.getMonsterManager().registerMonster(m);
} else if (data.getClass().equals(SnailRider.class)) {
SnailRider m = (SnailRider) data;
m.setTransient(registry, registry.getMonsterManager());
registry.getMonsterManager().registerMonster(m);
} else if (data.getClass().equals(LionFly.class)) {
LionFly m = (LionFly) data;
m.setTransient(registry, registry.getMonsterManager());
registry.getMonsterManager().registerMonster(m);
} else if (data.getClass().equals(Orc.class)) {
Orc m = (Orc) data;
m.setTransient(registry, registry.getMonsterManager());
registry.getMonsterManager().registerMonster(m);
} else if (data.getClass().equals(Pig.class)) {
Pig m = (Pig) data;
m.setTransient(registry, registry.getMonsterManager());
registry.getMonsterManager().registerMonster(m);
} else if (data.getClass().equals(Porcupine.class)) {
Porcupine m = (Porcupine) data;
m.setTransient(registry, registry.getMonsterManager());
registry.getMonsterManager().registerMonster(m);
} else if (data.getClass().equals(RedOrc.class)) {
RedOrc m = (RedOrc) data;
m.setTransient(registry, registry.getMonsterManager());
registry.getMonsterManager().registerMonster(m);
} else if (data.getClass().equals(RockMonster.class)) {
RockMonster m = (RockMonster) data;
m.setTransient(registry, registry.getMonsterManager());
registry.getMonsterManager().registerMonster(m);
} else if (data.getClass().equals(Snail.class)) {
Snail m = (Snail) data;
m.setTransient(registry, registry.getMonsterManager());
registry.getMonsterManager().registerMonster(m);
} else if (data.getClass().equals(Snake.class)) {
Snake m = (Snake) data;
m.setTransient(registry, registry.getMonsterManager());
registry.getMonsterManager().registerMonster(m);
} else if (data.getClass().equals(SpiderWorm.class)) {
SpiderWorm m = (SpiderWorm) data;
m.setTransient(registry, registry.getMonsterManager());
registry.getMonsterManager().registerMonster(m);
} else if (data.getClass().equals(VineThorn.class)) {
VineThorn m = (VineThorn) data;
m.setTransient(registry, registry.getMonsterManager());
registry.getMonsterManager().registerMonster(m);
} else if (data.getClass().equals(ZombieWalrus.class)) {
ZombieWalrus m = (ZombieWalrus) data;
m.setTransient(registry, registry.getMonsterManager());
registry.getMonsterManager().registerMonster(m);
} else if (data.getClass().equals(AutoXBow.class)) {
AutoXBow p = (AutoXBow) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(BookShelf.class)) {
BookShelf p = (BookShelf) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(BladeTrap.class)) {
BladeTrap p = (BladeTrap) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(Box.class)) {
Box p = (Box) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(Chest.class)) {
Chest p = (Chest) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(CopperMine.class)) {
CopperMine p = (CopperMine) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(Crate.class)) {
Crate p = (Crate) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(EmeraldTeleporter.class)) {
EmeraldTeleporter p = (EmeraldTeleporter) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(Forge.class)) {
Forge p = (Forge) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(GoldMine.class)) {
GoldMine p = (GoldMine) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(IronMine.class)) {
IronMine p = (IronMine) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(ItemContainer.class)) {
ItemContainer p = (ItemContainer) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(LargeFarm.class)) {
LargeFarm p = (LargeFarm) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(LargeSafe.class)) {
LargeSafe p = (LargeSafe) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(LionFlyStatue.class)) {
LionFlyStatue p = (LionFlyStatue) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(MedicKit.class)) {
MedicKit p = (MedicKit) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(MediumSafe.class)) {
MediumSafe p = (MediumSafe) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(Pasture.class)) {
Pasture p = (Pasture) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(PlatinumMine.class)) {
PlatinumMine p = (PlatinumMine) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(PottedFlower.class)) {
PottedFlower p = (PottedFlower) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(RubyTeleporter.class)) {
RubyTeleporter p = (RubyTeleporter) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(SapphireTeleporter.class)) {
SapphireTeleporter p = (SapphireTeleporter) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(SawMill.class)) {
SawMill p = (SawMill) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(ScareCrow.class)) {
ScareCrow p = (ScareCrow) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(SilverMine.class)) {
SilverMine p = (SilverMine) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(SmallFarm.class)) {
SmallFarm p = (SmallFarm) data;
p.setTransient(registry);
} else if (data.getClass().equals(SmallSafe.class)) {
SmallSafe p = (SmallSafe) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(SteamEngine.class)) {
SteamEngine p = (SteamEngine) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(StoneMine.class)) {
StoneMine p = (StoneMine) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(ThornTrap.class)) {
ThornTrap p = (ThornTrap) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(TownBlock.class)) {
TownBlock p = (TownBlock) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(Building.class)) {
Building p = (Building) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(WeaponRack.class)) {
WeaponRack p = (WeaponRack) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(WindMill.class)) {
WindMill p = (WindMill) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(WorkBench.class)) {
WorkBench p = (WorkBench) data;
p.setTransient(registry);
registry.getPlaceableManager().registerPlaceable(p);
} else if (data.getClass().equals(UpdatePlayer.class)) {
UpdatePlayer up = (UpdatePlayer) data;
EIError.debugMsg("Updating Player (" + up.id + ")...");
registry.getPlayerManager().processPlayerUpdate(up);
EIError.debugMsg("Player Updated");
} else if (data.getClass().equals(UpdateMonster.class)) {
UpdateMonster um = (UpdateMonster) data;
EIError.debugMsg("Updating Monster (" + um.id + ")...");
registry.getMonsterManager().processMonsterUpdate(um);
EIError.debugMsg("Monster Updated");
} else if (data.getClass().equals(UpdateRobot.class)) {
UpdateRobot ur = (UpdateRobot) data;
EIError.debugMsg("Updating Robot (" + ur.id + ")...");
registry.getPlayerManager().processRobotUpdate(ur);
EIError.debugMsg("Robot Updated");
} else if (data.getClass().equals(UpdatePlaceable.class)) {
UpdatePlaceable up = (UpdatePlaceable) data;
EIError.debugMsg("Updating Placeable (" + up.id + ")...");
registry.getPlaceableManager().processPlaceableUpdate(up);
EIError.debugMsg("Placeable Updated");
} else if (data.getClass().equals(UpdateResource.class)) {
UpdateResource ur = (UpdateResource) data;
EIError.debugMsg("Updating Resource (" + ur.id + ")...");
registry.getResourceManager().processResourceUpdate(ur);
EIError.debugMsg("Resource Updated");
} else if (data.getClass().equals(UpdateProjectile.class)) {
UpdateProjectile up = (UpdateProjectile) data;
EIError.debugMsg("Updating Projectile...");
registry.getProjectileManager().processProjectileUpdate(up);
EIError.debugMsg("Projectile Updated");
}
data = null;
}
} catch (IOException e) {
EIError.debugMsg("Network IO Error: " + e.getMessage());
} catch (ClassNotFoundException e) {
EIError.debugMsg("Network Class Error: " + e.getMessage());
} catch (Exception e) {
EIError.debugMsg("Network Error: " + e.getMessage());
}
readyForUpdates = false;
gameController.setNetworkMode(false);
gameController.multiplayerMode = gameController.multiplayerMode.NONE;
gameController.showMessage("Error", "Server went offline");
gameController.saveAndQuit();
return;
}
public boolean sendData(Object data) {
if (output == null || !clientSocket.isConnected()) {
return false;
}
synchronized (this) {
try {
output.flush();
output.writeObject(data);
output.flush();
output.reset();
if (data.getClass().equals(String.class)) {
if (data.equals("goodbye")) {
clientSocket.close();
if (serverSocket != null) {
serverSocket.close();
}
keepRunning = false;
}
}
} catch (IOException e) {
EIError.debugMsg("Network IO Error - Sending");
}
return true;
}
}
}