Changeset 33f5302


Ignore:
Timestamp:
Mar 22, 2010, 1:25:21 PM (11 years ago)
Author:
Michael Seifert <mseifert@…>
Branches:
master
Children:
03a2caa
Parents:
47a8976
Message:

Fixed bugs concerning chat messages

Location:
src/main/java/de/erichseifert/warp
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/main/java/de/erichseifert/warp/replays/sc2replay/ReplayMetaData.java

    r47a8976 r33f5302  
    4949                players = new ArrayList<SC2Player>();
    5050                for (int i = 0; i < playerCount; i++) {
    51                         String playerName = ReplayUtil.getReplayString(src);
     51                        String playerName = ReplayUtil.getString(src);
    5252                        // Skip 5 bytes. Purpose unknown. Always seem to be 0.
    5353                        src.position(src.position()+5);
     
    7878                                src.position(additionalInfoStartPos-1);
    7979                        }
    80                         String name = new String(ReplayUtil.getReplayString(src));
     80                        String name = new String(ReplayUtil.getString(src));
    8181                        // Retrieve player with the read name
    8282                        player = getPlayer(name);
     
    8888                         */
    8989                        player.setObserver(false);
    90                         String playerRace = new String(ReplayUtil.getReplayString(src));
    91                         String colorString = new String(ReplayUtil.getReplayString(src));
     90                        String playerRace = new String(ReplayUtil.getString(src));
     91                        String colorString = new String(ReplayUtil.getString(src));
    9292                        String[] colorValues = colorString.split(",");
    9393                        Color color = new Color(
     
    104104        }
    105105
     106        /**
     107         * Returns the player with the specified name.
     108         * @param name Player name.
     109         * @return Player.
     110         */
    106111        public SC2Player getPlayer(String name) {
    107112                for (SC2Player player : players) {
  • src/main/java/de/erichseifert/warp/replays/sc2replay/SC2ChatMessage.java

    r47a8976 r33f5302  
    2929 */
    3030public class SC2ChatMessage implements ChatMessage {
    31         private static final byte CHANNEL_ALL = 0x00;
    32         private static final byte CHANNEL_TEAM = 0x02;
     31        private static final byte CHANNEL_ALL = 0x0;
     32        private static final byte CHANNEL_TEAM = 0x2;
    3333
    3434        private final Player player;
     
    4444        protected SC2ChatMessage(Player player, byte channel, String message) {
    4545                this.player = player;
    46                 if (channel == CHANNEL_ALL) {
     46                if ((channel & CHANNEL_ALL) == 0) {
    4747                        this.channel = ChatMessage.ALL;
    4848                }
    49                 else if (channel == CHANNEL_TEAM) {
     49                else if ((channel & CHANNEL_TEAM) != 0) {
    5050                        this.channel = ChatMessage.TEAM;
    5151                }
  • src/main/java/de/erichseifert/warp/replays/sc2replay/SC2ChatMessages.java

    r47a8976 r33f5302  
    3434 */
    3535public class SC2ChatMessages {
     36        // Probably the blink is only indicated by 0x3, because there is a good chance that the byte is split into parts.
    3637        private static final byte CHANNEL_BLINK = (byte) 0x83;
     38        private static final byte CHANNEL_FLAG_MESSAGE_SIZE = 0x8;
    3739
    3840        private final List<SC2ChatMessage> messages;
     
    6163                                timeOffset = src.get();
    6264                        }
    63                         else if (indicator == 0x2) {
     65                        else if ((indicator & 0x2) != 0) {
    6466                                timeOffset = src.getShort();
    6567                        }
     
    7779                                continue;
    7880                        }
    79                         String messageString = new String(ReplayUtil.getReplayString(src));
     81                        int messageLength = (short) src.get() & 0xFF;
     82                        // If the flag in the channel byte, which modifies the message length is set
     83                        if ((channel & CHANNEL_FLAG_MESSAGE_SIZE) != 0) {
     84                                messageLength += 64;
     85                        }
     86                        String messageString = ReplayUtil.getString(src, messageLength);
    8087                        Player player = players.get(playerIndex-1);
    8188                        SC2ChatMessage message = new SC2ChatMessage(player, channel, messageString);
  • src/main/java/de/erichseifert/warp/util/ReplayUtil.java

    r47a8976 r33f5302  
    4646         * @return String.
    4747         */
    48         public static String getReplayString(ByteBuffer src) {
     48        public static String getString(ByteBuffer src) {
    4949                int length = src.get();
     50                return getString(src, length);
     51        }
     52
     53        /**
     54         * Reads a string from the specified <code>ByteBuffer</code> with the specified length.
     55         * @param src Buffer to read from.
     56         * @param length String length.
     57         * @return String.
     58         */
     59        public static String getString(ByteBuffer src, int length) {
    5060                byte[] stringBytes = new byte[length];
    5161                src.get(stringBytes);
     
    7989        }
    8090
     91        /**
     92         * Compares the specified byte array with the specified <code>List</code>.
     93         * @param bytes Byte array.
     94         * @param list List.
     95         * @return <code>true</code> if the array and the list are identical.
     96         */
    8197        private static boolean bytesEqualList(byte[] bytes, List<Byte> list) {
     98                if (bytes.length != list.size()) {
     99                        return false;
     100                }
    82101                for (int i = 0; i < bytes.length; i++) {
    83102                        if (bytes[i] != list.get(i)) {
Note: See TracChangeset for help on using the changeset viewer.