Started to refactor Services to use the new Intentsystem

This commit is contained in:
tacef ine
2017-01-24 20:43:45 +01:00
parent 804e6bcafe
commit e23bbc3055
5 changed files with 109 additions and 178 deletions
+15 -21
View File
@@ -27,8 +27,6 @@
***********************************************************************************/
package services.admin;
import intents.PlayerEventIntent;
import java.io.IOException;
import java.net.InetAddress;
import java.net.MalformedURLException;
@@ -43,17 +41,17 @@ import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import intents.PlayerEventIntent;
import resources.common.BCrypt;
import resources.config.ConfigFile;
import resources.control.Intent;
import resources.control.Service;
import resources.server_info.Config;
import resources.server_info.Log;
import services.admin.http.HttpServer;
import services.admin.http.HttpServer.HttpServerCallback;
import services.admin.http.HttpSession;
import services.admin.http.HttpSocket;
import services.admin.http.HttpSocket.HttpRequest;
import services.admin.http.HttpSession;
import services.admin.http.HttpsServer;
import utilities.ThreadUtilities;
@@ -97,7 +95,7 @@ public class OnlineInterfaceService extends Service implements HttpServerCallbac
return false;
}
executor = Executors.newSingleThreadScheduledExecutor(ThreadUtilities.newThreadFactory("ServerInterface-DataCollection"));
registerForIntent(PlayerEventIntent.TYPE);
registerForIntent(PlayerEventIntent.class, pei -> handlePlayerEventIntent(pei));
return super.initialize();
}
@@ -164,22 +162,18 @@ public class OnlineInterfaceService extends Service implements HttpServerCallbac
}
}
@Override
public void onIntentReceived(Intent i) {
if (i instanceof PlayerEventIntent) {
PlayerEventIntent pei = (PlayerEventIntent) i;
switch (pei.getEvent()) {
case PE_ZONE_IN_CLIENT:
data.addOnlinePlayer(pei.getPlayer());
break;
case PE_LOGGED_OUT:
data.removeOnlinePlayer(pei.getPlayer());
break;
default:
break;
}
}
}
private void handlePlayerEventIntent(PlayerEventIntent pei){
switch (pei.getEvent()) {
case PE_ZONE_IN_CLIENT:
data.addOnlinePlayer(pei.getPlayer());
break;
case PE_LOGGED_OUT:
data.removeOnlinePlayer(pei.getPlayer());
break;
default:
break;
}
}
private void collectData() {
data.updateResourceUsage();
+15 -34
View File
@@ -47,7 +47,6 @@ import network.packets.swg.zone.chat.ChatPersistentMessageToClient;
import network.packets.swg.zone.chat.ChatPersistentMessageToServer;
import network.packets.swg.zone.chat.ChatRequestPersistentMessage;
import resources.chat.ChatResult;
import resources.control.Intent;
import resources.control.Service;
import resources.encodables.player.Mail;
import resources.objects.SWGObject;
@@ -76,9 +75,9 @@ public class ChatMailService extends Service {
insertChatLog = chatLogs.prepareStatement("INSERT INTO chat_log VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
maxMailId = 1;
registerForIntent(GalacticPacketIntent.TYPE);
registerForIntent(PersistentMessageIntent.TYPE);
registerForIntent(PlayerEventIntent.TYPE);
registerForIntent(GalacticPacketIntent.class, gpi -> handleGalacticPacketIntent(gpi));
registerForIntent(PersistentMessageIntent.class, pmi -> handlePersistentMessageIntent(pmi));
registerForIntent(PlayerEventIntent.class, pei -> handlePlayerEventIntent(pei));
}
@Override
@@ -97,30 +96,12 @@ public class ChatMailService extends Service {
return super.terminate();
}
@Override
public void onIntentReceived(Intent i) {
switch (i.getType()) {
case GalacticPacketIntent.TYPE:
if (i instanceof GalacticPacketIntent)
processPacket((GalacticPacketIntent) i);
break;
case PersistentMessageIntent.TYPE:
if (i instanceof PersistentMessageIntent)
handlePersistentMessageIntent((PersistentMessageIntent) i);
break;
case PlayerEventIntent.TYPE:
if (i instanceof PlayerEventIntent)
handlePlayerEventIntent((PlayerEventIntent) i);
break;
}
}
private void handlePlayerEventIntent(PlayerEventIntent intent) {
Player player = intent.getPlayer();
private void handlePlayerEventIntent(PlayerEventIntent pei) {
Player player = pei.getPlayer();
if (player == null)
return;
switch (intent.getEvent()) {
switch (pei.getEvent()) {
case PE_FIRST_ZONE:
sendPersistentMessageHeaders(player);
break;
@@ -129,8 +110,8 @@ public class ChatMailService extends Service {
}
}
private void processPacket(GalacticPacketIntent intent) {
Packet p = intent.getPacket();
private void handleGalacticPacketIntent(GalacticPacketIntent gpi){
Packet p = gpi.getPacket();
if (!(p instanceof SWGPacket))
return;
SWGPacket swg = (SWGPacket) p;
@@ -139,11 +120,11 @@ public class ChatMailService extends Service {
/* Mails */
case CHAT_PERSISTENT_MESSAGE_TO_SERVER:
if (p instanceof ChatPersistentMessageToServer)
handleSendPersistentMessage(intent.getPlayerManager(), intent.getPlayer(), galaxyName, (ChatPersistentMessageToServer) p);
handleSendPersistentMessage(gpi.getPlayerManager(), gpi.getPlayer(), galaxyName, (ChatPersistentMessageToServer) p);
break;
case CHAT_REQUEST_PERSISTENT_MESSAGE:
if (p instanceof ChatRequestPersistentMessage)
handlePersistentMessageRequest(intent.getPlayer(), galaxyName, (ChatRequestPersistentMessage) p);
handlePersistentMessageRequest(gpi.getPlayer(), galaxyName, (ChatRequestPersistentMessage) p);
break;
case CHAT_DELETE_PERSISTENT_MESSAGE:
if (p instanceof ChatDeletePersistentMessage)
@@ -188,23 +169,23 @@ public class ChatMailService extends Service {
}
}
private void handlePersistentMessageIntent(PersistentMessageIntent intent) {
if (intent.getReceiver() == null)
private void handlePersistentMessageIntent(PersistentMessageIntent pmi) {
if (pmi.getReceiver() == null)
return;
Player recipient = intent.getReceiver().getOwner();
Player recipient = pmi.getReceiver().getOwner();
if (recipient == null)
return;
Mail mail = intent.getMail();
Mail mail = pmi.getMail();
mail.setId(maxMailId);
maxMailId++;
mail.setTimestamp((int) (new Date().getTime() / 1000));
mails.add(mail);
sendPersistentMessage(recipient, mail, MailFlagType.HEADER_ONLY, intent.getGalaxy());
sendPersistentMessage(recipient, mail, MailFlagType.HEADER_ONLY, pmi.getGalaxy());
}
private void handlePersistentMessageRequest(Player player, String galaxy, ChatRequestPersistentMessage request) {
+44 -70
View File
@@ -27,24 +27,29 @@
***********************************************************************************/
package services.chat;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Locale;
import intents.NotifyPlayersPacketIntent;
import intents.PlayerEventIntent;
import intents.chat.ChatAvatarRequestIntent;
import intents.chat.ChatBroadcastIntent;
import intents.chat.PersistentMessageIntent;
import intents.chat.SpatialChatIntent;
import intents.network.GalacticPacketIntent;
import intents.server.ServerStatusIntent;
import network.packets.Packet;
import network.packets.swg.SWGPacket;
import network.packets.swg.zone.chat.*;
import network.packets.swg.zone.chat.ChatFriendsListUpdate;
import network.packets.swg.zone.chat.ChatInstantMessageToCharacter;
import network.packets.swg.zone.chat.ChatInstantMessageToClient;
import network.packets.swg.zone.chat.ChatOnSendInstantMessage;
import network.packets.swg.zone.chat.ChatSystemMessage;
import network.packets.swg.zone.chat.ChatSystemMessage.SystemChatType;
import network.packets.swg.zone.object_controller.SpatialChat;
import resources.Terrain;
import resources.chat.ChatAvatar;
import resources.chat.ChatResult;
import resources.collections.SWGList;
import resources.control.Intent;
import resources.control.Manager;
import resources.encodables.OutOfBandPackage;
import resources.encodables.ProsePackage;
@@ -58,10 +63,6 @@ import resources.server_info.RelationalServerFactory;
import services.CoreManager;
import services.player.PlayerManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Locale;
public class ChatManager extends Manager {
private final ChatRoomService roomService;
@@ -78,61 +79,34 @@ public class ChatManager extends Manager {
addChildService(roomService);
addChildService(mailService);
registerForIntent(GalacticPacketIntent.TYPE);
registerForIntent(SpatialChatIntent.TYPE);
registerForIntent(PersistentMessageIntent.TYPE);
registerForIntent(PlayerEventIntent.TYPE);
registerForIntent(ChatBroadcastIntent.TYPE);
registerForIntent(ServerStatusIntent.TYPE);
registerForIntent(ChatAvatarRequestIntent.TYPE);
registerForIntent(GalacticPacketIntent.class, gpi -> handleGalacticPacketIntent(gpi));
registerForIntent(SpatialChatIntent.class, spi -> handleSpatialChatIntent(spi));
registerForIntent(PlayerEventIntent.class, pei -> handlePlayerEventIntent(pei));
registerForIntent(ChatBroadcastIntent.class, cbi -> handleChatBroadcastIntent(cbi));
registerForIntent(ChatAvatarRequestIntent.class, cari -> handleChatAvatarRequestIntent(cari));
}
public void onIntentReceived(Intent i) {
switch (i.getType()) {
case GalacticPacketIntent.TYPE:
if (i instanceof GalacticPacketIntent)
processPacket((GalacticPacketIntent) i);
break;
case SpatialChatIntent.TYPE:
if (i instanceof SpatialChatIntent)
handleSpatialChat((SpatialChatIntent) i);
break;
case PlayerEventIntent.TYPE:
if (i instanceof PlayerEventIntent)
handlePlayerEventIntent((PlayerEventIntent) i);
break;
case ChatBroadcastIntent.TYPE:
if (i instanceof ChatBroadcastIntent)
handleChatBroadcast((ChatBroadcastIntent) i);
break;
case ChatAvatarRequestIntent.TYPE:
if (i instanceof ChatAvatarRequestIntent)
handleChatAvatarStatusRequestIntent((ChatAvatarRequestIntent) i);
break;
}
}
private void processPacket(GalacticPacketIntent intent) {
Packet p = intent.getPacket();
private void handleGalacticPacketIntent(GalacticPacketIntent gpi) {
Packet p = gpi.getPacket();
if (!(p instanceof SWGPacket))
return;
SWGPacket swg = (SWGPacket) p;
switch (swg.getPacketType()) {
case CHAT_INSTANT_MESSAGE_TO_CHARACTER:
if (p instanceof ChatInstantMessageToCharacter)
handleInstantMessage(intent.getPlayerManager(), intent.getPlayer(), (ChatInstantMessageToCharacter) p);
handleInstantMessage(gpi.getPlayerManager(), gpi.getPlayer(), (ChatInstantMessageToCharacter) p);
break;
default:
break;
}
}
private void handlePlayerEventIntent(PlayerEventIntent intent) {
Player player = intent.getPlayer();
private void handlePlayerEventIntent(PlayerEventIntent pei) {
Player player = pei.getPlayer();
if (player == null)
return;
switch (intent.getEvent()) {
switch (pei.getEvent()) {
case PE_FIRST_ZONE:
updateChatAvatarStatus(player, true);
break;
@@ -145,51 +119,51 @@ public class ChatManager extends Manager {
}
}
private void handleChatBroadcast(ChatBroadcastIntent i) {
switch(i.getBroadcastType()) {
private void handleChatBroadcastIntent(ChatBroadcastIntent cbi) {
switch(cbi.getBroadcastType()) {
case AREA:
broadcastAreaMessage(i.getMessage(), i.getBroadcaster());
logChat(i.getBroadcaster(), ChatType.SYSTEM, ChatRange.LOCAL, i.getMessage());
broadcastAreaMessage(cbi.getMessage(), cbi.getBroadcaster());
logChat(cbi.getBroadcaster(), ChatType.SYSTEM, ChatRange.LOCAL, cbi.getMessage());
break;
case PLANET:
broadcastPlanetMessage(i.getMessage(), i.getTerrain());
logChat(i.getBroadcaster(), ChatType.SYSTEM, ChatRange.TERRAIN, i.getMessage());
broadcastPlanetMessage(cbi.getMessage(), cbi.getTerrain());
logChat(cbi.getBroadcaster(), ChatType.SYSTEM, ChatRange.TERRAIN, cbi.getMessage());
break;
case GALAXY:
broadcastGalaxyMessage(i.getMessage());
logChat(i.getBroadcaster(), ChatType.SYSTEM, ChatRange.GALAXY, i.getMessage());
broadcastGalaxyMessage(cbi.getMessage());
logChat(cbi.getBroadcaster(), ChatType.SYSTEM, ChatRange.GALAXY, cbi.getMessage());
break;
case PERSONAL:
broadcastPersonalMessage(i.getProse(), i.getBroadcaster(), i.getMessage());
logChat(i.getBroadcaster(), ChatType.SYSTEM, ChatRange.PERSONAL, i.getMessage());
broadcastPersonalMessage(cbi.getProse(), cbi.getBroadcaster(), cbi.getMessage());
logChat(cbi.getBroadcaster(), ChatType.SYSTEM, ChatRange.PERSONAL, cbi.getMessage());
break;
}
}
private void handleChatAvatarStatusRequestIntent(ChatAvatarRequestIntent i) {
switch (i.getRequestType()) {
private void handleChatAvatarRequestIntent(ChatAvatarRequestIntent cari) {
switch (cari.getRequestType()) {
case TARGET_STATUS: {
Player player = i.getPlayer();
sendTargetAvatarStatus(player, new ChatAvatar(0, i.getTarget(), CoreManager.getGalaxy().getName()));
Player player = cari.getPlayer();
sendTargetAvatarStatus(player, new ChatAvatar(0, cari.getTarget(), CoreManager.getGalaxy().getName()));
break;
}
case FRIEND_ADD_TARGET:
handleAddFriend(i.getPlayer(), i.getTarget());
handleAddFriend(cari.getPlayer(), cari.getTarget());
break;
case FRIEND_REMOVE_TARGET:
handleRemoveFriend(i.getPlayer(), i.getTarget());
handleRemoveFriend(cari.getPlayer(), cari.getTarget());
break;
case FRIEND_LIST:
handleRequestFriendList(i.getPlayer());
handleRequestFriendList(cari.getPlayer());
break;
case IGNORE_REMOVE_TARGET:
handleRemoveIgnored(i.getPlayer(), i.getTarget());
handleRemoveIgnored(cari.getPlayer(), cari.getTarget());
break;
case IGNORE_ADD_TARGET:
handleAddIgnored(i.getPlayer(), i.getTarget());
handleAddIgnored(cari.getPlayer(), cari.getTarget());
break;
case IGNORE_LIST:
handleRequestIgnoreList(i.getPlayer());
handleRequestIgnoreList(cari.getPlayer());
break;
}
}
@@ -305,14 +279,14 @@ public class ChatManager extends Manager {
new ChatBroadcastIntent(player, new ProsePackage("StringId", stringId, "TT", target)).broadcast();
}
private void handleSpatialChat(SpatialChatIntent i) {
Player sender = i.getPlayer();
private void handleSpatialChatIntent(SpatialChatIntent spi) {
Player sender = spi.getPlayer();
SWGObject actor = sender.getCreatureObject();
// Send to self
SpatialChat message = new SpatialChat(actor.getObjectId(), actor.getObjectId(), 0, i.getMessage(), (short) i.getChatType(), (short) i.getMoodId());
SpatialChat message = new SpatialChat(actor.getObjectId(), actor.getObjectId(), 0, spi.getMessage(), (short) spi.getChatType(), (short) spi.getMoodId());
sender.sendPacket(message);
logChat(sender, ChatType.SPATIAL, ChatRange.LOCAL, i.getMessage());
logChat(sender, ChatType.SPATIAL, ChatRange.LOCAL, spi.getMessage());
String senderName = ChatAvatar.getFromPlayer(sender).getName();
+16 -34
View File
@@ -114,9 +114,9 @@ public class ChatRoomService extends Service {
insertChatLog = chatLogs.prepareStatement("INSERT INTO chat_log VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
maxChatRoomId = 1;
registerForIntent(ChatRoomUpdateIntent.TYPE);
registerForIntent(GalacticPacketIntent.TYPE);
registerForIntent(PlayerEventIntent.TYPE);
registerForIntent(ChatRoomUpdateIntent.class, crui -> handleChatRoomUpdateIntent(crui));
registerForIntent(GalacticPacketIntent.class, gpi -> handleGalacticPacketIntent(gpi));
registerForIntent(PlayerEventIntent.class, pei -> handlePlayerEventIntent(pei));
}
@Override
@@ -138,28 +138,10 @@ public class ChatRoomService extends Service {
return super.terminate();
}
@Override
public void onIntentReceived(Intent i) {
switch(i.getType()) {
case ChatRoomUpdateIntent.TYPE:
if (i instanceof ChatRoomUpdateIntent)
processChatRoomUpdateIntent((ChatRoomUpdateIntent) i);
break;
case GalacticPacketIntent.TYPE:
if (i instanceof GalacticPacketIntent)
processPacket((GalacticPacketIntent) i);
break;
case PlayerEventIntent.TYPE:
if (i instanceof PlayerEventIntent)
handlePlayerEventIntent((PlayerEventIntent) i);
break;
}
}
private void processPacket(GalacticPacketIntent intent) {
Packet p = intent.getPacket();
private void handleGalacticPacketIntent(GalacticPacketIntent gpi) {
Packet p = gpi.getPacket();
if (p instanceof SWGPacket)
processSwgPacket(intent.getPlayer(), (SWGPacket) p);
processSwgPacket(gpi.getPlayer(), (SWGPacket) p);
}
private void processSwgPacket(Player player, SWGPacket p) {
@@ -212,12 +194,12 @@ public class ChatRoomService extends Service {
}
}
private void handlePlayerEventIntent(PlayerEventIntent intent) {
Player player = intent.getPlayer();
private void handlePlayerEventIntent(PlayerEventIntent pei) {
Player player = pei.getPlayer();
if (player == null)
return;
switch (intent.getEvent()) {
switch (pei.getEvent()) {
case PE_ZONE_IN_SERVER:
enterPlanetaryChatChannels(player);
break;
@@ -230,13 +212,13 @@ public class ChatRoomService extends Service {
}
}
private void processChatRoomUpdateIntent(ChatRoomUpdateIntent i) {
switch(i.getUpdateType()) {
case CREATE: createRoom(i.getAvatar(), i.isPublic(), i.getPath(), i.getTitle()); break;
case DESTROY: notifyDestroyRoom(i.getAvatar(), i.getPath(), 0); break;
case JOIN: enterChatChannel(i.getPlayer(), i.getPath(), i.isIgnoreInvitation()); break;
case LEAVE: leaveChatChannel(i.getPlayer(), i.getPath()); break;
case SEND_MESSAGE: sendMessageToRoom(i.getPlayer(), getRoom(i.getPath()), 0, i.getMessage(), new OutOfBandPackage()); break;
private void handleChatRoomUpdateIntent(ChatRoomUpdateIntent crui) {
switch(crui.getUpdateType()) {
case CREATE: createRoom(crui.getAvatar(), crui.isPublic(), crui.getPath(), crui.getTitle()); break;
case DESTROY: notifyDestroyRoom(crui.getAvatar(), crui.getPath(), 0); break;
case JOIN: enterChatChannel(crui.getPlayer(), crui.getPath(), crui.isIgnoreInvitation()); break;
case LEAVE: leaveChatChannel(crui.getPlayer(), crui.getPath()); break;
case SEND_MESSAGE: sendMessageToRoom(crui.getPlayer(), getRoom(crui.getPath()), 0, crui.getMessage(), new OutOfBandPackage()); break;
default: break;
}
}
+19 -19
View File
@@ -34,7 +34,6 @@ import intents.network.ConnectionOpenedIntent;
import intents.network.GalacticPacketIntent;
import intents.network.InboundPacketIntent;
import resources.control.Assert;
import resources.control.Intent;
import resources.control.Manager;
import resources.player.Player;
import resources.server_info.SynchronizedMap;
@@ -76,9 +75,9 @@ public class GalacticManager extends Manager {
addChildService(developerService);
addChildService(uniformBox);
registerForIntent(InboundPacketIntent.TYPE);
registerForIntent(ConnectionOpenedIntent.TYPE);
registerForIntent(ConnectionClosedIntent.TYPE);
registerForIntent(InboundPacketIntent.class, ipi -> handleInboundPacketIntent(ipi));
registerForIntent(ConnectionOpenedIntent.class, coi -> handleConnectionOpenedIntent(coi));
registerForIntent(ConnectionClosedIntent.class, cci -> handleConnectionClosedIntent(cci));
}
@Override
@@ -87,21 +86,22 @@ public class GalacticManager extends Manager {
return super.initialize();
}
@Override
public void onIntentReceived(Intent i) {
if (i instanceof InboundPacketIntent) {
Player player = playerManager.getPlayerFromNetworkId(((InboundPacketIntent) i).getNetworkId());
Assert.notNull(player);
GalacticPacketIntent g = new GalacticPacketIntent(((InboundPacketIntent) i).getPacket(), player);
g.setGalacticManager(this);
prevIntentMap.get(player.getNetworkId()).broadcastAfter(g);
} else if (i instanceof ConnectionClosedIntent) {
prevIntentMap.remove(((ConnectionClosedIntent) i).getNetworkId()).reset();
} else if (i instanceof ConnectionOpenedIntent) {
IntentChain chain = new IntentChain();
chain.waitUntilComplete(i);
prevIntentMap.put(((ConnectionOpenedIntent) i).getNetworkId(), chain);
}
private void handleInboundPacketIntent(InboundPacketIntent ipi){
Player player = playerManager.getPlayerFromNetworkId(((InboundPacketIntent) ipi).getNetworkId());
Assert.notNull(player);
GalacticPacketIntent g = new GalacticPacketIntent(((InboundPacketIntent) ipi).getPacket(), player);
g.setGalacticManager(this);
prevIntentMap.get(player.getNetworkId()).broadcastAfter(g);
}
private void handleConnectionOpenedIntent(ConnectionOpenedIntent coi){
IntentChain chain = new IntentChain();
chain.waitUntilComplete(coi);
prevIntentMap.put(((ConnectionOpenedIntent) coi).getNetworkId(), chain);
}
private void handleConnectionClosedIntent(ConnectionClosedIntent cci){
prevIntentMap.remove(((ConnectionClosedIntent) cci).getNetworkId()).reset();
}
public ObjectManager getObjectManager() {