package nbtool.data; import java.nio.ByteBuffer; import java.util.Vector; import com.google.protobuf.InvalidProtocolBufferException; import nbtool.data.json.JsonObject; import nbtool.data.log.Block; import nbtool.data.log.Log; import nbtool.util.Debug; import nbtool.util.Utility; import messages.TeamPacket; import messages.WorldModel; import data.SPLStandardMessage; public class NBitesTeamBroadcast { public static final String TEAM_BROADCAST_LOGTYPE = "NBitesTeamBroadcast"; public String robotName; public String robotIp; //java version of c structure that was originally broadcast. public SPLStandardMessage message; //protobuf parsed from 'message's data field. public TeamPacket dataTeamPacket; //protobuf contained within 'dataTeamPacket,' this is just a direct link to it. public WorldModel dataWorldModel; public NBitesTeamBroadcast(String rn, String ri, SPLStandardMessage msg, TeamPacket tp, WorldModel wm) { this.robotName = rn; this.robotIp = ri; this.message = msg; this.dataTeamPacket = tp; this.dataWorldModel = wm; } public Log toLog() { Block block = new Block(message.toByteArray(), null, TEAM_BROADCAST_LOGTYPE, "NBitesTeamBroadcast.toLog()", 0,0); block.dict.put("robotName", robotName); block.dict.put("robotIP", robotIp); return Log.explicitLogFromArray(new Block[]{block}, null, TEAM_BROADCAST_LOGTYPE, 0); } public static NBitesTeamBroadcast fromLog(Log log) throws InvalidProtocolBufferException { if (!log.logClass.equals(TEAM_BROADCAST_LOGTYPE)) { Debug.error("log of type [%s] cannot be parsed into TeamBroadcast object!", log.logClass); return null; } Block primary = log.blocks.get(0); String rName = primary.dict.get("robotName").asString().value(); String rIP = primary.dict.get("robotIP").asString().value(); byte[] messageBytes = primary.data; SPLStandardMessage message = new SPLStandardMessage(); message.fromByteArray(ByteBuffer.wrap(messageBytes)); TeamPacket tp = TeamPacket.parseFrom(message.data); return new NBitesTeamBroadcast(rName, rIP, message, tp, tp.getPayload()); } }