From 095e8e1868f14fd0a185187e136adf2e6c79b353 Mon Sep 17 00:00:00 2001 From: Mads Boddum Date: Sun, 11 Sep 2016 01:11:52 +0200 Subject: [PATCH] Initial work on groupchat --- scripts/commands/generic/groupChat.js | 23 +++++++++++++++++++ src/intents/chat/ChatRoomUpdateIntent.java | 11 +++++++++ .../objects/player/PlayerObject.java | 12 +++++----- src/services/chat/ChatRoomService.java | 23 +++++++++++++------ src/services/group/GroupService.java | 10 ++++++-- 5 files changed, 64 insertions(+), 15 deletions(-) create mode 100644 scripts/commands/generic/groupChat.js diff --git a/scripts/commands/generic/groupChat.js b/scripts/commands/generic/groupChat.js new file mode 100644 index 000000000..36d14261f --- /dev/null +++ b/scripts/commands/generic/groupChat.js @@ -0,0 +1,23 @@ +function executeCommand(galacticManager, player, target, args) { + if(args.isEmpty()) { + // Should there for some reason be no actual message to display, do nothing + return; + } + + var groupObjectId = player.getCreatureObject().getGroupId(); + + if(groupObjectId === 0) { + // If their group object ID is 0, they're ungrouped. Ungrouped players can't send group messages. + return; + } + + var CoreManager = Java.type("services.CoreManager"); + var galaxy = CoreManager.getGalaxy().getName(); + var groupChatPath = "SWG." + galaxy + ".group." + groupObjectId + ".GroupChat"; + + var ChatRoomUpdateIntent = Java.type("intents.chat.ChatRoomUpdateIntent"); + var UpdateType = Java.type("intents.chat.ChatRoomUpdateIntent.UpdateType"); + + new ChatRoomUpdateIntent(player, groupChatPath, groupObjectId, null, + args, UpdateType.SEND_MESSAGE).broadcast(); +} \ No newline at end of file diff --git a/src/intents/chat/ChatRoomUpdateIntent.java b/src/intents/chat/ChatRoomUpdateIntent.java index e2093c877..439e0a9e8 100644 --- a/src/intents/chat/ChatRoomUpdateIntent.java +++ b/src/intents/chat/ChatRoomUpdateIntent.java @@ -29,6 +29,7 @@ package intents.chat; import resources.chat.ChatAvatar; import resources.control.Intent; +import resources.player.Player; /** * @author Waverunner @@ -43,6 +44,7 @@ public class ChatRoomUpdateIntent extends Intent { private String message; private UpdateType updateType; private boolean isPublic; + private Player player; public ChatRoomUpdateIntent(String path, String title, String target, ChatAvatar avatar, String message, UpdateType updateType) { super(TYPE); @@ -67,6 +69,11 @@ public class ChatRoomUpdateIntent extends Intent { this(path, null, null, avatar, null, updateType); } + public ChatRoomUpdateIntent(Player player, String path, String title, String target, String message, UpdateType updateType) { + this(path, title, target, ChatAvatar.getFromPlayer(player), message, updateType); + this.player = player; + } + public String getPath() { return path; } @@ -95,6 +102,10 @@ public class ChatRoomUpdateIntent extends Intent { return isPublic; } + public Player getPlayer() { + return player; + } + public enum UpdateType { CREATE, DESTROY, diff --git a/src/resources/objects/player/PlayerObject.java b/src/resources/objects/player/PlayerObject.java index d572762c1..48a0328ce 100644 --- a/src/resources/objects/player/PlayerObject.java +++ b/src/resources/objects/player/PlayerObject.java @@ -334,19 +334,19 @@ public class PlayerObject extends IntangibleObject { public boolean addJoinedChannel(String path) { synchronized (joinedChannels) { - return true; +// return true; // TODO: Refactor - /*System.out.println("add joined channel: " + path); - return !joinedChannels.contains(path) && joinedChannels.add(path);*/ +// System.out.println("add joined channel: " + path); + return !joinedChannels.contains(path) && joinedChannels.add(path); } } public boolean removeJoinedChannel(String path) { synchronized (joinedChannels) { - return true; +// return true; // TODO: Refactor - /*System.out.println("remove joined channel: " + path); - return joinedChannels.remove(path);*/ +// System.out.println("remove joined channel: " + path); + return joinedChannels.remove(path); } } diff --git a/src/services/chat/ChatRoomService.java b/src/services/chat/ChatRoomService.java index 1c5f107e5..019ed9dad 100644 --- a/src/services/chat/ChatRoomService.java +++ b/src/services/chat/ChatRoomService.java @@ -90,6 +90,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import resources.encodables.OutOfBandPackage; /** * @author Waverunner @@ -235,6 +236,9 @@ public class ChatRoomService extends Service { 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()); break; + case LEAVE: leaveChatChannel(i.getPlayer(), i.getPath()); break; + case SEND_MESSAGE: sendMessageToRoom(i.getPlayer(), getRoom(i.getPath()), 0, i.getMessage(), new OutOfBandPackage()); break; default: break; } } @@ -512,18 +516,22 @@ public class ChatRoomService extends Service { } private void handleChatSendToRoom(Player player, ChatSendToRoom p) { - ChatResult result = ChatResult.SUCCESS; - ChatRoom room = getRoom(p.getRoomId()); + sendMessageToRoom(player, room, p.getSequence(), p.getMessage(), p.getOutOfBandPackage()); + } + + private void sendMessageToRoom(Player player, ChatRoom room, int sequence, String message, OutOfBandPackage outOfBandPackage) { + ChatResult result = ChatResult.SUCCESS; + if (room == null) result = ChatResult.ROOM_INVALID_ID; if (result != ChatResult.SUCCESS) { - player.sendPacket(new ChatOnSendRoomMessage(result.getCode(), p.getSequence())); + player.sendPacket(new ChatOnSendRoomMessage(result.getCode(), sequence)); return; } - if (!incrementMessageCounter(player.getNetworkId(), room.getId(), p.getSequence())) + if (!incrementMessageCounter(player.getNetworkId(), room.getId(), sequence)) return; ChatAvatar avatar = ChatAvatar.getFromPlayer(player); @@ -532,11 +540,11 @@ public class ChatRoomService extends Service { // TODO: Check length of messages -- Result 16 is used for too long message - player.sendPacket(new ChatOnSendRoomMessage(result.getCode(), p.getSequence())); + player.sendPacket(new ChatOnSendRoomMessage(result.getCode(), sequence)); if (result == ChatResult.SUCCESS) { - room.sendMessage(avatar, p.getMessage(), p.getOutOfBandPackage(), player.getPlayerManager()); - logChat(player.getCreatureObject().getObjectId(), player.getCharacterName(), room.getId()+"/"+room.getPath(), p.getMessage()); + room.sendMessage(avatar, message, outOfBandPackage, player.getPlayerManager()); + logChat(player.getCreatureObject().getObjectId(), player.getCharacterName(), room.getId()+"/"+room.getPath(), message); } } @@ -618,6 +626,7 @@ public class ChatRoomService extends Service { } ChatResult result = room.canJoinRoom(avatar); + if (result != ChatResult.SUCCESS && player.getAccessLevel() != AccessLevel.PLAYER) { sendOnEnteredChatRoom(player, avatar, result, room.getId(), sequence); return; diff --git a/src/services/group/GroupService.java b/src/services/group/GroupService.java index 1b933986d..2425e4d2e 100644 --- a/src/services/group/GroupService.java +++ b/src/services/group/GroupService.java @@ -55,6 +55,7 @@ import java.util.concurrent.Future; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import resources.objects.group.LootRule; +import services.CoreManager; import utilities.ThreadUtilities; /** @@ -230,6 +231,8 @@ public class GroupService extends Service { this.sendSystemMessage(playerCreo.getOwner(), "removed"); group.removeMember(playerCreo); + new ChatRoomUpdateIntent(getGroupChatPath(group.getObjectId(), CoreManager.getGalaxy().getName()), String.valueOf(group.getObjectId()), null, + ChatAvatar.getFromPlayer(playerCreo.getOwner()), null, ChatRoomUpdateIntent.UpdateType.LEAVE).broadcast(); } private void handleGroupInvite(Player player, CreatureObject target) { @@ -373,7 +376,8 @@ public class GroupService extends Service { sendSystemMessage(sender, "formed_self", "TT", senderCreo.getObjectId()); - // TODO: Join group chat room + new ChatRoomUpdateIntent(getGroupChatPath(group.getObjectId(), CoreManager.getGalaxy().getName()), String.valueOf(group.getObjectId()), null, + ChatAvatar.getFromPlayer(senderCreo.getOwner()), null, ChatRoomUpdateIntent.UpdateType.JOIN).broadcast(); } else { // Group already exists group = getGroup(senderCreo.getGroupId()); @@ -393,7 +397,9 @@ public class GroupService extends Service { sendSystemMessage(player, "joined_self"); group.addMember(creo); creo.updateGroupInviteData(null, 0, ""); - // TODO: Join group chat room + + new ChatRoomUpdateIntent(getGroupChatPath(group.getObjectId(), CoreManager.getGalaxy().getName()), String.valueOf(group.getObjectId()), null, + ChatAvatar.getFromPlayer(player), null, ChatRoomUpdateIntent.UpdateType.JOIN).broadcast(); } private void handleGroupDecline(Player invitee) {