From fa4816921ed6379c396fbfcd09486195d2a9d099 Mon Sep 17 00:00:00 2001 From: Treeku Date: Wed, 14 May 2014 17:11:22 +0100 Subject: [PATCH] Refactored GUILD object --- .../objects/guild/GuildMessageBuilder.java | 183 ---------- src/resources/objects/guild/GuildObject.java | 326 ++++-------------- .../objects/tangible/TangibleObject.java | 2 + .../objects/universe/UniverseObject.java | 34 +- 4 files changed, 101 insertions(+), 444 deletions(-) diff --git a/src/resources/objects/guild/GuildMessageBuilder.java b/src/resources/objects/guild/GuildMessageBuilder.java index a29b8f68..65bc51c6 100644 --- a/src/resources/objects/guild/GuildMessageBuilder.java +++ b/src/resources/objects/guild/GuildMessageBuilder.java @@ -21,17 +21,9 @@ ******************************************************************************/ package resources.objects.guild; -import java.nio.ByteOrder; import java.util.Map; -import java.util.Map.Entry; - -import org.apache.mina.core.buffer.IoBuffer; import engine.resources.objects.Builder; -import resources.gcw.CurrentServerGCWZoneHistory; -import resources.gcw.CurrentServerGCWZonePercent; -import resources.gcw.OtherServerGCWZonePercent; -import resources.guild.Guild; import resources.objects.universe.UniverseMessageBuilder; public class GuildMessageBuilder extends UniverseMessageBuilder { @@ -44,181 +36,6 @@ public class GuildMessageBuilder extends UniverseMessageBuilder { super(); } - public IoBuffer buildBaseline3() { - GuildObject guilds = (GuildObject) object; - - IoBuffer buffer = bufferPool.allocate(((guilds.getGuildList().size() * 10) + 49), false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putShort((short) 5); // Object Count - buffer.putFloat(guilds.getComplexity()); - buffer.put(getAsciiString(guilds.getSTFFile())); - buffer.putInt(guilds.getSTFSpacer()); - buffer.put(getAsciiString(guilds.getSTFName())); - buffer.put(getUnicodeString(guilds.getCustomName())); - buffer.putInt(guilds.getVolume()); - buffer.putInt(guilds.getGuildList().size()); - buffer.putInt(guilds.getGuildList().getUpdateCounter()); - for (Guild object : guilds.getGuildList().get()) { - buffer.put(getAsciiString(object.getString())); - } - - int size = buffer.position(); - buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); - buffer.flip(); - buffer = createBaseline("GILD", (byte) 3, buffer, size); - - return buffer; - } - - public IoBuffer buildBaseline6() { - GuildObject guilds = (GuildObject) object; - - int capacity = 16 + getAsciiString(guilds.getSTFFile()).length; - for (Entry entry : guilds.getCurrentServerGCWZonePercentMap().entrySet()) capacity += (11 + entry.getKey().length() + entry.getValue().getBytes().length); - for (Entry entry : guilds.getCurrentServerGCWTotalPercentMap().entrySet()) capacity += (11 + entry.getKey().length() + entry.getValue().getBytes().length); - for (Entry entry : guilds.getCurrentServerGCWZoneHistoryMap().entries()) capacity += (11 + entry.getKey().length() + entry.getValue().getBytes().length); - for (Entry entry : guilds.getCurrentServerGCWTotalHistoryMap().entries()) capacity += (11 + entry.getKey().length() + entry.getValue().getBytes().length); - for (Entry entry : guilds.getOtherServerGCWZonePercentMap().entries()) capacity += (11 + entry.getKey().length() + entry.getValue().getBytes().length); - for (Entry entry : guilds.getOtherServerGCWTotalPercentMap().entries()) capacity += (11 + entry.getKey().length() + entry.getValue().getBytes().length); - - IoBuffer buffer = bufferPool.allocate(capacity, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.setAutoExpand(true); - buffer.putShort((short) 9); // Object Count - buffer.putInt(guilds.getServerId()); - buffer.put(getAsciiString(guilds.getSTFFile())); - buffer.putInt(guilds.getUnknown1()); - buffer.putShort(guilds.getUnknown2()); - buffer.putInt(guilds.getCurrentServerGCWZonePercentMap().size()); - buffer.putInt(guilds.getCurrentServerGCWZonePercentMap().getUpdateCounter()); - for (Entry entry : guilds.getCurrentServerGCWZonePercentMap().entrySet()) { - buffer.put((byte) 0); - buffer.put(getAsciiString(entry.getKey())); - buffer.put(entry.getValue().getBytes()); - } - buffer.putInt(guilds.getCurrentServerGCWTotalPercentMap().size()); - buffer.putInt(guilds.getCurrentServerGCWTotalPercentMap().getUpdateCounter()); - for (Entry entry : guilds.getCurrentServerGCWTotalPercentMap().entrySet()) { - buffer.put((byte) 0); - buffer.put(getAsciiString(entry.getKey())); - buffer.put(entry.getValue().getBytes()); - } - buffer.putInt(guilds.getCurrentServerGCWZoneHistoryMap().size()); - buffer.putInt(guilds.getCurrentServerGCWZoneHistoryMap().getUpdateCounter()); - for (Entry entry : guilds.getCurrentServerGCWZoneHistoryMap().entries()) { - buffer.put((byte) 0); - buffer.put(getAsciiString(entry.getKey())); - buffer.put(entry.getValue().getBytes()); - } - buffer.putInt(guilds.getCurrentServerGCWTotalHistoryMap().size()); - buffer.putInt(guilds.getCurrentServerGCWTotalHistoryMap().getUpdateCounter()); - for (Entry entry : guilds.getCurrentServerGCWTotalHistoryMap().entries()) { - buffer.put((byte) 0); - buffer.put(getAsciiString(entry.getKey())); - buffer.put(entry.getValue().getBytes()); - } - buffer.putInt(guilds.getOtherServerGCWZonePercentMap().size()); - buffer.putInt(guilds.getOtherServerGCWZonePercentMap().getUpdateCounter()); - for (Entry entry : guilds.getOtherServerGCWZonePercentMap().entries()) { - buffer.put((byte) 0); - buffer.put(getAsciiString(entry.getKey())); - buffer.put(entry.getValue().getBytes()); - } - buffer.putInt(guilds.getOtherServerGCWTotalPercentMap().size()); - buffer.putInt(guilds.getOtherServerGCWTotalPercentMap().getUpdateCounter()); - for (Entry entry : guilds.getOtherServerGCWTotalPercentMap().entries()) { - buffer.put((byte) 0); - buffer.put(getAsciiString(entry.getKey())); - buffer.put(entry.getValue().getBytes()); - } - buffer.putInt(guilds.getUnknown3()); - - int size = buffer.position(); - buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); - buffer.flip(); - buffer = createBaseline("GILD", (byte) 6, buffer, size); - - return buffer; - } - - public IoBuffer buildComplexity(float complexity) { - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.putFloat(complexity); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("GILD", (byte) 3, (short) 1, (short) 0, buffer, size + 4); - - return buffer; - } - - public IoBuffer buildSTF(String STFFile, int STFSpacer, String STFName) { - IoBuffer buffer = bufferPool.allocate((STFFile.length() + STFName.length() + 8), false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.put(getAsciiString(STFFile)); - buffer.putInt(STFSpacer); - buffer.put(getAsciiString(STFName)); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("GILD", (byte) 3, (short) 1, (short) 1, buffer, size + 4); - - return buffer; - } - - public IoBuffer buildCustomName(String customName) { - IoBuffer buffer = bufferPool.allocate((customName.length() + 4), false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.put(getUnicodeString(customName)); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("GILD", (byte) 3, (short) 1, (short) 2, buffer, size + 4); - - return buffer; - } - - public IoBuffer buildVolume(int volume) { - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.putInt(volume); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("GILD", (byte) 3, (short) 1, (short) 3, buffer, size + 4); - - return buffer; - } - - public IoBuffer buildServerId(int serverId) { - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.putInt(serverId); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("GILD", (byte) 6, (short) 1, (short) 0, buffer, size + 4); - - return buffer; - } - - public IoBuffer buildUnknowns(int unknown1, short unknown2) { - IoBuffer buffer = bufferPool.allocate(6, false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.putInt(unknown1); - buffer.putShort(unknown2); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("GILD", (byte) 6, (short) 1, (short) 1, buffer, size + 4); - - return buffer; - } - - public IoBuffer buildUnknown3(int unknown3) { - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.putInt(unknown3); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("GILD", (byte) 6, (short) 1, (short) 8, buffer, size + 4); - - return buffer; - } - @Override public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { super.buildBaseline3(baselineBuilders, deltaBuilders); diff --git a/src/resources/objects/guild/GuildObject.java b/src/resources/objects/guild/GuildObject.java index bee39d0c..7f1f2315 100644 --- a/src/resources/objects/guild/GuildObject.java +++ b/src/resources/objects/guild/GuildObject.java @@ -39,252 +39,110 @@ import resources.objects.SWGMap; import resources.objects.SWGMultiMap; import resources.objects.universe.UniverseObject; import services.collections.ServerFirst; - -import com.sleepycat.persist.model.Entity; -import com.sleepycat.persist.model.NotPersistent; - import engine.clients.Client; +import engine.resources.objects.Baseline; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Entity(version=1) public class GuildObject extends UniverseObject implements Serializable { private static final long serialVersionUID = 1L; - protected NGECore core; - @NotPersistent + private transient GuildMessageBuilder messageBuilder = new GuildMessageBuilder(this); - private Map serverFirst = new HashMap(); - private Map> zoneMap = new TreeMap>(); - - private long nextInstanceId = 0; - - // GILD 3 - private float complexity = 0x803F0F00; - private String STFFile = "string_id_table"; - private int STFSpacer = 0; - private String STFName = ""; - private String customName = ""; - private int volume = 0; - private SWGList guildList = new SWGList(this, 3, 4, false); - - // GILD 6 - private int serverId = 0x43; - //private String STFName = "string_id_table"; - private int unknown1 = 0; - private short unknown2 = 0; - private SWGMap currentServerGCWZonePercentMap = new SWGMap(this, 6, 2, true); - private SWGMap currentServerGCWTotalPercentMap = new SWGMap(this, 6, 3, true); - private SWGMultiMap currentServerGCWZoneHistoryMap = new SWGMultiMap(this, 6, 4, true); - private SWGMultiMap currentServerGCWTotalHistoryMap = new SWGMultiMap(this, 6, 5, true); - private SWGMultiMap otherServerGCWZonePercentMap = new SWGMultiMap(this, 6, 6, true); - private SWGMultiMap otherServerGCWTotalPercentMap = new SWGMultiMap(this, 6, 7, true); - private int unknown3 = 5; - public GuildObject(NGECore core, long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { super(objectID, planet, position, orientation, Template); - this.core = core; + otherVariables = getOtherVariables(); // FIXME temp + } + + public GuildObject() { + super(); } - @Override public void initAfterDBLoad() { super.init(); messageBuilder = new GuildMessageBuilder(this); - guildList.init(this); - currentServerGCWZonePercentMap.init(this); - currentServerGCWTotalPercentMap.init(this); - currentServerGCWZoneHistoryMap.init(this); - currentServerGCWTotalHistoryMap.init(this); - otherServerGCWZonePercentMap.init(this); - otherServerGCWTotalPercentMap.init(this); } - public float getComplexity() { - synchronized(objectMutex) { - return complexity; - } + @Override + public Baseline getOtherVariables() { + Baseline baseline = super.getOtherVariables(); + baseline.put("nextInstanceId", (long) 0); + baseline.put("zoneMap", new TreeMap>()); + baseline.put("serverFirst", new HashMap()); + return baseline; } - public void setComplexity(float complexity) { - synchronized(objectMutex) { - this.complexity = complexity; - } - - notifyAll(messageBuilder.buildComplexity(complexity)); + @Override + public Baseline getBaseline3() { + Baseline baseline = super.getBaseline3(); + baseline.put("guildList", new SWGList(this, 3, 4, false)); + return baseline; } - public String getSTFFile() { - synchronized(objectMutex) { - return STFFile; - } - } - - public void setSTFFile(String STFFile) { - synchronized(objectMutex) { - this.STFFile = STFFile; - } - - notifyAll(messageBuilder.buildSTF(STFFile, STFSpacer, STFName)); - } - - public int getSTFSpacer() { - synchronized(objectMutex) { - return STFSpacer; - } - } - - public void setSTFSpacer(int STFSpacer) { - synchronized(objectMutex) { - this.STFSpacer = STFSpacer; - } - - notifyAll(messageBuilder.buildSTF(STFFile, STFSpacer, STFName)); - } - - public String getSTFName() { - synchronized(objectMutex) { - return STFName; - } - } - - public void setSTFName(String STFName) { - synchronized(objectMutex) { - this.STFName = STFName; - } - - notifyAll(messageBuilder.buildSTF(STFFile, STFSpacer, STFName)); - } - - public String getCustomName() { - synchronized(objectMutex) { - return customName; - } - } - - public void setCustomName(String customName) { - synchronized(objectMutex) { - this.customName = customName; - } - - notifyAll(messageBuilder.buildCustomName(customName)); - } - - public int getVolume() { - synchronized(objectMutex) { - return volume; - } - } - - public void setVolume(int volume) { - synchronized(objectMutex) { - this.volume = volume; - } - - notifyAll(messageBuilder.buildVolume(volume)); + @Override + public Baseline getBaseline6() { + Baseline baseline = super.getBaseline6(); + baseline.put("currentServerGCWZonePercentMap", new SWGMap(this, 6, 2, true)); + baseline.put("currentServerGCWTotalPercentMap", new SWGMap(this, 6, 3, true)); + baseline.put("currentServerGCWZoneHistoryMap", new SWGMultiMap(this, 6, 4, true)); + baseline.put("currentServerGCWTotalHistoryMap", new SWGMultiMap(this, 6, 5, true)); + baseline.put("otherServerGCWZonePercentMap", new SWGMultiMap(this, 6, 6, true)); + baseline.put("otherServerGCWTotalPercentMap", new SWGMultiMap(this, 6, 7, true)); + baseline.put("8", 5); + return baseline; } + @SuppressWarnings("unchecked") public SWGList getGuildList() { - return guildList; - } - - public int getServerId() { - synchronized(objectMutex) { - return serverId; - } - } - - public void setServerId(int serverId) { - synchronized(objectMutex) { - this.serverId = serverId; - } - - notifyAll(messageBuilder.buildServerId(serverId)); - } - - public int getUnknown1() { - synchronized(objectMutex) { - return unknown1; - } - } - - public void setUnknown1(int unknown1) { - synchronized(objectMutex) { - this.unknown1 = unknown1; - } - - notifyAll(messageBuilder.buildUnknowns(unknown1, unknown2)); - } - - public short getUnknown2() { - synchronized(objectMutex) { - return unknown2; - } - } - - public void setUnknown2(short unknown2) { - synchronized(objectMutex) { - this.unknown2 = unknown2; - } - - notifyAll(messageBuilder.buildUnknowns(unknown1, unknown2)); + return (SWGList) getBaseline(3).get("guildList"); } + @SuppressWarnings("unchecked") public SWGMap getCurrentServerGCWZonePercentMap() { - return currentServerGCWZonePercentMap; + return (SWGMap) getBaseline(6).get("currentServerGCWZonePercentMap"); } + @SuppressWarnings("unchecked") public SWGMap getCurrentServerGCWTotalPercentMap() { - return currentServerGCWTotalPercentMap; + return (SWGMap) getBaseline(6).get("currentServerGCWTotalPercentMap"); } + @SuppressWarnings("unchecked") public SWGMultiMap getCurrentServerGCWZoneHistoryMap() { - return currentServerGCWZoneHistoryMap; + return (SWGMultiMap) getBaseline(6).get("currentServerGCWZoneHistoryMap"); } + @SuppressWarnings("unchecked") public SWGMultiMap getCurrentServerGCWTotalHistoryMap() { - return currentServerGCWTotalHistoryMap; + return (SWGMultiMap) getBaseline(6).get("currentServerGCWTotalHistoryMap"); } + @SuppressWarnings("unchecked") public SWGMultiMap getOtherServerGCWZonePercentMap() { - return otherServerGCWZonePercentMap; + return (SWGMultiMap) getBaseline(6).get("otherServerGCWZonePercentMap"); } + @SuppressWarnings("unchecked") public SWGMultiMap getOtherServerGCWTotalPercentMap() { - return otherServerGCWTotalPercentMap; - } - - public int getUnknown3() { - synchronized(objectMutex) { - return unknown3; - } - } - - public void setUnknown3(int unknown3) { - synchronized(objectMutex) { - this.unknown3 = unknown3; - } - - notifyAll(messageBuilder.buildUnknown3(unknown3)); + return (SWGMultiMap) getBaseline(6).get("otherServerGCWTotalPercentMap"); } + @SuppressWarnings("unchecked") public Map> getZoneMap() { - synchronized(objectMutex) { - return zoneMap; - } + return (Map>) otherVariables.get("zoneMap"); } + @SuppressWarnings("unchecked") public Map getServerFirst() { - synchronized(objectMutex) { - return serverFirst; - } + return (Map) otherVariables.get("serverFirst"); } public boolean addServerFirst(String collectionName, ServerFirst player) { synchronized(objectMutex) { - if (!serverFirst.containsKey(collectionName)) { - serverFirst.put(collectionName, player); + if (!getServerFirst().containsKey(collectionName)) { + getServerFirst().put(collectionName, player); return true; } @@ -292,74 +150,40 @@ public class GuildObject extends UniverseObject implements Serializable { } } - public synchronized long getNextInstanceId() { - long ret = nextInstanceId; - nextInstanceId++; - return ret; + public long getNextInstanceId() { + synchronized(objectMutex) { + otherVariables.set("nextInstanceId", (long) (((long) otherVariables.get("nextInstanceId")) + 1L)); + return (long) otherVariables.get("nextInstanceId"); + } + } + + @Override + public void notifyClients(IoBuffer buffer, boolean notifySelf) { + notifyObservers(buffer, false); + } + + @Override + public ObjectMessageBuilder getMessageBuilder() { + synchronized(objectMutex) { + if (messageBuilder == null) { + messageBuilder = new GuildMessageBuilder(this); + } + + return messageBuilder; + } } @Override public void sendBaselines(Client destination) { - destination.getSession().write(messageBuilder.buildBaseline3()); - destination.getSession().write(messageBuilder.buildBaseline6()); - } - - private void notifyAll(IoBuffer buffer) { - synchronized(core.getActiveConnectionsMap()) { - for (Client client : core.getActiveConnectionsMap().values()) { - client.getSession().write(buffer); - } + if (destination != null && destination.getSession() != null) { + destination.getSession().write(getBaseline(3).getBaseline()); + destination.getSession().write(getBaseline(6).getBaseline()); } } - public ObjectMessageBuilder getMessageBuilder() { - return messageBuilder; - } - @Override public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - - switch (viewType) { - case 3: - { - switch (updateType) { - case 4: - { - buffer = messageBuilder.createDelta("GILD", (byte) 3, (short) 1, (short) 4, buffer.flip(), buffer.array().length + 4); - - for (Client client : core.getActiveConnectionsMap().values()) { - client.getSession().write(buffer); - } - - break; - } - } - } - case 6: - { - switch (updateType) { - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - { - buffer = messageBuilder.createDelta("GILD", (byte) 6, (short) 1, (short) updateType, buffer.flip(), buffer.array().length + 4); - - for (Client client : core.getActiveConnectionsMap().values()) { - client.getSession().write(buffer); - } - - break; - } - default: - { - return; - } - } - } - } + notifyClients(getBaseline(viewType).createDelta(updateType, buffer.array()), false); } } diff --git a/src/resources/objects/tangible/TangibleObject.java b/src/resources/objects/tangible/TangibleObject.java index 3d529b47..289bcf04 100644 --- a/src/resources/objects/tangible/TangibleObject.java +++ b/src/resources/objects/tangible/TangibleObject.java @@ -85,12 +85,14 @@ public class TangibleObject extends SWGObject implements Serializable { super(objectID, planet, position, orientation, template); messageBuilder = new TangibleMessageBuilder(this); if (this.getClass().getSimpleName().equals("TangibleObject")) setIntAttribute("volume", 1); + otherVariables = getOtherVariables(); // FIXME temp } public TangibleObject(long objectID, Planet planet, String template) { super(objectID, planet, new Point3D(0, 0, 0), new Quaternion(1, 0, 1, 0), template); messageBuilder = new TangibleMessageBuilder(this); if (this.getClass().getSimpleName().equals("TangibleObject")) setIntAttribute("volume", 1); + otherVariables = getOtherVariables(); // FIXME temp } public TangibleObject() { diff --git a/src/resources/objects/universe/UniverseObject.java b/src/resources/objects/universe/UniverseObject.java index 3f3bb6b1..021abff6 100644 --- a/src/resources/objects/universe/UniverseObject.java +++ b/src/resources/objects/universe/UniverseObject.java @@ -27,19 +27,17 @@ import org.apache.mina.core.buffer.IoBuffer; import resources.objects.ObjectMessageBuilder; -import com.sleepycat.persist.model.Persistent; - import engine.clients.Client; +import engine.resources.objects.Baseline; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Persistent(version=0) public class UniverseObject extends SWGObject implements Serializable { private static final long serialVersionUID = 1L; - private transient ObjectMessageBuilder messageBuilder = null; + private transient UniverseMessageBuilder messageBuilder = null; public UniverseObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { super(objectID, planet, position, orientation, Template); @@ -53,20 +51,36 @@ public class UniverseObject extends SWGObject implements Serializable { public void initAfterDBLoad() { super.init(); } - + @Override - public void sendBaselines(Client arg0) { - // TODO Auto-generated method stub - + public Baseline getOtherVariables() { + Baseline baseline = super.getOtherVariables(); + return baseline; } + @Override + public void notifyClients(IoBuffer buffer, boolean notifySelf) { + notifyObservers(buffer, false); + } + + @Override public ObjectMessageBuilder getMessageBuilder() { - return messageBuilder; + synchronized(objectMutex) { + if (messageBuilder == null) { + messageBuilder = new UniverseMessageBuilder(this); + } + + return messageBuilder; + } + } + + @Override + public void sendBaselines(Client destination) { + } @Override public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - // TODO Auto-generated method stub }