From 323ce803eb23f09cd0435cd16ee3662d4adcc9a1 Mon Sep 17 00:00:00 2001 From: Light2 Date: Mon, 8 Jul 2013 13:39:26 +0200 Subject: [PATCH] Server now sends time to clients periodically --- src/protocol/swg/ServerTimeMessage.java | 4 +- src/services/LoginService.java | 2 +- src/services/PlayerService.java | 55 ++++++++++++++++++++++++- 3 files changed, 57 insertions(+), 4 deletions(-) diff --git a/src/protocol/swg/ServerTimeMessage.java b/src/protocol/swg/ServerTimeMessage.java index 317c3534..d0d061a6 100644 --- a/src/protocol/swg/ServerTimeMessage.java +++ b/src/protocol/swg/ServerTimeMessage.java @@ -39,12 +39,12 @@ public class ServerTimeMessage extends SWGMessage { } public IoBuffer serialize() { - IoBuffer result = IoBuffer.allocate(20).order(ByteOrder.LITTLE_ENDIAN);; + IoBuffer result = IoBuffer.allocate(14).order(ByteOrder.LITTLE_ENDIAN);; result.putShort((short)2); result.putInt(0x2EBC3BD9); result.putLong(time); //time in milliseconds - return result; + return result.flip(); } } diff --git a/src/services/LoginService.java b/src/services/LoginService.java index e11e16af..e837b614 100644 --- a/src/services/LoginService.java +++ b/src/services/LoginService.java @@ -135,7 +135,7 @@ public class LoginService implements INetworkDispatch{ LoginClientToken clientToken = new LoginClientToken(client.getSessionKey(), id, user); CharacterCreationDisabled charCreationDisabled = new CharacterCreationDisabled(0); StationIdHasJediSlot jediSlot = new StationIdHasJediSlot(false); - ServerNowEpochTime time = new ServerNowEpochTime(0); + ServerNowEpochTime time = new ServerNowEpochTime((int) (System.currentTimeMillis() / 1000)); session.write(time.serialize()); session.write(clientToken.serialize()); diff --git a/src/services/PlayerService.java b/src/services/PlayerService.java index aab2dfd4..1470d87d 100644 --- a/src/services/PlayerService.java +++ b/src/services/PlayerService.java @@ -21,6 +21,59 @@ ******************************************************************************/ package services; -public class PlayerService { +import java.util.Map; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.ServerTimeMessage; + +import main.NGECore; + +import engine.clients.Client; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; + +public class PlayerService implements INetworkDispatch { + + private NGECore core; + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + + public PlayerService(final NGECore core) { + this.core = core; + scheduler.scheduleAtFixedRate(new Runnable() { + + @Override + public void run() { + ServerTimeMessage time = new ServerTimeMessage(System.currentTimeMillis() / 1000); + IoBuffer packet = time.serialize(); + synchronized(core.getActiveConnectionsMap()) { + for(Client c : core.getActiveConnectionsMap().values()) { + if(c.getParent() != null) { + c.getSession().write(packet); + } + } + } + } + + }, 1, 1, TimeUnit.MINUTES); + } + + @Override + public void insertOpcodes(Map arg0, + Map arg1) { + // TODO Auto-generated method stub + + } + + @Override + public void shutdown() { + // TODO Auto-generated method stub + + } + + }