master
kn5886348135 3 years ago
parent 2b10bac007
commit 4f4583c036

@ -57,12 +57,12 @@ public class Audio {
public void play() { public void play() {
try { try {
byte[] b = new byte[1024 * 5]; byte[] b = new byte[1024*5];
int len = 0; int len = 0;
sourceDataLine.open(audioFormat, 1024 * 5); sourceDataLine.open(audioFormat, 1024*5);
sourceDataLine.start(); sourceDataLine.start();
System.out.println(audioInputStream.markSupported()); //System.out.println(audioInputStream.markSupported());
// audioInputStream.mark(12358946); audioInputStream.mark(12358946);
while ((len = audioInputStream.read(b)) > 0) { while ((len = audioInputStream.read(b)) > 0) {
sourceDataLine.write(b, 0, len); sourceDataLine.write(b, 0, len);
} }

@ -152,4 +152,12 @@ public class Bullet {
public void die() { public void die() {
this.living = false; this.living = false;
} }
public boolean isLiving() {
return living;
}
public void setLiving(boolean living) {
this.living = living;
}
} }

@ -1,6 +1,6 @@
package com.example.tankbattle; package com.example.tankbattle;
import java.awt.*; import java.awt.Graphics;
public class Explode { public class Explode {
public static int WIDTH = ResourceMgr.explodes[0].getWidth(); public static int WIDTH = ResourceMgr.explodes[0].getWidth();
@ -13,14 +13,17 @@ public class Explode {
public Explode(int x, int y) { public Explode(int x, int y) {
this.x = x; this.x = x;
this.y = y; this.y = y;
new Thread(()->new Audio("audio/explode.wav").play()).start();
} }
public void paint(Graphics g) { public void paint(Graphics g) {
g.drawImage(ResourceMgr.explodes[step++], x, y, null); g.drawImage(ResourceMgr.explodes[step++], x, y, null);
if (step >= ResourceMgr.explodes.length) if (step >= ResourceMgr.explodes.length) {
TankFrame.INSTANCE.explodes.remove(this); TankFrame.INSTANCE.explodes.remove(this);
}
} }
} }

@ -26,7 +26,6 @@ public class Main {
} }
}).start(); }).start();
Client client = Client.INSTANCE; Client.INSTANCE.connect();
client.connect();
} }
} }

@ -4,12 +4,14 @@ import com.example.tankbattle.net.BulletNewMessage;
import com.example.tankbattle.net.Client; import com.example.tankbattle.net.Client;
import com.example.tankbattle.net.TankJoinMessage; import com.example.tankbattle.net.TankJoinMessage;
import java.awt.*; import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.util.Random; import java.util.Random;
import java.util.UUID; import java.util.UUID;
public class Tank { public class Tank {
private static final int SPEED = 1; private static final int SPEED = 2;
public static int WIDTH = ResourceMgr.GoodTankD.getWidth(); public static int WIDTH = ResourceMgr.GoodTankD.getWidth();
public static int HEIGHT = ResourceMgr.GoodTankD.getHeight(); public static int HEIGHT = ResourceMgr.GoodTankD.getHeight();
@ -73,6 +75,9 @@ public class Tank {
Bullet bullet = new Bullet(this.id, bX, bY, this.dir, this.group, this.tf); Bullet bullet = new Bullet(this.id, bX, bY, this.dir, this.group, this.tf);
tf.bullets.add(bullet); tf.bullets.add(bullet);
Client.INSTANCE.send(new BulletNewMessage(bullet)); Client.INSTANCE.send(new BulletNewMessage(bullet));
if (this.group == Group.GOOD) {
new Thread(() -> new Audio("audio/tank_fire.wav").play()).start();
}
} }
public Dir getDir() { public Dir getDir() {
@ -119,30 +124,33 @@ public class Tank {
break; break;
} }
rect.x = this.x;
rect.y = this.y; if (this.group == Group.BAD && random.nextInt(100) > 95) {
if (this.group == Group.BAD && random.nextInt(100) > 95) this.fire(); this.fire();
}
if (this.group == Group.BAD && random.nextInt(100) > 95) { if (this.group == Group.BAD && random.nextInt(100) > 95) {
randomDir(); randomDir();
} }
boundsCheck(); boundsCheck();
rect.x = this.x;
rect.y = this.y;
} }
private void boundsCheck() { private void boundsCheck() {
if (this.x < 0) { if (this.x < 2) {
this.x = 2; this.x = 2;
} }
if (this.y < 28) { if (this.y < 28) {
this.y = 28; this.y = 28;
} }
if (this.x > TankFrame.GAME_WIDTH - Tank.WIDTH) { if (this.x > TankFrame.GAME_WIDTH - Tank.WIDTH - 2) {
this.x = TankFrame.GAME_WIDTH - Tank.WIDTH; this.x = TankFrame.GAME_WIDTH - Tank.WIDTH - 2;
} }
if (this.y > TankFrame.GAME_HEIGHT - Tank.HEIGHT) { if (this.y > TankFrame.GAME_HEIGHT - Tank.HEIGHT - 2) {
this.y = TankFrame.GAME_HEIGHT - Tank.HEIGHT; this.y = TankFrame.GAME_HEIGHT - Tank.HEIGHT - 2;
} }
} }
@ -151,10 +159,12 @@ public class Tank {
} }
public void paint(Graphics g) { public void paint(Graphics g) {
if (!living) tf.tanks.remove(this); // if (!living) {
// tf.tanks.remove(this);
// }
Color color = g.getColor(); Color color = g.getColor();
g.setColor(Color.YELLOW); g.setColor(Color.YELLOW);
g.drawString(id.toString(), this.x, this.y - 10); g.drawString(id.toString(), this.x, this.y - 20);
g.drawString("live=" + living, x, y - 10); g.drawString("live=" + living, x, y - 10);
g.setColor(color); g.setColor(color);

@ -100,7 +100,7 @@ public class TankFrame extends Frame {
bullets.get(i).paint(g); bullets.get(i).paint(g);
} }
tanks.values().forEach((e) -> e.paint(g)); tanks.values().stream().forEach((e) -> e.paint(g));
for (int i = 0; i < explodes.size(); i++) { for (int i = 0; i < explodes.size(); i++) {
explodes.get(i).paint(g); explodes.get(i).paint(g);
@ -131,21 +131,24 @@ public class TankFrame extends Frame {
switch (key) { switch (key) {
case KeyEvent.VK_LEFT: case KeyEvent.VK_LEFT:
bL = true; bL = true;
setMainTankDir();
break; break;
case KeyEvent.VK_UP: case KeyEvent.VK_UP:
bU = true; bU = true;
setMainTankDir();
break; break;
case KeyEvent.VK_RIGHT: case KeyEvent.VK_RIGHT:
bR = true; bR = true;
setMainTankDir();
break; break;
case KeyEvent.VK_DOWN: case KeyEvent.VK_DOWN:
bD = true; bD = true;
setMainTankDir();
break; break;
default: default:
break; break;
} }
new Thread(()->new Audio("audio/tank_move.wav").play()).start();
setMainTankDir();
} }
@Override @Override
@ -154,15 +157,19 @@ public class TankFrame extends Frame {
switch (key) { switch (key) {
case KeyEvent.VK_LEFT: case KeyEvent.VK_LEFT:
bL = false; bL = false;
setMainTankDir();
break; break;
case KeyEvent.VK_UP: case KeyEvent.VK_UP:
bU = false; bU = false;
setMainTankDir();
break; break;
case KeyEvent.VK_RIGHT: case KeyEvent.VK_RIGHT:
bR = false; bR = false;
setMainTankDir();
break; break;
case KeyEvent.VK_DOWN: case KeyEvent.VK_DOWN:
bD = false; bD = false;
setMainTankDir();
break; break;
case KeyEvent.VK_CONTROL: case KeyEvent.VK_CONTROL:
myTank.fire(); myTank.fire();
@ -170,8 +177,6 @@ public class TankFrame extends Frame {
default: default:
break; break;
} }
setMainTankDir();
} }
private void setMainTankDir() { private void setMainTankDir() {
@ -182,12 +187,21 @@ public class TankFrame extends Frame {
myTank.setMoving(false); myTank.setMoving(false);
Client.INSTANCE.send(new TankStopMessage(getMainTank())); Client.INSTANCE.send(new TankStopMessage(getMainTank()));
} else { } else {
myTank.setMoving(true); if (bL) {
if (bL) myTank.setDir(Dir.LEFT); myTank.setDir(Dir.LEFT);
if (bU) myTank.setDir(Dir.UP); }
if (bR) myTank.setDir(Dir.RIGHT); if (bU) {
if (bD) myTank.setDir(Dir.DOWN); myTank.setDir(Dir.UP);
Client.INSTANCE.send(new TankStartMovingMessage(getMainTank())); }
if (bR) {
myTank.setDir(Dir.RIGHT);
}
if (bD) {
myTank.setDir(Dir.DOWN);
}
if (!myTank.isMoving()) {
Client.INSTANCE.send(new TankStartMovingMessage(getMainTank()));
}
myTank.setMoving(true); myTank.setMoving(true);
if (dir != myTank.getDir()) { if (dir != myTank.getDir()) {

@ -33,7 +33,7 @@ public class BulletNewMessage extends Message {
@Override @Override
public void handle() { public void handle() {
if (this.id.equals(TankFrame.INSTANCE.getMainTank().getId())) { if (this.playerID.equals(TankFrame.INSTANCE.getMainTank().getId())) {
return; return;
} }
Bullet bullet = new Bullet(this.playerID, x, y, dir, group, TankFrame.INSTANCE); Bullet bullet = new Bullet(this.playerID, x, y, dir, group, TankFrame.INSTANCE);

@ -26,7 +26,7 @@ public class Client {
@Override @Override
public void operationComplete(ChannelFuture future) throws Exception { public void operationComplete(ChannelFuture future) throws Exception {
if (!future.isSuccess()) { if (!future.isSuccess()) {
System.out.println("not conected"); System.out.println("not connected");
} else { } else {
System.out.println("connected"); System.out.println("connected");
channel = future.channel(); channel = future.channel();

@ -11,5 +11,6 @@ public class MessageEncoder extends MessageToByteEncoder<Message> {
out.writeInt(msg.getMessageType().ordinal()); out.writeInt(msg.getMessageType().ordinal());
byte[] data = msg.toBytes(); byte[] data = msg.toBytes();
out.writeInt(data.length); out.writeInt(data.length);
out.writeBytes(data);} out.writeBytes(data);
}
} }

@ -2,7 +2,6 @@ package com.example.tankbattle.net;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.util.ReferenceCountUtil;
public class ServerChildHandler extends ChannelInboundHandlerAdapter { public class ServerChildHandler extends ChannelInboundHandlerAdapter {
@ -15,6 +14,29 @@ public class ServerChildHandler extends ChannelInboundHandlerAdapter {
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
ServerFrame.INSTANCE.updateClientMessage(msg.toString()); ServerFrame.INSTANCE.updateClientMessage(msg.toString());
Server.clients.writeAndFlush(msg); Server.clients.writeAndFlush(msg);
/*ByteBuf buf = null;
try {
buf = (ByteBuf)msg;
byte[] bytes = new byte[buf.readableBytes()];
buf.getBytes(buf.readerIndex(), bytes);
String s = new String(bytes);
if(s.equals("_bye_")) {
System.out.println("<22>ͻ<EFBFBD><CDBB><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>˳<EFBFBD>");
Server.clients.remove(ctx.channel());
ctx.close();
} else {
Server.clients.writeAndFlush(msg);
}*/
//System.out.println(buf);
//System.out.println(buf.refCnt());
/*} finally {
//if(buf != null && buf) ReferenceCountUtil.release(buf);
//System.out.println(buf.refCnt());
}*/
} }
@Override @Override

@ -12,7 +12,7 @@ import java.awt.event.WindowEvent;
public class ServerFrame extends Frame { public class ServerFrame extends Frame {
public static final ServerFrame INSTANCE = new ServerFrame(); public static final ServerFrame INSTANCE = new ServerFrame();
Button btnStart = new Button("Start"); Button btnStart = new Button("start");
TextArea textLeft = new TextArea(); TextArea textLeft = new TextArea();
TextArea textRight = new TextArea(); TextArea textRight = new TextArea();
Server server = new Server(); Server server = new Server();

@ -19,8 +19,8 @@ public class TankDieMessage extends Message{
public TankDieMessage() { public TankDieMessage() {
} }
public TankDieMessage(UUID bulletId, UUID id) { public TankDieMessage(UUID playerId, UUID id) {
this.bulletId = bulletId; this.bulletId = playerId;
this.id = id; this.id = id;
} }

@ -22,7 +22,8 @@ public class TankDirChangedMessage extends Message{
public TankDirChangedMessage() { public TankDirChangedMessage() {
} }
public TankDirChangedMessage(UUID id, int x, int y, Dir dir) { public TankDirChangedMessage(UUID id, int x, int y , Dir dir) {
super();
this.id = id; this.id = id;
this.x = x; this.x = x;
this.y = y; this.y = y;
@ -75,7 +76,7 @@ public class TankDirChangedMessage extends Message{
} }
Tank tank = TankFrame.INSTANCE.findTankByUUID(this.id); Tank tank = TankFrame.INSTANCE.findTankByUUID(this.id);
if (tank != null) { if (tank != null) {
tank.setMoving(false); tank.setMoving(true);
tank.setX(this.x); tank.setX(this.x);
tank.setY(this.y); tank.setY(this.y);
tank.setDir(this.dir); tank.setDir(this.dir);
@ -108,7 +109,7 @@ public class TankDirChangedMessage extends Message{
this.x = dis.readInt(); this.x = dis.readInt();
this.y = dis.readInt(); this.y = dis.readInt();
this.dir = Dir.values()[dis.read()]; this.dir = Dir.values()[dis.readInt()];
} catch (IOException exception) { } catch (IOException exception) {
exception.printStackTrace(); exception.printStackTrace();
} }

@ -33,9 +33,7 @@ public class TankJoinMessage extends Message{
this.id = id; this.id = id;
} }
public TankJoinMessage(Tank tank) { public TankJoinMessage(Tank tank) {
super();
this.x = tank.getX(); this.x = tank.getX();
this.y = tank.getY(); this.y = tank.getY();
this.dir = tank.getDir(); this.dir = tank.getDir();
@ -46,8 +44,8 @@ public class TankJoinMessage extends Message{
@Override @Override
public void parse(byte[] bytes) { public void parse(byte[] bytes) {
DataInputStream dis = new DataInputStream(new ByteArrayInputStream(bytes)); try (DataInputStream dis = new DataInputStream(new ByteArrayInputStream(bytes))) {
try {
this.x = dis.readInt(); this.x = dis.readInt();
this.y = dis.readInt(); this.y = dis.readInt();
this.dir = Dir.values()[dis.readInt()]; this.dir = Dir.values()[dis.readInt()];
@ -56,17 +54,12 @@ public class TankJoinMessage extends Message{
this.id = new UUID(dis.readLong(), dis.readLong()); this.id = new UUID(dis.readLong(), dis.readLong());
} catch (IOException exception) { } catch (IOException exception) {
exception.printStackTrace(); exception.printStackTrace();
} finally {
try {
dis.close();
}catch (IOException ex){
ex.printStackTrace();
}
} }
} }
@Override @Override
public byte[] toBytes(){ public byte[] toBytes() {
byte[] bytes = null; byte[] bytes = null;
try (ByteArrayOutputStream baos = new ByteArrayOutputStream(); try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos)) { DataOutputStream dos = new DataOutputStream(baos)) {
@ -82,13 +75,12 @@ public class TankJoinMessage extends Message{
} catch (Exception exception) { } catch (Exception exception) {
exception.printStackTrace(); exception.printStackTrace();
} finally {
} }
return bytes; return bytes;
} }
@Override @Override
public void handle(){ public void handle() {
if (this.id.equals(TankFrame.INSTANCE.getMainTank().getId()) || if (this.id.equals(TankFrame.INSTANCE.getMainTank().getId()) ||
TankFrame.INSTANCE.findTankByUUID(this.id) != null) { TankFrame.INSTANCE.findTankByUUID(this.id) != null) {
return; return;

@ -15,7 +15,7 @@ public class TankStartMovingMessage extends Message{
UUID id; UUID id;
int x,y; int x, y;
Dir dir; Dir dir;

@ -14,10 +14,11 @@ public class TankStopMessage extends Message{
UUID id; UUID id;
int x,y; private int x;
public TankStopMessage() { private int y;
}
public TankStopMessage() {}
public TankStopMessage(UUID id, int x, int y) { public TankStopMessage(UUID id, int x, int y) {
this.id = id; this.id = id;

@ -0,0 +1,42 @@
package com.example.tankbattle;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import javax.imageio.ImageIO;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.IOException;
class ImageRotateTest {
@Test
void test() {
try {
BufferedImage tankL = ImageIO.read(ResourceMgr.class.getClassLoader().getResourceAsStream("images/tankL.gif"));
tankL = rotateImage(tankL, 90);
Assertions.assertNotNull(tankL);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public BufferedImage rotateImage(final BufferedImage bufferedimage,
final int degree) {
int w = bufferedimage.getWidth();
int h = bufferedimage.getHeight();
int type = bufferedimage.getColorModel().getTransparency();
BufferedImage img;
Graphics2D graphics2d;
(graphics2d = (img = new BufferedImage(w, h, type))
.createGraphics()).setRenderingHint(
RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2d.rotate(Math.toRadians(degree), w / 2, h / 2);
graphics2d.drawImage(bufferedimage, 0, 0, null);
graphics2d.dispose();
return img;
}
}

@ -16,10 +16,9 @@ public class ImageTest {
public void test(){ public void test(){
System.out.println(ImageTest.class.getClassLoader()); System.out.println(ImageTest.class.getClassLoader());
try { try {
BufferedImage image = ImageIO.read(new File("C:/work/javaprojects/Tank_60/src/images/bulletD.gif")); BufferedImage image = ImageIO.read(new File("/images/bulletD.gif"));
assertNotNull(image); assertNotNull(image);
BufferedImage image2 = ImageIO.read(ImageTest.class.getClassLoader().getResourceAsStream("src/images" + BufferedImage image2 = ImageIO.read(ImageTest.class.getClassLoader().getResourceAsStream("src/images/bulletD.gif"));
"/bulletD.gif"));
assertNotNull(image2); assertNotNull(image2);
} catch (IOException exception) { } catch (IOException exception) {
exception.printStackTrace(); exception.printStackTrace();

@ -16,52 +16,54 @@ class TankDirChangedMessageCoderTest {
void encode() { void encode() {
EmbeddedChannel embeddedChannel = new EmbeddedChannel(); EmbeddedChannel embeddedChannel = new EmbeddedChannel();
UUID id = UUID.randomUUID(); UUID id = UUID.randomUUID();
TankStartMovingMessage message = new TankStartMovingMessage(id, 5, 10, Dir.LEFT);
embeddedChannel.pipeline()
.addLast(new MessageEncoder());
TankDirChangedMessage message = new TankDirChangedMessage(id, 5, 10, Dir.DOWN);
embeddedChannel.pipeline().addLast(new MessageEncoder());
embeddedChannel.writeOutbound(message); embeddedChannel.writeOutbound(message);
ByteBuf buf = embeddedChannel.readOutbound(); ByteBuf buf = (ByteBuf) embeddedChannel.readOutbound();
MessageType messageType = MessageType.values()[buf.readInt()]; MessageType messageType = MessageType.values()[buf.readInt()];
assertEquals(MessageType.TankJoin, messageType); assertEquals(MessageType.TankStartMoving, messageType);
int length = buf.readInt(); int length = buf.readInt();
assertEquals(33, length); assertEquals(28, length);
UUID uuid = new UUID(buf.readLong(), buf.readLong());
int x = buf.readInt(); int x = buf.readInt();
int y = buf.readInt(); int y = buf.readInt();
Dir dir = Dir.values()[buf.readInt()]; int dirOrdinal = buf.readInt();
UUID uuid = new UUID(buf.readLong(), buf.readLong()); Dir dir = Dir.values()[dirOrdinal];
assertEquals(5, x); assertEquals(5, x);
assertEquals(10, y); assertEquals(10, y);
assertEquals(Dir.DOWN, dir); assertEquals(Dir.LEFT, dir);
assertEquals(id, uuid); assertEquals(id, uuid);
} }
@Test @Test
void decode() { void testDecoder() {
EmbeddedChannel embeddedChannel = new EmbeddedChannel(); EmbeddedChannel ch = new EmbeddedChannel();
UUID id = UUID.randomUUID(); UUID id = UUID.randomUUID();
TankDirChangedMessage message = new TankDirChangedMessage(id, 5, 10, Dir.DOWN); TankStartMovingMessage message = new TankStartMovingMessage(id, 5, 10, Dir.LEFT);
embeddedChannel.pipeline().addLast(new MessageDecoder()); ch.pipeline()
.addLast(new MessageDecoder());
ByteBuf buf = Unpooled.buffer(); ByteBuf buf = Unpooled.buffer();
buf.writeInt(MessageType.TankJoin.ordinal()); buf.writeInt(MessageType.TankStartMoving.ordinal());
byte[] data = message.toBytes(); byte[] bytes = message.toBytes();
buf.writeInt(data.length); buf.writeInt(bytes.length);
buf.writeBytes(data); buf.writeBytes(bytes);
embeddedChannel.writeInbound(buf.duplicate()); ch.writeInbound(buf.duplicate());
TankDirChangedMessage msg = embeddedChannel.readInbound(); TankStartMovingMessage msg = (TankStartMovingMessage) ch.readInbound();
assertEquals(5, msg.x); assertEquals(5, msg.getX());
assertEquals(10, msg.y); assertEquals(10, msg.getY());
assertEquals(Dir.DOWN, msg.dir); assertEquals(Dir.LEFT, msg.getDir());
assertEquals(id, msg.id); assertEquals(id, msg.getId());
} }
} }

@ -14,15 +14,18 @@ import static org.junit.jupiter.api.Assertions.*;
class TankJoinMessageCoderTest { class TankJoinMessageCoderTest {
@Test @Test
void encode() { void testEncoder() {
EmbeddedChannel embeddedChannel = new EmbeddedChannel(); EmbeddedChannel ch = new EmbeddedChannel();
UUID id = UUID.randomUUID(); UUID id = UUID.randomUUID();
TankJoinMessage msg = new TankJoinMessage(5, 10, Dir.DOWN, true, Group.BAD, id);
ch.pipeline()
.addLast(new MessageEncoder());
TankJoinMessage message = new TankJoinMessage(5, 10, Dir.DOWN, true, Group.BAD, id); ch.writeOutbound(msg);
embeddedChannel.pipeline().addLast(new MessageEncoder());
embeddedChannel.writeOutbound(message);
ByteBuf buf = embeddedChannel.readOutbound(); ByteBuf buf = (ByteBuf)ch.readOutbound();
MessageType messageType = MessageType.values()[buf.readInt()]; MessageType messageType = MessageType.values()[buf.readInt()];
assertEquals(MessageType.TankJoin, messageType); assertEquals(MessageType.TankJoin, messageType);
@ -31,38 +34,42 @@ class TankJoinMessageCoderTest {
int x = buf.readInt(); int x = buf.readInt();
int y = buf.readInt(); int y = buf.readInt();
Dir dir = Dir.values()[buf.readInt()]; int dirOrdinal = buf.readInt();
Dir dir = Dir.values()[dirOrdinal];
boolean moving = buf.readBoolean(); boolean moving = buf.readBoolean();
Group group = Group.values()[buf.readInt()]; int groupOrdinal = buf.readInt();
Group g = Group.values()[groupOrdinal];
UUID uuid = new UUID(buf.readLong(), buf.readLong()); UUID uuid = new UUID(buf.readLong(), buf.readLong());
assertEquals(5, x); assertEquals(5, x);
assertEquals(10, y); assertEquals(10, y);
assertEquals(Dir.DOWN, dir); assertEquals(Dir.DOWN, dir);
assertEquals(true, moving); assertEquals(true, moving);
assertEquals(Group.BAD, group); assertEquals(Group.BAD, g);
assertEquals(id, uuid); assertEquals(id, uuid);
} }
@Test @Test
void decode() { void testDecoder() {
EmbeddedChannel embeddedChannel = new EmbeddedChannel(); EmbeddedChannel ch = new EmbeddedChannel();
UUID id = UUID.randomUUID(); UUID id = UUID.randomUUID();
TankJoinMessage message = new TankJoinMessage(5, 10, Dir.DOWN, true, Group.BAD, id); TankJoinMessage message = new TankJoinMessage(5, 10, Dir.DOWN, true, Group.BAD, id);
embeddedChannel.pipeline().addLast(new MessageDecoder()); ch.pipeline()
.addLast(new MessageDecoder());
ByteBuf buf = Unpooled.buffer(); ByteBuf buf = Unpooled.buffer();
buf.writeInt(MessageType.TankJoin.ordinal()); buf.writeInt(MessageType.TankJoin.ordinal());
byte[] data = message.toBytes(); byte[] bytes = message.toBytes();
buf.writeInt(data.length); buf.writeInt(bytes.length);
buf.writeBytes(data); buf.writeBytes(bytes);
ch.writeInbound(buf.duplicate());
TankJoinMessage msg = (TankJoinMessage) ch.readInbound();
embeddedChannel.writeInbound(buf.duplicate());
TankJoinMessage msg = embeddedChannel.readInbound();
assertEquals(5, msg.x); assertEquals(5, msg.x);
assertEquals(10, msg.y); assertEquals(10, msg.y);
@ -71,4 +78,6 @@ class TankJoinMessageCoderTest {
assertEquals(Group.BAD, msg.group); assertEquals(Group.BAD, msg.group);
assertEquals(id, msg.id); assertEquals(id, msg.id);
} }
} }

@ -13,17 +13,20 @@ import static org.junit.jupiter.api.Assertions.*;
class TankStartMovingMessageTest { class TankStartMovingMessageTest {
@Test @Test
void encode() { void testEncoder() {
EmbeddedChannel embeddedChannel = new EmbeddedChannel(); EmbeddedChannel ch = new EmbeddedChannel();
UUID id = UUID.randomUUID(); UUID id = UUID.randomUUID();
Message message = new TankDirChangedMessage(id, 5, 10, Dir.LEFT);
ch.pipeline()
.addLast(new MessageEncoder());
TankStartMovingMessage message = new TankStartMovingMessage(id, 5, 10, Dir.LEFT); ch.writeOutbound(message);
embeddedChannel.pipeline().addLast(new MessageEncoder());
embeddedChannel.writeOutbound(message);
ByteBuf buf = embeddedChannel.readOutbound(); ByteBuf buf = (ByteBuf)ch.readOutbound();
MessageType messageType = MessageType.values()[buf.readInt()]; MessageType messageType = MessageType.values()[buf.readInt()];
assertEquals(MessageType.TankStartMoving, messageType); assertEquals(MessageType.TankDirChanged, messageType);
int length = buf.readInt(); int length = buf.readInt();
assertEquals(28, length); assertEquals(28, length);
@ -31,38 +34,38 @@ class TankStartMovingMessageTest {
UUID uuid = new UUID(buf.readLong(), buf.readLong()); UUID uuid = new UUID(buf.readLong(), buf.readLong());
int x = buf.readInt(); int x = buf.readInt();
int y = buf.readInt(); int y = buf.readInt();
Dir dir = Dir.values()[buf.readInt()]; int dirOrdinal = buf.readInt();
Dir dir = Dir.values()[dirOrdinal];
assertEquals(5, x); assertEquals(5, x);
assertEquals(10, y); assertEquals(10, y);
assertEquals(Dir.LEFT, dir); assertEquals(Dir.LEFT, dir);
assertEquals(id, uuid); assertEquals(id, uuid);
} }
@Test @Test
void decode() { void testDecoder() {
EmbeddedChannel embeddedChannel = new EmbeddedChannel(); EmbeddedChannel ch = new EmbeddedChannel();
UUID id = UUID.randomUUID(); UUID id = UUID.randomUUID();
TankStartMovingMessage message = new TankStartMovingMessage(id, 5, 10, Dir.LEFT); TankDirChangedMessage message = new TankDirChangedMessage(id, 5, 10, Dir.LEFT);
embeddedChannel.pipeline().addLast(new MessageDecoder()); ch.pipeline()
.addLast(new MessageDecoder());
ByteBuf buf = Unpooled.buffer(); ByteBuf buf = Unpooled.buffer();
buf.writeInt(MessageType.TankStartMoving.ordinal()); buf.writeInt(MessageType.TankDirChanged.ordinal());
byte[] data = message.toBytes(); byte[] bytes = message.toBytes();
buf.writeInt(data.length); buf.writeInt(bytes.length);
buf.writeBytes(data); buf.writeBytes(bytes);
embeddedChannel.writeInbound(buf.duplicate()); ch.writeInbound(buf.duplicate());
TankStartMovingMessage msg = (TankStartMovingMessage)embeddedChannel.readInbound(); TankDirChangedMessage msgR = (TankDirChangedMessage)ch.readInbound();
assertEquals(5, msg.x); assertEquals(5, msgR.getX());
assertEquals(10, msg.y); assertEquals(10, msgR.getY());
assertEquals(Dir.LEFT, msg.dir); assertEquals(Dir.LEFT, msgR.getDir());
assertEquals(id, msg.id); assertEquals(id, msgR.getId());
} }
} }
Loading…
Cancel
Save