Skip to content

Commit

Permalink
added ServerQueryMessage.STATUS, and added ServerStatusMessage in res…
Browse files Browse the repository at this point in the history
…ponse to that
  • Loading branch information
Zomis committed Sep 1, 2015
1 parent d7fa137 commit 5c27c82
Show file tree
Hide file tree
Showing 3 changed files with 96 additions and 6 deletions.
Expand Up @@ -15,7 +15,9 @@ public class ServerQueryMessage extends Message {
* <li>DECK_BUILDER : Request the deck builder, which queries information both server-side (card sets) and client-side (saved decks).
*/
public enum Request {
USERS, DECK_BUILDER;
USERS,
DECK_BUILDER,
STATUS,
}

private final Request request;
Expand Down
@@ -0,0 +1,73 @@
package com.cardshifter.api.outgoing;

import com.cardshifter.api.messages.Message;

import java.util.Arrays;

/** Message reporting server status. Sent in response to ServerQueryMessage.Request.STATUS */
public class ServerStatusMessage extends Message {

private int users;
private int ais;
private int games;
private String[] mods;

/** Constructor. (no params) */
public ServerStatusMessage() {
this(0, 0, 0, new String[]{});
}

/**
* Constructor.
* @param users Number of online users (excluding AIs)
* @param ais Number of AIs available to play with
* @param games Number of games currently running
* @param mods Names of the available mods
*/
public ServerStatusMessage(int users, int ais, int games, String[] mods) {
super("status");
this.users = users;
this.ais = ais;
this.games = games;
this.mods = mods;
}

/**
* @return Number of available AIs
*/
public int getAis() {
return ais;
}

/**
* @return Number of games running
*/
public int getGames() {
return games;
}

/**
* @return The number of online users (excluding AIs)
*/
public int getUsers() {
return users;
}

/**
* @return The names of the available mods
*/
public String[] getMods() {
return Arrays.copyOf(mods, mods.length);
}

/** @return This message as converted to String */
@Override
public String toString() {
return "ServerStatusMessage{" +
"users=" + users +
", ais=" + ais +
", games=" + games +
", mods=" + Arrays.toString(mods) +
'}';
}
}
@@ -1,11 +1,18 @@
package com.cardshifter.server.model;

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Predicate;
import java.util.stream.Collectors;

import com.cardshifter.ai.FakeAIClientTCG;
import com.cardshifter.api.*;
import com.cardshifter.api.outgoing.*;
import com.cardshifter.core.username.*;
import com.cardshifter.server.clients.ClientSocketHandler;
import com.cardshifter.server.clients.ClientWebSocket;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

Expand All @@ -17,12 +24,7 @@
import com.cardshifter.api.incoming.ServerQueryMessage;
import com.cardshifter.api.incoming.StartGameRequest;
import com.cardshifter.api.incoming.UseAbilityMessage;
import com.cardshifter.api.outgoing.AvailableModsMessage;
import com.cardshifter.api.outgoing.ServerErrorMessage;
import com.cardshifter.api.outgoing.UserStatusMessage;
import com.cardshifter.api.outgoing.UserStatusMessage.Status;
import com.cardshifter.api.outgoing.WaitMessage;
import com.cardshifter.api.outgoing.WelcomeMessage;
import com.cardshifter.core.game.FakeClient;
import com.cardshifter.core.game.ServerGame;
import com.cardshifter.core.game.TCGGame;
Expand Down Expand Up @@ -58,6 +60,19 @@ public void query(ServerQueryMessage message, ClientIO client) {
}

break;
case STATUS:
List<ClientIO> clients = server.getClients().values().stream()
.collect(Collectors.toList());
Predicate<ClientIO> aiFilter = cl -> cl instanceof FakeAIClientTCG;
int ais = (int) clients.stream().filter(aiFilter).count();
int users = (int) clients.stream()
.filter(cl -> cl instanceof ClientWebSocket || cl instanceof ClientSocketHandler)
.count();

int games = server.getGames().size();
String[] mods = (String[]) server.getGameFactories().keySet().stream().toArray();
client.sendToClient(new ServerStatusMessage(users, ais, games, mods));
break;
default:
client.sendToClient(new ServerErrorMessage("No such query request"));
break;
Expand Down

0 comments on commit 5c27c82

Please sign in to comment.