AntSim/src/antsim/start/StartServer.java

98 lines
2.1 KiB
Java

package antsim.start;
import java.io.IOException;
import java.util.concurrent.atomic.AtomicBoolean;
import antsim.entity.EntityNestEntrance;
import antsim.init.Entities;
import antsim.nest.Nest;
import antsim.worker.WorkerComType;
import antsim.worker.WorkerServer;
import antsim.worker.WorkerSocket;
import antsim.world.World;
import bdf.types.BdfArray;
import bdf.types.BdfNamedList;
import bdf.types.BdfObject;
import bdf.types.BdfReader;
import gl_engine.MathHelpers;
import gl_engine.vec.Vec2d;
import mainloop.manager.MainloopManager;
import mainloop.task.IMainloopTask;
public class StartServer implements IMainloopTask
{
private static WorkerServer server;
private static AtomicBoolean needToUpdate = new AtomicBoolean();
public static void main(String[] args) throws IOException, InterruptedException
{
MathHelpers.init();
Entities.init();
Start.isServer = true;
int port = Start.DEFAULT_PORT;
if(args.length > 0) {
port = Integer.parseInt(args[0]);
}
server = new WorkerServer(port);
server.start();
Start.mainloop = new MainloopManager(Start.START);
Start.mainloop.register(new StartServer());
Start.mainloop.register(Start.START);
for(int i=0;i<2;i++)
{
Nest nest = new Nest(i);
Vec2d area_pos = new Vec2d(Math.random() * 50 - 25, Math.random() * 50 - 25);
for(int j=0;j<50;j++)
{
World.WORLD.nests.add(nest);
World.WORLD.entities.add(new EntityNestEntrance(
nest, area_pos.add(new Vec2d(Math.random() * 20 - 10, Math.random() * 20 - 10))));
}
}
Start.mainloop.start();
server.close();
}
public static void markNeedToUpdate() {
needToUpdate.set(true);
}
@Override
public boolean MainLoopDelay(long millis) {
return millis > 10;
}
@Override
public boolean MainLoopRepeat() {
return true;
}
@Override
public void MainLoopUpdate()
{
server.update();
if(needToUpdate.getAndSet(false))
{
BdfReader reader = new BdfReader();
BdfObject bdf = reader.getObject();
BdfNamedList nl = bdf.getNamedList();
nl.set("type", bdf.newObject().setAutoInt(WorkerComType.UPDATE));
World.WORLD.saveBDF(bdf);
server.broadcast(reader);
}
}
}