forked from MagicBane/Server
MagicBot
2 years ago
5 changed files with 102 additions and 66 deletions
@ -0,0 +1,95 @@ |
|||||||
|
package engine.net.client.handlers; |
||||||
|
|
||||||
|
import engine.Enum; |
||||||
|
import engine.Enum.DispatchChannel; |
||||||
|
import engine.exception.MsgSendException; |
||||||
|
import engine.gameManager.SessionManager; |
||||||
|
import engine.gameManager.ZoneManager; |
||||||
|
import engine.net.Dispatch; |
||||||
|
import engine.net.DispatchMessage; |
||||||
|
import engine.net.client.ClientConnection; |
||||||
|
import engine.net.client.msg.*; |
||||||
|
import engine.objects.City; |
||||||
|
import engine.objects.Mine; |
||||||
|
import engine.objects.PlayerCharacter; |
||||||
|
import engine.objects.Zone; |
||||||
|
import engine.server.world.WorldServer; |
||||||
|
import engine.session.Session; |
||||||
|
|
||||||
|
/* |
||||||
|
* @Author: |
||||||
|
* @Summary: Processes application protocol message which displays |
||||||
|
* the map interface. (Zones, Cities, Realms, Hotzones) |
||||||
|
*/ |
||||||
|
|
||||||
|
public class CityDataHandler extends AbstractClientMsgHandler { |
||||||
|
|
||||||
|
public CityDataHandler() { |
||||||
|
super(KeepAliveServerClientMsg.class); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected boolean _handleNetMsg(ClientNetMsg baseMsg, ClientConnection origin) throws MsgSendException { |
||||||
|
|
||||||
|
boolean updateMine = false; |
||||||
|
boolean updateCity = false; |
||||||
|
Session playerSession; |
||||||
|
PlayerCharacter playerCharacter; |
||||||
|
Zone hotZone; |
||||||
|
|
||||||
|
playerCharacter = origin.getPlayerCharacter(); |
||||||
|
|
||||||
|
if (playerCharacter == null) |
||||||
|
return true; |
||||||
|
|
||||||
|
// Session is needed as param for worldObjectMsg.
|
||||||
|
|
||||||
|
playerSession = SessionManager.getSession(playerCharacter); |
||||||
|
|
||||||
|
if (playerSession == null) |
||||||
|
return true; |
||||||
|
|
||||||
|
// Cache current hotZone
|
||||||
|
|
||||||
|
hotZone = ZoneManager.getHotZone(); |
||||||
|
|
||||||
|
// No reason to serialize cities and mines everytime map is
|
||||||
|
// opened. Wait until something has changed.
|
||||||
|
|
||||||
|
if (playerCharacter.getTimeStamp("mineupdate") <= Mine.getLastChange()){ |
||||||
|
playerCharacter.setTimeStamp("mineupdate", System.currentTimeMillis()); |
||||||
|
updateMine = true; |
||||||
|
} |
||||||
|
|
||||||
|
if (playerCharacter.getTimeStamp("cityUpdate") <= City.lastCityUpdate){ |
||||||
|
playerCharacter.setTimeStamp("cityUpdate", System.currentTimeMillis()); |
||||||
|
updateCity = true; |
||||||
|
} |
||||||
|
|
||||||
|
cityDataMsg cityDataMsg = new cityDataMsg(SessionManager.getSession(playerCharacter), false); |
||||||
|
cityDataMsg.updateMines(updateMine); |
||||||
|
cityDataMsg.updateCities(updateCity); |
||||||
|
|
||||||
|
Dispatch dispatch = Dispatch.borrow(playerCharacter, cityDataMsg); |
||||||
|
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.SECONDARY); |
||||||
|
|
||||||
|
if (playerCharacter.getTimeStamp("hotzoneupdate") <= WorldServer.getLastHZChange()) { |
||||||
|
|
||||||
|
if (hotZone != null) { |
||||||
|
HotzoneChangeMsg hotzoneChangeMsg = new HotzoneChangeMsg(Enum.GameObjectType.Zone.ordinal(), hotZone.getObjectUUID()); |
||||||
|
dispatch = Dispatch.borrow(playerCharacter, hotzoneChangeMsg); |
||||||
|
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.SECONDARY); |
||||||
|
playerCharacter.setTimeStamp("hotzoneupdate", System.currentTimeMillis() - 100); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// Serialize the realms for this map
|
||||||
|
|
||||||
|
WorldRealmMsg worldRealmMsg = new WorldRealmMsg(); |
||||||
|
dispatch = Dispatch.borrow(playerCharacter, worldRealmMsg); |
||||||
|
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.SECONDARY); |
||||||
|
|
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue