From: Matthias T. <mt...@us...> - 2005-09-11 11:09:30
|
Update of /cvsroot/arianne/marauroa/src/marauroa/common/net In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4390/common/net Modified Files: MessageFactory.java MessageS2CPerception.java Log Message: - added support for annonymous attributes (attributes without a RPClass) - Attributes and RPClass'es are transmitted to the client with each sync perception - changes may be send with each perception (not yet implemented) Index: MessageFactory.java =================================================================== RCS file: /cvsroot/arianne/marauroa/src/marauroa/common/net/MessageFactory.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** MessageFactory.java 19 Jul 2005 20:56:43 -0000 1.5 --- MessageFactory.java 11 Sep 2005 11:09:21 -0000 1.6 *************** *** 19,24 **** --- 19,26 ---- import java.util.Map; import marauroa.common.Log4J; + import marauroa.common.Utility; import marauroa.common.game.Attributes; import org.apache.log4j.Logger; + import org.apache.log4j.NDC; /** MessageFactory is the class that is in charge of building the messages from *************** *** 52,79 **** { Log4J.startMethod(logger,"register"); ! register(Message.MessageType.C2S_ACTION,MessageC2SAction.class); ! register(Message.MessageType.C2S_CHOOSECHARACTER,MessageC2SChooseCharacter.class); ! register(Message.MessageType.C2S_LOGOUT,MessageC2SLogout.class); ! register(Message.MessageType.S2C_ACTION_ACK,MessageS2CActionACK.class); ! register(Message.MessageType.S2C_CHARACTERLIST,MessageS2CCharacterList.class); ! register(Message.MessageType.S2C_CHOOSECHARACTER_ACK,MessageS2CChooseCharacterACK.class); register(Message.MessageType.S2C_CHOOSECHARACTER_NACK,MessageS2CChooseCharacterNACK.class); ! register(Message.MessageType.S2C_LOGIN_ACK,MessageS2CLoginACK.class); ! register(Message.MessageType.S2C_LOGIN_NACK,MessageS2CLoginNACK.class); ! register(Message.MessageType.S2C_LOGOUT_ACK,MessageS2CLogoutACK.class); ! register(Message.MessageType.S2C_LOGOUT_NACK,MessageS2CLogoutNACK.class); ! register(Message.MessageType.S2C_PERCEPTION,MessageS2CPerception.class); ! register(Message.MessageType.C2S_PERCEPTION_ACK,MessageC2SPerceptionACK.class); ! register(Message.MessageType.C2S_OUTOFSYNC,MessageC2SOutOfSync.class); ! register(Message.MessageType.S2C_SERVERINFO,MessageS2CServerInfo.class); ! register(Message.MessageType.S2C_INVALIDMESSAGE,MessageS2CInvalidMessage.class); ! register(Message.MessageType.S2C_TRANSFER_REQ,MessageS2CTransferREQ.class); ! register(Message.MessageType.C2S_TRANSFER_ACK,MessageC2STransferACK.class); ! register(Message.MessageType.S2C_TRANSFER,MessageS2CTransfer.class); ! register(Message.MessageType.C2S_LOGIN_REQUESTKEY,MessageC2SLoginRequestKey.class); register(Message.MessageType.C2S_LOGIN_SENDNONCENAMEANDPASSWORD,MessageC2SLoginSendNonceNameAndPassword.class); ! register(Message.MessageType.S2C_LOGIN_SENDKEY,MessageS2CLoginSendKey.class); ! register(Message.MessageType.S2C_LOGIN_SENDNONCE,MessageS2CLoginSendNonce.class); ! register(Message.MessageType.C2S_LOGIN_SENDPROMISE,MessageC2SLoginSendPromise.class); Log4J.finishMethod(logger,"register"); } --- 54,81 ---- { Log4J.startMethod(logger,"register"); ! register(Message.MessageType.C2S_ACTION, MessageC2SAction.class); ! register(Message.MessageType.C2S_CHOOSECHARACTER, MessageC2SChooseCharacter.class); ! register(Message.MessageType.C2S_LOGOUT, MessageC2SLogout.class); ! register(Message.MessageType.S2C_ACTION_ACK, MessageS2CActionACK.class); ! register(Message.MessageType.S2C_CHARACTERLIST, MessageS2CCharacterList.class); ! register(Message.MessageType.S2C_CHOOSECHARACTER_ACK, MessageS2CChooseCharacterACK.class); register(Message.MessageType.S2C_CHOOSECHARACTER_NACK,MessageS2CChooseCharacterNACK.class); ! register(Message.MessageType.S2C_LOGIN_ACK, MessageS2CLoginACK.class); ! register(Message.MessageType.S2C_LOGIN_NACK, MessageS2CLoginNACK.class); ! register(Message.MessageType.S2C_LOGOUT_ACK, MessageS2CLogoutACK.class); ! register(Message.MessageType.S2C_LOGOUT_NACK, MessageS2CLogoutNACK.class); ! register(Message.MessageType.S2C_PERCEPTION, MessageS2CPerception.class); ! register(Message.MessageType.C2S_PERCEPTION_ACK, MessageC2SPerceptionACK.class); ! register(Message.MessageType.C2S_OUTOFSYNC, MessageC2SOutOfSync.class); ! register(Message.MessageType.S2C_SERVERINFO, MessageS2CServerInfo.class); ! register(Message.MessageType.S2C_INVALIDMESSAGE, MessageS2CInvalidMessage.class); ! register(Message.MessageType.S2C_TRANSFER_REQ, MessageS2CTransferREQ.class); ! register(Message.MessageType.C2S_TRANSFER_ACK, MessageC2STransferACK.class); ! register(Message.MessageType.S2C_TRANSFER, MessageS2CTransfer.class); ! register(Message.MessageType.C2S_LOGIN_REQUESTKEY, MessageC2SLoginRequestKey.class); register(Message.MessageType.C2S_LOGIN_SENDNONCENAMEANDPASSWORD,MessageC2SLoginSendNonceNameAndPassword.class); ! register(Message.MessageType.S2C_LOGIN_SENDKEY, MessageS2CLoginSendKey.class); ! register(Message.MessageType.S2C_LOGIN_SENDNONCE, MessageS2CLoginSendNonce.class); ! register(Message.MessageType.C2S_LOGIN_SENDPROMISE, MessageC2SLoginSendPromise.class); Log4J.finishMethod(logger,"register"); } *************** *** 99,106 **** if(factoryArray.containsKey(new Integer(data[1]))) { try { Class messageType=(Class) factoryArray.get(new Integer(data[1])); ! Message tmp=(Message) messageType.newInstance(); ByteArrayInputStream in=new ByteArrayInputStream(data); InputSerializer s=new InputSerializer(in); --- 101,109 ---- if(factoryArray.containsKey(new Integer(data[1]))) { + Message tmp=null; try { Class messageType=(Class) factoryArray.get(new Integer(data[1])); ! tmp = (Message) messageType.newInstance(); ByteArrayInputStream in=new ByteArrayInputStream(data); InputSerializer s=new InputSerializer(in); *************** *** 112,116 **** --- 115,123 ---- catch(Exception e) { + NDC.push("message is ["+tmp+"]\n"); + NDC.push("message dump is [\n"+Utility.dumpByteArray(data)+"\n]\n"); logger.error("error in getMessage",e); + NDC.pop(); + NDC.pop(); throw new IOException(e.getMessage()); } Index: MessageS2CPerception.java =================================================================== RCS file: /cvsroot/arianne/marauroa/src/marauroa/common/net/MessageS2CPerception.java,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** MessageS2CPerception.java 26 Aug 2005 16:10:53 -0000 1.11 --- MessageS2CPerception.java 11 Sep 2005 11:09:21 -0000 1.12 *************** *** 17,20 **** --- 17,22 ---- import java.io.IOException; import java.net.InetSocketAddress; + import java.util.ArrayList; + import java.util.Collection; import java.util.HashMap; import java.util.Iterator; *************** *** 25,31 **** import marauroa.common.Log4J; import marauroa.common.TimeoutConf; - import marauroa.common.game.Attributes; import marauroa.common.game.IRPZone; import marauroa.common.game.Perception; import marauroa.common.game.RPObject; import marauroa.common.game.RPSlot; --- 27,33 ---- import marauroa.common.Log4J; import marauroa.common.TimeoutConf; import marauroa.common.game.IRPZone; import marauroa.common.game.Perception; + import marauroa.common.game.RPClass; import marauroa.common.game.RPObject; import marauroa.common.game.RPSlot; *************** *** 54,57 **** --- 56,61 ---- private List<RPObject> modifiedDeletedAttribsRPObjects; private List<RPObject> deletedRPObjects; + private Map<String, Short> attributes; + private Collection<RPClass> rpClasses; private RPObject myRPObject; *************** *** 62,66 **** { super(MessageType.S2C_PERCEPTION,null); ! myRPObject=new RPObject(); } --- 66,70 ---- { super(MessageType.S2C_PERCEPTION,null); ! myRPObject=new RPObject(); } *************** *** 82,85 **** --- 86,91 ---- modifiedDeletedAttribsRPObjects = perception.modifiedDeletedAttribsList; deletedRPObjects = perception.deletedList; + attributes = perception.attributes; + rpClasses = perception.rpClasses; myRPObject=new RPObject(); *************** *** 145,160 **** } /** This method returns a String that represent the object * @return a string representing the object.*/ public String toString() { ! StringBuffer perception_string=new StringBuffer(); perception_string.append("Type: "+typePerception+" Timestamp: "+timestampPerception+") contents: "); perception_string.append("\n zoneid: "+zoneid+"\n"); perception_string.append("\n added: \n"); for(RPObject object: addedRPObjects) { ! perception_string.append(" "+object.toString()+"\n"); } --- 151,201 ---- } + /** + * returns the list of updated attributes. + */ + public Map<String, Short> getAttributes() + { + return attributes; + } + /** This method returns a String that represent the object * @return a string representing the object.*/ public String toString() { ! StringBuilder perception_string=new StringBuilder(); perception_string.append("Type: "+typePerception+" Timestamp: "+timestampPerception+") contents: "); perception_string.append("\n zoneid: "+zoneid+"\n"); + + if (attributes != null) + { + perception_string.append("\n "+attributes.size()+" attributes:\n"); + for(String name: attributes.keySet()) + { + perception_string.append(" "+name+":"+attributes.get(name)+"\n"); + } + } + else + { + perception_string.append("\n no attributes\n"); + } + + if (rpClasses != null) + { + perception_string.append("\n "+rpClasses.size()+" RPClass'es:\n"); + for(RPClass clazz: rpClasses) + { + perception_string.append(" "+clazz.getName()+"\n"); + } + } + else + { + perception_string.append("\n no RPClass'es\n"); + } + perception_string.append("\n added: \n"); for(RPObject object: addedRPObjects) { ! perception_string.append(" "+object+"\n"); } *************** *** 162,166 **** for(RPObject object: modifiedAddedAttribsRPObjects) { ! perception_string.append(" "+object.toString()+"\n"); } --- 203,207 ---- for(RPObject object: modifiedAddedAttribsRPObjects) { ! perception_string.append(" "+object+"\n"); } *************** *** 168,172 **** for(RPObject object: modifiedDeletedAttribsRPObjects) { ! perception_string.append(" "+object.toString()+"\n"); } --- 209,213 ---- for(RPObject object: modifiedDeletedAttribsRPObjects) { ! perception_string.append(" "+object+"\n"); } *************** *** 174,182 **** for(RPObject object: deletedRPObjects) { ! perception_string.append(" "+object.toString()+"\n"); } perception_string.append("\n my object: \n"); ! perception_string.append(" "+(myRPObject==null?null:myRPObject.toString())+"\n"); return perception_string.toString(); --- 215,223 ---- for(RPObject object: deletedRPObjects) { ! perception_string.append(" "+object+"\n"); } perception_string.append("\n my object: \n"); ! perception_string.append(" "+myRPObject+"\n"); return perception_string.toString(); *************** *** 207,211 **** setZoneid(son,zoneid); } ! } } --- 248,252 ---- setZoneid(son,zoneid); } ! } } *************** *** 220,228 **** --- 261,304 ---- typePerception=ser.readByte(); zoneid=(IRPZone.ID)ser.readObject(new IRPZone.ID("")); + addedRPObjects=new LinkedList<RPObject>(); deletedRPObjects=new LinkedList<RPObject>(); modifiedAddedAttribsRPObjects=new LinkedList<RPObject>(); modifiedDeletedAttribsRPObjects=new LinkedList<RPObject>(); + attributes = new HashMap<String, Short>(); + rpClasses = new ArrayList<RPClass>(); + // read all attributes (if any) + int count = ser.readInt(); + + if (count > TimeoutConf.MAX_ARRAY_ELEMENTS) + { + throw new IOException("Illegal request of attribute-list of "+count+" size (max is "+TimeoutConf.MAX_ARRAY_ELEMENTS+")"); + } + logger.debug(count + " attributes"); + for(int i = 0; i < count; i++) + { + String name = ser.readString(); + short id = ser.readShort(); + attributes.put(name, id); + } + // be sure the classes and attributes are applied before reading any objects + RPClass.updateAttributes(attributes); + + // read all RPClass'es (if any) + count = ser.readInt(); + + if (count > TimeoutConf.MAX_ARRAY_ELEMENTS) + { + throw new IOException("Illegal request of rpclass-list of "+count+" size (max is "+TimeoutConf.MAX_ARRAY_ELEMENTS+")"); + } + logger.debug(count + " rpclass'es"); + for(int i = 0; i < count; i++) + { + RPClass rpclass = new RPClass(); + ser.readObject(rpclass); + rpClasses.add(rpclass); + } + int added=ser.readInt(); *************** *** 280,285 **** deletedRPObjects.add(object); } ! ! /** Dynamic part */ array=new ByteArrayInputStream(in.readByteArray()); --- 356,360 ---- deletedRPObjects.add(object); } ! /** Dynamic part */ array=new ByteArrayInputStream(in.readByteArray()); *************** *** 370,374 **** perception.computeStaticPartPerception(serializer); - out_stream.close(); byte[] content=array.toByteArray(); --- 445,448 ---- *************** *** 419,422 **** --- 493,525 ---- ser.write(zoneid); + // Write Attributes + if (attributes != null) + { + ser.write( attributes.size() ); + for(String name : attributes.keySet()) + { + ser.write(name); + ser.write(attributes.get(name).shortValue()); + } + } + else + { + ser.write( (int) 0 ); + } + + // Write RPClasses + if (rpClasses != null) + { + ser.write( rpClasses.size() ); + for(RPClass clazz: rpClasses) + { + ser.write(clazz); + } + } + else + { + ser.write( (int) 0 ); + } + ser.write((int)addedRPObjects.size()); for(RPObject object: addedRPObjects) |