Skip to content

Commit

Permalink
Two clients are able to connect and start a game, but crashes on startup
Browse files Browse the repository at this point in the history
  • Loading branch information
Zomis committed Sep 3, 2014
1 parent ea8b838 commit 989e3e0
Show file tree
Hide file tree
Showing 29 changed files with 274 additions and 66 deletions.
20 changes: 10 additions & 10 deletions cardshifter-api/client-server-documentation.txt
@@ -1,17 +1,17 @@
Examples of client-server JSON commands:

CLI: command: login, user: name, TODO: password: hashed
SER: command: login, status: 200, response: OK
SER: command: login, status: 404, response: Wrong username or password
CLI: LoginMessage command: login, user: name, TODO: password: hashed
SER: WelcomeMessage command: login, status: 200, response: OK
SER: WelcomeMessage command: login, status: 404, response: Wrong username or password

CLI: command: play, mod: vanilla
SER: command: wait, message: Looking for opponent
CLI: StartGameRequest command: play, mod: vanilla
SER: WaitMessage command: play, message: Looking for opponent

SER: command: game, gameid: 42, opponent: { name: Bubu, rating: 4200 }
SER: command: player, name: 'Player1', hp: 42
SER: command: player, name: 'Bubu', hp: 23
SER: command: zone, name: 'Deck', owner: 0, id: 7, (playerIndex), size: 42, hidden: true
SER: command: card, zone: 'Hand', owner: 0, id: 3, name: 'Biofsd', power: 3, health: 4, cardType: 'Creature', creatureType: 'B0T'
SER: GameMessage command: game, gameid: 42, opponent: { name: Bubu, rating: 4200 }
SER: PlayerMessage command: player, name: 'Player1', hp: 42
SER: PlayerMessage command: player, name: 'Bubu', hp: 23
SER: ZoneMessage command: zone, name: 'Deck', owner: 0, id: 7, (playerIndex), size: 42, hidden: true
SER: CardMessage command: card, zone: 'Hand', owner: 0, id: 3, name: 'Biofsd', power: 3, health: 4, cardType: 'Creature', creatureType: 'B0T'

? CLI: command: choices
? SER: command: action, card: 4, ability: 'Use', targets: { 6, 8, 12, 3 }
Expand Down
13 changes: 12 additions & 1 deletion cardshifter-api/pom.xml
Expand Up @@ -27,5 +27,16 @@
</plugin>
</plugins>
</build>

<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.4.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.1.1</version>
</dependency>
</dependencies>
</project>
@@ -1,4 +1,5 @@
package com.cardshifter.server.incoming;
package com.cardshifter.server.abstr;



public abstract class CardMessage extends RequestMessage {
Expand Down
@@ -1,4 +1,6 @@
package com.cardshifter.server.incoming;
package com.cardshifter.server.abstr;

import com.cardshifter.server.messages.Message;


public abstract class RequestMessage extends Message {
Expand Down
@@ -1,5 +1,7 @@
package com.cardshifter.server.incoming;

import com.cardshifter.server.messages.Message;


public class ChatMessage extends Message {

Expand Down
@@ -1,5 +1,7 @@
package com.cardshifter.server.incoming;

import com.cardshifter.server.messages.Message;

public class LoginMessage extends Message {

private String username;
Expand Down

This file was deleted.

@@ -1,5 +1,6 @@
package com.cardshifter.server.incoming;

import com.cardshifter.server.abstr.CardMessage;

public class PlayCardMessage extends CardMessage {

Expand Down
@@ -0,0 +1,11 @@
package com.cardshifter.server.incoming;

import com.cardshifter.server.messages.Message;

public class StartGameRequest extends Message {

public StartGameRequest() {
super("startgame");
}

}
@@ -1,5 +1,7 @@
package com.cardshifter.server.incoming;

import com.cardshifter.server.abstr.CardMessage;


public class UseAbilityMessage extends CardMessage {

Expand Down
@@ -0,0 +1,21 @@
package com.cardshifter.server.messages;

import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
import com.fasterxml.jackson.annotation.JsonTypeInfo.Id;
import com.fasterxml.jackson.databind.annotation.JsonTypeIdResolver;

@JsonTypeInfo(use = Id.CUSTOM, property = "command", include = As.PROPERTY)
@JsonTypeIdResolver(MessageTypeIdResolver.class)
public abstract class Message {

private final String command;

public Message(String string) {
this.command = string;
}

public final String getCommand() {
return command;
}
}
@@ -0,0 +1,87 @@
package com.cardshifter.server.messages;

import java.util.HashMap;
import java.util.Map;

import com.cardshifter.server.incoming.ChatMessage;
import com.cardshifter.server.incoming.LoginMessage;
import com.cardshifter.server.incoming.PlayCardMessage;
import com.cardshifter.server.incoming.StartGameRequest;
import com.cardshifter.server.incoming.UseAbilityMessage;
import com.cardshifter.server.outgoing.EndOfSequenceMessage;
import com.cardshifter.server.outgoing.GameMessage;
import com.cardshifter.server.outgoing.NewGameMessage;
import com.cardshifter.server.outgoing.WaitMessage;
import com.cardshifter.server.outgoing.WelcomeMessage;
import com.fasterxml.jackson.annotation.JsonTypeInfo.Id;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.jsontype.TypeIdResolver;
import com.fasterxml.jackson.databind.type.TypeFactory;

public class MessageTypeIdResolver implements TypeIdResolver {

private static final Map<String, Class<? extends Message>> clazzes = new HashMap<>();

static {
clazzes.put("chat", ChatMessage.class);
clazzes.put("login", LoginMessage.class);
clazzes.put("play", PlayCardMessage.class);
clazzes.put("startgame", StartGameRequest.class);
clazzes.put("use", UseAbilityMessage.class);

clazzes.put("eosq", EndOfSequenceMessage.class);
clazzes.put("game", GameMessage.class);
clazzes.put("wait", WaitMessage.class);
clazzes.put("loginresponse", WelcomeMessage.class);
clazzes.put("newgame", NewGameMessage.class);
}

private JavaType mBaseType;

@Override
public void init(JavaType baseType) {
mBaseType = baseType;
}

@Override
public Id getMechanism() {
return Id.CUSTOM;
}

@Override
public String idFromValue(Object obj) {
return idFromValueAndType(obj, obj.getClass());
}

@Override
public String idFromBaseType() {
return idFromValueAndType(null, mBaseType.getRawClass());
}

@Override
public String idFromValueAndType(Object obj, Class<?> clazz) {
// String name = clazz.getName();
// if (name.startsWith(COMMAND_PACKAGE)) {
// return name.substring(COMMAND_PACKAGE.length() + 1);
// }
// throw new IllegalStateException("class " + clazz
// + " is not in the package " + COMMAND_PACKAGE);
Message mess = (Message) obj;
return mess.getCommand();
}

@Override
public JavaType typeFromId(String type) {
Class<?> clazz = clazzes.get(type);
// String clazzName = COMMAND_PACKAGE + "." + type;
// try {
// clazz = ClassUtil.findClass(clazzName);
// } catch (ClassNotFoundException e) {
// throw new IllegalStateException("cannot find class '" + clazzName + "'");
// }
if (clazz == null) {
throw new UnsupportedOperationException("No such defined type: " + type);
}
return TypeFactory.defaultInstance().constructSpecializedType(mBaseType, clazz);
}
}
@@ -0,0 +1,11 @@
package com.cardshifter.server.outgoing;

import com.cardshifter.server.messages.Message;

public class EndOfSequenceMessage extends Message {

public EndOfSequenceMessage() {
super("eosq");
}

}
@@ -0,0 +1,12 @@
package com.cardshifter.server.outgoing;

import com.cardshifter.server.messages.Message;

public class GameMessage extends Message {

public GameMessage() {
super("game");

}

}
@@ -0,0 +1,29 @@
package com.cardshifter.server.outgoing;

import com.cardshifter.server.messages.Message;
import com.fasterxml.jackson.annotation.JsonCreator;

public class NewGameMessage extends Message {

private final int gameId;
private final int playerIndex;

@JsonCreator
NewGameMessage() {
this(0, 0);
}
public NewGameMessage(int gameId, int playerIndex) {
super("newgame");
this.gameId = gameId;
this.playerIndex = playerIndex;
}

public int getGameId() {
return gameId;
}

public int getPlayerIndex() {
return playerIndex;
}

}
@@ -1,6 +1,6 @@
package com.cardshifter.server.outgoing;

import com.cardshifter.server.incoming.Message;
import com.cardshifter.server.messages.Message;

public class WaitMessage extends Message {

Expand Down
@@ -1,18 +1,21 @@
package com.cardshifter.server.outgoing;

import com.cardshifter.server.incoming.Message;
import com.cardshifter.server.messages.Message;
import com.fasterxml.jackson.annotation.JsonIgnore;

public class WelcomeMessage extends Message {

private static final int STATUS_OK = 200;

private final int status;
private final String message;

WelcomeMessage() {
this(true);
}
public WelcomeMessage(boolean success) {
super("login");
this.status = success ? 200 : 404;
super("loginresponse");
this.status = success ? STATUS_OK : 404;
this.message = success ? "OK" : "Wrong username or password";
}

Expand All @@ -23,4 +26,9 @@ public String getMessage() {
public int getStatus() {
return status;
}

@JsonIgnore
public boolean isOK() {
return this.status == STATUS_OK;
}
}

0 comments on commit 989e3e0

Please sign in to comment.