mirror of
https://github.com/michaelrausch/Party-Parrots-At-Sea.git
synced 2026-05-09 14:28:43 +00:00
commented out buffered code and cleaned up some other areas to try and make the boatgroup clear enough to modify #story[923]
This commit is contained in:
@@ -106,7 +106,7 @@ public class CanvasController {
|
|||||||
|
|
||||||
|
|
||||||
// TODO: 1/05/17 wmu16 - Change this call to now draw the marks as from the xml
|
// TODO: 1/05/17 wmu16 - Change this call to now draw the marks as from the xml
|
||||||
drawBoats();
|
initializeBoats();
|
||||||
timer = new AnimationTimer() {
|
timer = new AnimationTimer() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -157,8 +157,8 @@ public class CanvasController {
|
|||||||
SingleMark thisMark1 = new SingleMark("", thisPoint1.getLat(), thisPoint1.getLng(), thisPoint1.getSeqID());
|
SingleMark thisMark1 = new SingleMark("", thisPoint1.getLat(), thisPoint1.getLng(), thisPoint1.getSeqID());
|
||||||
Limit thisPoint2 = courseLimits.get(i+1);
|
Limit thisPoint2 = courseLimits.get(i+1);
|
||||||
SingleMark thisMark2 = new SingleMark("", thisPoint2.getLat(), thisPoint2.getLng(), thisPoint2.getSeqID());
|
SingleMark thisMark2 = new SingleMark("", thisPoint2.getLat(), thisPoint2.getLng(), thisPoint2.getSeqID());
|
||||||
Point2D borderPoint1 = findScaledXY(thisMark1);
|
Point2D borderPoint1 = latLonToXY(thisMark1.getLatitude(), thisMark1.getLongitude());
|
||||||
Point2D borderPoint2 = findScaledXY(thisMark2);
|
Point2D borderPoint2 = latLonToXY(thisMark2.getLatitude(), thisMark2.getLongitude());
|
||||||
gc.strokeLine(borderPoint1.getX(), borderPoint1.getY(),
|
gc.strokeLine(borderPoint1.getX(), borderPoint1.getY(),
|
||||||
borderPoint2.getX(), borderPoint2.getY());
|
borderPoint2.getX(), borderPoint2.getY());
|
||||||
xBoundaryPoints[i] = borderPoint1.getX();
|
xBoundaryPoints[i] = borderPoint1.getX();
|
||||||
@@ -168,8 +168,8 @@ public class CanvasController {
|
|||||||
SingleMark thisMark1 = new SingleMark("", thisPoint1.getLat(), thisPoint1.getLng(), thisPoint1.getSeqID());
|
SingleMark thisMark1 = new SingleMark("", thisPoint1.getLat(), thisPoint1.getLng(), thisPoint1.getSeqID());
|
||||||
Limit thisPoint2 = courseLimits.get(0);
|
Limit thisPoint2 = courseLimits.get(0);
|
||||||
SingleMark thisMark2 = new SingleMark("", thisPoint2.getLat(), thisPoint2.getLng(), thisPoint2.getSeqID());
|
SingleMark thisMark2 = new SingleMark("", thisPoint2.getLat(), thisPoint2.getLng(), thisPoint2.getSeqID());
|
||||||
Point2D borderPoint1 = findScaledXY(thisMark1);
|
Point2D borderPoint1 = latLonToXY(thisMark1.getLatitude(), thisMark1.getLongitude());
|
||||||
Point2D borderPoint2 = findScaledXY(thisMark2);
|
Point2D borderPoint2 = latLonToXY(thisMark2.getLatitude(), thisMark2.getLongitude());
|
||||||
gc.strokeLine(borderPoint1.getX(), borderPoint1.getY(),
|
gc.strokeLine(borderPoint1.getX(), borderPoint1.getY(),
|
||||||
borderPoint2.getX(), borderPoint2.getY());
|
borderPoint2.getX(), borderPoint2.getY());
|
||||||
xBoundaryPoints[courseLimits.size()-1] = borderPoint1.getX();
|
xBoundaryPoints[courseLimits.size()-1] = borderPoint1.getX();
|
||||||
@@ -207,8 +207,8 @@ public class CanvasController {
|
|||||||
singleMark1.getLongitude());
|
singleMark1.getLongitude());
|
||||||
|
|
||||||
markGroup = new MarkGroup(thisGateMark,
|
markGroup = new MarkGroup(thisGateMark,
|
||||||
findScaledXY(thisGateMark.getSingleMark1()),
|
latLonToXY(thisGateMark.getSingleMark1().getLatitude(), thisGateMark.getSingleMark1().getLongitude()),
|
||||||
findScaledXY(thisGateMark.getSingleMark2()));
|
latLonToXY(thisGateMark.getSingleMark2().getLatitude(), thisGateMark.getSingleMark2().getLongitude()));
|
||||||
|
|
||||||
raceObjects.add(markGroup);
|
raceObjects.add(markGroup);
|
||||||
raceMarks.add(thisGateMark);
|
raceMarks.add(thisGateMark);
|
||||||
@@ -221,7 +221,7 @@ public class CanvasController {
|
|||||||
singleMark.getTargetLng(),
|
singleMark.getTargetLng(),
|
||||||
singleMark.getSourceID());
|
singleMark.getSourceID());
|
||||||
|
|
||||||
markGroup = new MarkGroup(thisSingleMark, findScaledXY(thisSingleMark));
|
markGroup = new MarkGroup(thisSingleMark, latLonToXY(thisSingleMark.getLatitude(), thisSingleMark.getLongitude()));
|
||||||
raceObjects.add(markGroup);
|
raceObjects.add(markGroup);
|
||||||
raceMarks.add(thisSingleMark);
|
raceMarks.add(thisSingleMark);
|
||||||
|
|
||||||
@@ -245,27 +245,30 @@ public class CanvasController {
|
|||||||
private void move(long id, RaceObject raceObject){
|
private void move(long id, RaceObject raceObject){
|
||||||
PriorityBlockingQueue<BoatPositionPacket> movementQueue = StreamParser.boatPositions.get(id);
|
PriorityBlockingQueue<BoatPositionPacket> movementQueue = StreamParser.boatPositions.get(id);
|
||||||
if (movementQueue.size() > 0){
|
if (movementQueue.size() > 0){
|
||||||
BoatPositionPacket positionPacket = movementQueue.peek();
|
// BoatPositionPacket positionPacket = movementQueue.peek();
|
||||||
|
|
||||||
//this code adds a delay to reading from the movementQueue
|
//this code adds a delay to reading from the movementQueue
|
||||||
//in case things being put into the movement queue are slightly
|
//in case things being put into the movement queue are slightly
|
||||||
//out of order
|
//out of order
|
||||||
int delayTime = 1000;
|
// int delayTime = 1000;
|
||||||
int loopTime = delayTime * 10;
|
// int loopTime = delayTime * 10;
|
||||||
long timeDiff = (System.currentTimeMillis()%loopTime - positionPacket.getTimeValid()%loopTime);
|
// long timeDiff = (System.currentTimeMillis()%loopTime - positionPacket.getTimeValid()%loopTime);
|
||||||
if (timeDiff < 0){
|
// if (timeDiff < 0){
|
||||||
timeDiff = loopTime + timeDiff;
|
// timeDiff = loopTime + timeDiff;
|
||||||
}
|
// }
|
||||||
if (timeDiff > delayTime) {
|
// if (timeDiff > delayTime) {
|
||||||
try {
|
try {
|
||||||
positionPacket = movementQueue.take();
|
BoatPositionPacket positionPacket = movementQueue.take();
|
||||||
|
if (id == 104){
|
||||||
|
System.out.println(positionPacket.getTimeValid());
|
||||||
|
}
|
||||||
Point2D p2d = latLonToXY(positionPacket.getLat(), positionPacket.getLon());
|
Point2D p2d = latLonToXY(positionPacket.getLat(), positionPacket.getLon());
|
||||||
double heading = 360.0 / 0xffff * positionPacket.getHeading();
|
double heading = 360.0 / 0xffff * positionPacket.getHeading();
|
||||||
raceObject.setDestination(p2d.getX(), p2d.getY(), heading, positionPacket.getGroundSpeed(), (int) id);
|
raceObject.setDestination(p2d.getX(), p2d.getY(), heading, positionPacket.getGroundSpeed(), (int) id);
|
||||||
} catch (InterruptedException e){
|
} catch (InterruptedException e){
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -320,20 +323,13 @@ public class CanvasController {
|
|||||||
/**
|
/**
|
||||||
* Draws all the boats.
|
* Draws all the boats.
|
||||||
*/
|
*/
|
||||||
private void drawBoats() {
|
private void initializeBoats() {
|
||||||
// Map<Boat, TimelineInfo> timelineInfos = raceViewController.getTimelineInfos();
|
|
||||||
// List<Boat> boats = raceViewController.getStartingBoats();
|
|
||||||
Map<Integer, Yacht> boats = StreamParser.getBoats();
|
Map<Integer, Yacht> boats = StreamParser.getBoats();
|
||||||
Double startingX = raceObjects.get(0).getLayoutX();
|
|
||||||
Double startingY = raceObjects.get(0).getLayoutY();
|
|
||||||
Group boatAnnotations = new Group();
|
Group boatAnnotations = new Group();
|
||||||
|
|
||||||
for (Yacht boat : boats.values()) {
|
for (Yacht boat : boats.values()) {
|
||||||
// for (Boat boat : boats) {
|
|
||||||
boat.setColour(Colors.getColor());
|
boat.setColour(Colors.getColor());
|
||||||
BoatGroup boatGroup = new BoatGroup(boat, boat.getColour());
|
BoatGroup boatGroup = new BoatGroup(boat, boat.getColour());
|
||||||
boatGroup.moveTo(startingX, startingY, 0d);
|
|
||||||
//boatGroup.setStage(raceViewController.getStage());
|
|
||||||
raceObjects.add(boatGroup);
|
raceObjects.add(boatGroup);
|
||||||
boatAnnotations.getChildren().add(boatGroup.getLowPriorityAnnotations());
|
boatAnnotations.getChildren().add(boatGroup.getLowPriorityAnnotations());
|
||||||
}
|
}
|
||||||
@@ -456,10 +452,12 @@ public class CanvasController {
|
|||||||
if (!processed.contains(mark)) {
|
if (!processed.contains(mark)) {
|
||||||
if (mark.getMarkType() != MarkType.SINGLE_MARK) {
|
if (mark.getMarkType() != MarkType.SINGLE_MARK) {
|
||||||
GateMark gateMark = (GateMark) mark;
|
GateMark gateMark = (GateMark) mark;
|
||||||
markGroup = new MarkGroup(mark, findScaledXY(gateMark.getSingleMark1()), findScaledXY(gateMark.getSingleMark2()));
|
markGroup = new MarkGroup(mark,
|
||||||
|
latLonToXY(gateMark.getSingleMark1().getLatitude(), gateMark.getSingleMark1().getLongitude()),
|
||||||
|
latLonToXY(gateMark.getSingleMark2().getLatitude(), gateMark.getSingleMark2().getLongitude()));
|
||||||
raceObjects.add(markGroup);
|
raceObjects.add(markGroup);
|
||||||
} else {
|
} else {
|
||||||
markGroup = new MarkGroup(mark, findScaledXY(mark));
|
markGroup = new MarkGroup(mark, latLonToXY(mark.getLatitude(), mark.getLongitude()));
|
||||||
raceObjects.add(markGroup);
|
raceObjects.add(markGroup);
|
||||||
}
|
}
|
||||||
processed.add(mark);
|
processed.add(mark);
|
||||||
@@ -467,19 +465,18 @@ public class CanvasController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Point2D findScaledXY (Mark unscaled) {
|
|
||||||
return findScaledXY (minLatPoint.getLatitude(), minLatPoint.getLongitude(),
|
|
||||||
unscaled.getLatitude(), unscaled.getLongitude());
|
|
||||||
}
|
|
||||||
|
|
||||||
private Point2D findScaledXY (double latA, double lonA, double latB, double lonB) {
|
|
||||||
|
private Point2D latLonToXY (double latitude, double longitude){
|
||||||
double distanceFromReference;
|
double distanceFromReference;
|
||||||
double angleFromReference;
|
double angleFromReference;
|
||||||
int xAxisLocation = (int) referencePointX;
|
int xAxisLocation = (int) referencePointX;
|
||||||
int yAxisLocation = (int) referencePointY;
|
int yAxisLocation = (int) referencePointY;
|
||||||
|
|
||||||
angleFromReference = Mark.calculateHeadingRad(latA, lonA, latB, lonB);
|
double minLat = minLatPoint.getLatitude();
|
||||||
distanceFromReference = Mark.calculateDistance(latA, lonA, latB, lonB);
|
double minLon = minLatPoint.getLongitude();
|
||||||
|
angleFromReference = Mark.calculateHeadingRad(minLat, minLon, latitude, longitude);
|
||||||
|
distanceFromReference = Mark.calculateDistance(minLat, minLon, latitude, longitude);
|
||||||
if (angleFromReference >= 0 && angleFromReference <= Math.PI / 2) {
|
if (angleFromReference >= 0 && angleFromReference <= Math.PI / 2) {
|
||||||
xAxisLocation += (int) Math.round(distanceScaleFactor * Math.sin(angleFromReference) * distanceFromReference);
|
xAxisLocation += (int) Math.round(distanceScaleFactor * Math.sin(angleFromReference) * distanceFromReference);
|
||||||
yAxisLocation -= (int) Math.round(distanceScaleFactor * Math.cos(angleFromReference) * distanceFromReference);
|
yAxisLocation -= (int) Math.round(distanceScaleFactor * Math.cos(angleFromReference) * distanceFromReference);
|
||||||
@@ -529,10 +526,6 @@ public class CanvasController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Point2D latLonToXY (double latitude, double longitude) {
|
|
||||||
return findScaledXY(minLatPoint.getLatitude(), minLatPoint.getLongitude(), latitude, longitude);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<RaceObject> getRaceObjects() {
|
List<RaceObject> getRaceObjects() {
|
||||||
return raceObjects;
|
return raceObjects;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -122,7 +122,8 @@ public class BoatGroup extends RaceObject{
|
|||||||
velocityObject.setLayoutY(velocityObject.getLayoutY() + dy);
|
velocityObject.setLayoutY(velocityObject.getLayoutY() + dy);
|
||||||
wake.setLayoutX(wake.getLayoutX() + dx);
|
wake.setLayoutX(wake.getLayoutX() + dx);
|
||||||
wake.setLayoutY(wake.getLayoutY() + dy);
|
wake.setLayoutY(wake.getLayoutY() + dy);
|
||||||
rotateTo(rotation + currentRotation);
|
currentRotation = rotation + currentRotation;
|
||||||
|
boatPoly.getTransforms().setAll(new Rotate(rotation));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -132,16 +133,8 @@ public class BoatGroup extends RaceObject{
|
|||||||
* @param rotation The heading in degrees from north the boat should rotate to.
|
* @param rotation The heading in degrees from north the boat should rotate to.
|
||||||
*/
|
*/
|
||||||
public void moveTo (double x, double y, double rotation) {
|
public void moveTo (double x, double y, double rotation) {
|
||||||
rotateTo(rotation);
|
currentRotation = rotation;
|
||||||
moveTo(x, y);
|
boatPoly.getTransforms().setAll(new Rotate(rotation));
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Moves the boat and its children annotations to coordinates specified
|
|
||||||
* @param x The X coordinate to move the boat to
|
|
||||||
* @param y The Y coordinate to move the boat to
|
|
||||||
*/
|
|
||||||
public void moveTo (double x, double y) {
|
|
||||||
boatPoly.setLayoutX(x);
|
boatPoly.setLayoutX(x);
|
||||||
boatPoly.setLayoutY(y);
|
boatPoly.setLayoutY(y);
|
||||||
teamNameObject.setLayoutX(x);
|
teamNameObject.setLayoutX(x);
|
||||||
@@ -165,6 +158,7 @@ public class BoatGroup extends RaceObject{
|
|||||||
double rotation = rotationalVelocity * timeInterval;
|
double rotation = rotationalVelocity * timeInterval;
|
||||||
distanceTravelled += Math.abs(dx) + Math.abs(dy);
|
distanceTravelled += Math.abs(dx) + Math.abs(dy);
|
||||||
moveGroupBy(dx, dy, rotation);
|
moveGroupBy(dx, dy, rotation);
|
||||||
|
|
||||||
//Draw a new section of the trail every 20 pixels of movement.
|
//Draw a new section of the trail every 20 pixels of movement.
|
||||||
if (distanceTravelled > 20) {
|
if (distanceTravelled > 20) {
|
||||||
distanceTravelled = 0;
|
distanceTravelled = 0;
|
||||||
@@ -203,12 +197,6 @@ public class BoatGroup extends RaceObject{
|
|||||||
currentRotation = 360 - currentRotation;
|
currentRotation = 360 - currentRotation;
|
||||||
double dx = newXValue - boatPoly.getLayoutX();
|
double dx = newXValue - boatPoly.getLayoutX();
|
||||||
double dy = newYValue - boatPoly.getLayoutY();
|
double dy = newYValue - boatPoly.getLayoutY();
|
||||||
//Check movement is reasonable. Assumes a 1000 * 1000 canvas
|
|
||||||
if (Math.abs(dx) > 50 || Math.abs(dy) > 50) {
|
|
||||||
dx = 0;
|
|
||||||
dy = 0;
|
|
||||||
moveTo(newXValue, newYValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
pixelVelocityX = dx / expectedUpdateInterval;
|
pixelVelocityX = dx / expectedUpdateInterval;
|
||||||
pixelVelocityY = dy / expectedUpdateInterval;
|
pixelVelocityY = dy / expectedUpdateInterval;
|
||||||
@@ -217,7 +205,6 @@ public class BoatGroup extends RaceObject{
|
|||||||
|
|
||||||
if (wakeGenerationDelay > 0) {
|
if (wakeGenerationDelay > 0) {
|
||||||
wake.rotate(rotationalGoal);
|
wake.rotate(rotationalGoal);
|
||||||
rotateTo(rotationalGoal); //Need to test with this removed.
|
|
||||||
rotationalVelocity = 0;
|
rotationalVelocity = 0;
|
||||||
wakeGenerationDelay--;
|
wakeGenerationDelay--;
|
||||||
} else {
|
} else {
|
||||||
@@ -254,31 +241,6 @@ public class BoatGroup extends RaceObject{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDestination (double newXValue, double newYValue, double groundSpeed, int... raceIDs) {
|
|
||||||
destinationSet = true;
|
|
||||||
|
|
||||||
if (hasRaceId(raceIDs)) {
|
|
||||||
double rotation = Math.abs(
|
|
||||||
Math.toDegrees(
|
|
||||||
Math.atan(
|
|
||||||
(newYValue - boatPoly.getLayoutY()) / (newXValue - boatPoly.getLayoutX())
|
|
||||||
)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
setDestination(newXValue, newYValue, rotation, groundSpeed, raceIDs);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void rotateTo (double rotation) {
|
|
||||||
currentRotation = rotation;
|
|
||||||
boatPoly.getTransforms().setAll(new Rotate(rotation));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void forceRotation () {
|
|
||||||
rotateTo (rotationalGoal);
|
|
||||||
wake.rotate(rotationalGoal);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTeamNameObjectVisible(Boolean visible) {
|
public void setTeamNameObjectVisible(Boolean visible) {
|
||||||
teamNameObject.setVisible(visible);
|
teamNameObject.setVisible(visible);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,10 +47,10 @@ public abstract class RaceObject extends Group {
|
|||||||
this.rotationalVelocity = (rotationalGoal - currentRotation) / expectedUpdateInterval;
|
this.rotationalVelocity = (rotationalGoal - currentRotation) / expectedUpdateInterval;
|
||||||
}
|
}
|
||||||
//Sometimes the rotation is too large to be realistic. In that case just do it instantly.
|
//Sometimes the rotation is too large to be realistic. In that case just do it instantly.
|
||||||
if (Math.abs(rotationalVelocity) > 1) {
|
// if (Math.abs(rotationalVelocity) > 1) {
|
||||||
rotationalVelocity = 0;
|
// rotationalVelocity = 0;
|
||||||
rotateTo(rotationalGoal);
|
// rotateTo(rotationalGoal);
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -62,25 +62,13 @@ public abstract class RaceObject extends Group {
|
|||||||
* @param raceIds RaceID of the object to move.
|
* @param raceIds RaceID of the object to move.
|
||||||
*/
|
*/
|
||||||
public abstract void setDestination (double x, double y, double rotation, double groundSpeed, int... raceIds);
|
public abstract void setDestination (double x, double y, double rotation, double groundSpeed, int... raceIds);
|
||||||
/**
|
|
||||||
* Sets the destination of everything within the RaceObject that has an ID in the array raceIds. The destination is
|
|
||||||
* set to the co-ordinates (x, y).
|
|
||||||
* @param x X co-ordinate to move the graphic to.
|
|
||||||
* @param y Y co-ordinate to move the graphic to.
|
|
||||||
* @param raceIds RaceID to the object to move.
|
|
||||||
*/
|
|
||||||
public abstract void setDestination (double x, double y, double groundSpeed, int... raceIds);
|
|
||||||
|
|
||||||
public abstract void updatePosition (long timeInterval);
|
public abstract void updatePosition (long timeInterval);
|
||||||
|
|
||||||
public abstract void moveTo (double x, double y, double rotation);
|
public abstract void moveTo (double x, double y, double rotation);
|
||||||
|
|
||||||
public abstract void moveTo (double x, double y);
|
|
||||||
|
|
||||||
public abstract void moveGroupBy(double x, double y, double rotation);
|
public abstract void moveGroupBy(double x, double y, double rotation);
|
||||||
|
|
||||||
public abstract void rotateTo (double rotation);
|
|
||||||
|
|
||||||
public abstract boolean hasRaceId (int... raceIds);
|
public abstract boolean hasRaceId (int... raceIds);
|
||||||
|
|
||||||
public abstract int[] getRaceIds ();
|
public abstract int[] getRaceIds ();
|
||||||
|
|||||||
@@ -92,16 +92,12 @@ public class MarkGroup extends RaceObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setDestination (double x, double y, double rotation, double groundSpeed, int... raceIds) {
|
public void setDestination (double x, double y, double rotation, double groundSpeed, int... raceIds) {
|
||||||
setDestination(x, y, 0, raceIds);
|
|
||||||
this.rotationalGoal = rotation;
|
|
||||||
calculateRotationalVelocity();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDestination (double x, double y, double groundSpeed, int... raceIds) {
|
|
||||||
for (int i = 0; i < marks.size(); i++)
|
for (int i = 0; i < marks.size(); i++)
|
||||||
for (int id : raceIds)
|
for (int id : raceIds)
|
||||||
if (id == marks.get(i).getId())
|
if (id == marks.get(i).getId())
|
||||||
setDestinationChild(x, y, 0, Math.max(0, i-1));
|
setDestinationChild(x, y, 0, Math.max(0, i-1));
|
||||||
|
this.rotationalGoal = rotation;
|
||||||
|
calculateRotationalVelocity();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,44 +0,0 @@
|
|||||||
package seng302.models.parsers;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by kre39 on 23/04/17.
|
|
||||||
*/
|
|
||||||
public class StreamPacket {
|
|
||||||
|
|
||||||
//Change int to an ENUM for the type
|
|
||||||
private PacketType type;
|
|
||||||
|
|
||||||
private long messageLength;
|
|
||||||
private long timeStamp;
|
|
||||||
private byte[] payload;
|
|
||||||
|
|
||||||
StreamPacket(int type, long messageLength, long timeStamp, byte[] payload) {
|
|
||||||
this.type = PacketType.assignPacketType(type);
|
|
||||||
this.messageLength = messageLength;
|
|
||||||
this.timeStamp = timeStamp;
|
|
||||||
this.payload = payload;
|
|
||||||
// System.out.println("type = " + this.type.toString());
|
|
||||||
//switch the packet type to deal with what ever specific packet you want to deal with
|
|
||||||
// if (this.type == PacketType.XML_MESSAGE){
|
|
||||||
// //System.out.println("--------");
|
|
||||||
// System.out.println(new String(payload));
|
|
||||||
// //StreamParser.parsePacket(this);
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
PacketType getType() {
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
|
|
||||||
public long getMessageLength() {
|
|
||||||
return messageLength;
|
|
||||||
}
|
|
||||||
|
|
||||||
byte[] getPayload() {
|
|
||||||
return payload;
|
|
||||||
}
|
|
||||||
|
|
||||||
long getTimeStamp() {
|
|
||||||
return timeStamp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -66,20 +66,20 @@ public class StreamParser extends Thread{
|
|||||||
Thread.sleep(1);
|
Thread.sleep(1);
|
||||||
}
|
}
|
||||||
while (appRunning){
|
while (appRunning){
|
||||||
StreamPacket packet = StreamReceiver.packetBuffer.peek();
|
// StreamPacket packet = StreamReceiver.packetBuffer.peek();
|
||||||
//this code adds a delay to reading from the packetBuffer so
|
//this code adds a delay to reading from the packetBuffer so
|
||||||
//out of order packets have time to order themselves in the queue
|
//out of order packets have time to order themselves in the queue
|
||||||
int delayTime = 1000;
|
// int delayTime = 1000;
|
||||||
int loopTime = delayTime * 10;
|
// int loopTime = delayTime * 10;
|
||||||
long transitTime = (System.currentTimeMillis()%loopTime - packet.getTimeStamp()%loopTime);
|
// long transitTime = (System.currentTimeMillis()%loopTime - packet.getTimeStamp()%loopTime);
|
||||||
if (transitTime < 0){
|
// if (transitTime < 0){
|
||||||
transitTime = loopTime + transitTime;
|
// transitTime = loopTime + transitTime;
|
||||||
}
|
// }
|
||||||
if (transitTime < delayTime) {
|
// if (transitTime < delayTime) {
|
||||||
long sleepTime = delayTime - (transitTime);
|
// long sleepTime = delayTime - (transitTime);
|
||||||
Thread.sleep(sleepTime);
|
// Thread.sleep(sleepTime);
|
||||||
}
|
// }
|
||||||
packet = StreamReceiver.packetBuffer.take();
|
StreamPacket packet = StreamReceiver.packetBuffer.take();
|
||||||
parsePacket(packet);
|
parsePacket(packet);
|
||||||
Thread.sleep(1);
|
Thread.sleep(1);
|
||||||
while (StreamReceiver.packetBuffer.peek() == null) {
|
while (StreamReceiver.packetBuffer.peek() == null) {
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package seng302.models.parsers;
|
|||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import seng302.models.parsers.packets.StreamPacket;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|||||||
Reference in New Issue
Block a user