diff --git a/src/protocol/swg/chat/ChatQueryRoomResults.java b/src/protocol/swg/chat/ChatQueryRoomResults.java index da760c20..33d29f77 100644 --- a/src/protocol/swg/chat/ChatQueryRoomResults.java +++ b/src/protocol/swg/chat/ChatQueryRoomResults.java @@ -54,37 +54,37 @@ public class ChatQueryRoomResults extends SWGMessage { buffer.putShort((short) 7); buffer.putInt(0xC4DE864E); - Vector users = room.getUserList(); + Vector users = room.getUserList(); buffer.putInt(users.size()); if (users.size() > 0) { - for (CreatureObject creo : users) { + for (String str : users) { buffer.put(getAsciiString("SWG")); buffer.put(getAsciiString(server)); - buffer.put(getAsciiString(creo.getCustomName())); + buffer.put(getAsciiString(str)); } } buffer.putInt(0); // TODO: Invited list for chat rooms - Vector moderators = room.getModeratorList(); + Vector moderators = room.getModeratorList(); buffer.putInt(moderators.size()); if (moderators.size() > 0) { - for (CreatureObject creo : users) { + for (String str : moderators) { buffer.put(getAsciiString("SWG")); buffer.put(getAsciiString(server)); - buffer.put(getAsciiString(creo.getCustomName())); + buffer.put(getAsciiString(str)); } } - Vector banned = room.getBanList(); + Vector banned = room.getBanList(); buffer.putInt(banned.size()); if (banned.size() > 0) { - for (CreatureObject creo : users) { + for (String str : banned) { buffer.put(getAsciiString("SWG")); buffer.put(getAsciiString(server)); - buffer.put(getAsciiString(creo.getCustomName())); + buffer.put(getAsciiString(str)); } } diff --git a/src/services/chat/ChatRoom.java b/src/services/chat/ChatRoom.java index a2428907..d489e3e1 100644 --- a/src/services/chat/ChatRoom.java +++ b/src/services/chat/ChatRoom.java @@ -37,10 +37,10 @@ public class ChatRoom { private int roomId; private String roomAddress; // name - private Vector moderatorList = new Vector(); - private Vector banList = new Vector(); + private Vector moderatorList = new Vector(); + private Vector banList = new Vector(); @NotPersistent - private Vector userList = new Vector(); // current users + private Vector userList = new Vector(); // current users private boolean moderatorsOnly; private boolean privateRoom; @@ -50,9 +50,9 @@ public class ChatRoom { public String getCreator() { return creator; } - + public void setCreator(String creator) { - this.creator = creator; + this.creator = creator.toLowerCase(); } public String getRoomAddress() { @@ -71,22 +71,14 @@ public class ChatRoom { this.roomId = roomId; } - public Vector getModeratorList() { + public Vector getModeratorList() { return moderatorList; } - public void setModeratorList(Vector moderatorList) { - this.moderatorList = moderatorList; - } - - public Vector getUserList() { + public Vector getUserList() { return userList; } - public void setUserList(Vector userList) { - this.userList = userList; - } - public boolean isModeratorsOnly() { return moderatorsOnly; } @@ -108,17 +100,13 @@ public class ChatRoom { } public void setOwner(String owner) { - this.owner = owner; + this.owner = owner.toLowerCase(); } - public Vector getBanList() { + public Vector getBanList() { return banList; } - public void setBanList(Vector banList) { - this.banList = banList; - } - public String getDescription() { return description; } @@ -134,4 +122,28 @@ public class ChatRoom { public void setVisible(boolean visible) { this.visible = visible; } + + public void addUser(String user) { + userList.add(user.toLowerCase()); + } + + public void addModerator(String moderator) { + moderatorList.add(moderator.toLowerCase()); + } + + public void banUser(String user) { + banList.add(user.toLowerCase()); + } + + public boolean hasUser(String user) { + return userList.contains(user.toLowerCase()); + } + + public boolean hasModerator(String moderator) { + return moderatorList.contains(moderator.toLowerCase()); + } + + public boolean hasBan(String user) { + return banList.contains(user.toLowerCase()); + } } diff --git a/src/services/chat/ChatService.java b/src/services/chat/ChatService.java index 06afbab6..06844115 100644 --- a/src/services/chat/ChatService.java +++ b/src/services/chat/ChatService.java @@ -451,7 +451,7 @@ public class ChatService implements INetworkDispatch { ChatEnterRoomById sentPacket = new ChatEnterRoomById(); sentPacket.deserialize(data); - joinChatRoom((CreatureObject) obj, sentPacket.getRoomId()); + joinChatRoom(obj.getCustomName(), sentPacket.getRoomId()); //System.out.println("Entering room... " + sentPacket.getRoomId()); @@ -763,24 +763,25 @@ public class ChatService implements INetworkDispatch { return room; } - public void joinChatRoom(CreatureObject player, int roomId) { + public void joinChatRoom(String user, int roomId) { - String playerName = player.getCustomName().toLowerCase(); - - if (playerName.contains(" ")) - playerName = playerName.split(" ")[0]; + if (user.contains(" ")) + user = user.split(" ")[0]; ChatRoom room = getChatRoom(roomId); if (room == null) return; - ChatOnEnteredRoom enterRoom = new ChatOnEnteredRoom(playerName, 0, roomId, true); - - if (!room.getUserList().contains(player)) - room.getUserList().add(player); - - room.getUserList().stream().forEach(user -> user.getClient().getSession().write(enterRoom.serialize())); + if (!room.hasUser(user)) { + ChatOnEnteredRoom enterRoom = new ChatOnEnteredRoom(user, 0, roomId, true); + room.addUser(user); + + room.getUserList().stream().forEach(str -> { + SWGObject userObj = getObjectByFirstName(str); + if (userObj != null) { userObj.getClient().getSession().write(enterRoom.serialize()); } + }); + } } public void leaveChatRoom(CreatureObject player, int roomId) { @@ -815,11 +816,8 @@ public class ChatService implements INetworkDispatch { sender.getClient().getSession().write(onSend.serialize()); ChatRoomMessage roomMessage = new ChatRoomMessage(roomId, senderName, message); - Vector users = room.getUserList(); + Vector users = room.getUserList(); - for (CreatureObject user : users) { - user.getClient().getSession().write(roomMessage.serialize()); - } } public ConcurrentHashMap getChatRooms() {