UPPPP FINISH

This commit is contained in:
Lorenzo Iovino 2017-07-14 00:46:37 +02:00
parent e1622dfaa1
commit ab307b0a97
24 changed files with 857 additions and 526 deletions

1083
.idea/workspace.xml generated

File diff suppressed because it is too large Load diff

View file

@ -27,6 +27,7 @@ public class GameService {
public DefaultListModel<Pair<String,Integer>> globalRanks = new DefaultListModel<>();
public DefaultListModel<Pair<String,Integer>> ranks = new DefaultListModel<>();
private Boolean gameIsStarted = false;
public Boolean isWaiting = false;
private void addToPendingList(String username) throws IOException {
pendingList.addElement(username);
@ -44,7 +45,7 @@ public class GameService {
e.printStackTrace();
}
if(!App.gameService.gameIsStarted) {
if(!App.gameService.gameIsStarted && !App.gameService.isWaiting) {
//Show invite popup
new TTDialog("success", "New invite from: " + userName + "!",
new Callable() {

View file

@ -28,6 +28,7 @@ public class WaitForPlayers extends SwingWorker<Void,Void> {
@Override
public Void doInBackground() {
try {
App.gameService.isWaiting = true;
ByteBuffer buffer = ByteBuffer.allocate(1024);
TTDialog loading = new TTDialog("alert", "Waiting for users joins",null,null);
buffer.flip();
@ -42,6 +43,7 @@ public class WaitForPlayers extends SwingWorker<Void,Void> {
Message msg = Message.toMessage(line);
if (msg.message.equals("JOIN_TIMEOUT")) {
loading.dispose();
App.gameService.isWaiting = false;
joinTimeout = true;
new TTDialog("alert", "TIMEOUT!",
@ -58,6 +60,7 @@ public class WaitForPlayers extends SwingWorker<Void,Void> {
if (msg.message.equals("MATCH_NOT_AVAILABLE")) {
loading.dispose();
joinTimeout = true;
App.gameService.isWaiting = false;
new TTDialog("alert", "THE GAME IS NOT MORE AVAILABLE!",
new Callable() {
@ -72,6 +75,7 @@ public class WaitForPlayers extends SwingWorker<Void,Void> {
if (msg.message.equals("GAME_STARTED")) {
loading.dispose();
App.gameService.isWaiting = false;
if(msg.data !=null ) {
DefaultListModel<String> data = msg.data;

View file

@ -23,9 +23,9 @@ public class Config {
public static String RedisServerURI = "localhost";
public static int gameTimeout = 10; //2 minuti in sec
public static int joinMatchTimeout = 5000; //7 minuti in millisec
public static int sendWordsTimeout = 3000; //5 minuti in millisec
public static int gameTimeout = 120; //2 minuti in sec
public static int joinMatchTimeout = 7*1000*60; //7 minuti in millisec
public static int sendWordsTimeout = 5*1000*60; //5 minuti in millisec
public static String getAuthServerURI(){
return "rmi://".concat(AuthServerURI).concat(":").concat(AuthServerPort.toString());

View file

@ -9,5 +9,5 @@ import java.rmi.RemoteException;
*/
public interface INotificationServer extends Remote {
void registerForCallback (INotificationClient ClientInterface) throws RemoteException;
void unregisterForCallback (INotificationClient ClientInterface) throws RemoteException;
void unregisterForCallback (INotificationClient ClientInterface) throws RemoteException;
}

View file

@ -42,8 +42,8 @@ public class Server {
private void startAuthService(){
//Starting Auth service based on RMI
try {
auth = new AuthService(Config.AuthServerPort);
Registry authRegistry = LocateRegistry.createRegistry(auth.serverPort);
auth = new AuthService();
Registry authRegistry = LocateRegistry.createRegistry(Config.AuthServerPort);
authRegistry.bind("auth", auth);
} catch (RemoteException e) {
Server.logger.write("SERVER: RMI authentication service error (Remote exception)");

View file

@ -13,7 +13,7 @@ import java.util.concurrent.*;
/**
* Author: Lorenzo Iovino on 18/06/2017.
* Description: Proxy Dispatcher
* Description: Message Dispatcher
* */
public class MessageDispatcher implements Callable<Boolean> {
private final ExecutorService threadPool = Executors.newCachedThreadPool();

View file

@ -1,6 +1,7 @@
package com.texttwist.server.services;
import com.texttwist.server.Server;
import constants.Config;
import interfaces.IAuth;
import interfaces.INotificationClient;
import models.Response;
@ -19,12 +20,9 @@ import static com.texttwist.server.Server.notificationServer;
public class AuthService extends UnicastRemoteObject implements IAuth {
private SecureRandom random = new SecureRandom();
public int serverPort = 9999;
public AuthService(int serverPort) throws RemoteException{
this.serverPort=serverPort;
Server.logger.write("AuthService Service running at "+serverPort+" port...");
public AuthService() throws RemoteException{
Server.logger.write("AuthService Service running at "+ Config.AuthServerPort+" port...");
}
@Override

View file

@ -1,5 +1,6 @@
package com.texttwist.server.services;
import com.texttwist.server.Server;
import models.User;
import redis.clients.jedis.Jedis;
@ -16,6 +17,11 @@ import static com.texttwist.server.Server.jedisPool;
*/
public class JedisService {
JedisService(){
Server.logger.write("Jedis Service running on localhost...");
}
/** Read the object from Base64 string. */
public static Object fromString(String s) throws IOException, ClassNotFoundException {
byte [] data = Base64.getDecoder().decode(s);

View file

@ -1,5 +1,7 @@
package com.texttwist.server.services;
import com.texttwist.server.Server;
import constants.Config;
import interfaces.INotificationClient;
import interfaces.INotificationServer;
@ -12,13 +14,14 @@ import java.util.List;
/**
* Author: Lorenzo Iovino on 19/06/2017.
* Description: Jedis Service
* Description: Notification Service
*/
public class NotificationService implements INotificationServer {
private List<INotificationClient> clients;
public NotificationService() throws RemoteException {
super();
Server.logger.write("Notification Service running at "+ Config.NotificationServerPort+" port...");
clients = new ArrayList<>();
}

View file

@ -1,34 +1,29 @@
package com.texttwist.server.services;
import com.texttwist.server.Server;
import com.texttwist.server.models.Match;
import com.texttwist.server.tasks.ComputeScore;
import com.texttwist.server.tasks.TokenInvalid;
import constants.Config;
import models.Message;
import java.io.IOException;
import java.net.*;
import java.nio.ByteBuffer;
import java.nio.channels.DatagramChannel;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* Author: Lorenzo Iovino on 27/06/2017.
* Description: Jedis Service
* Description: Receive Words Service
*/
public class ReceiveWordsService implements Runnable {
private ExecutorService threadPool = Executors.newCachedThreadPool();
public ReceiveWordsService() {
Server.logger.write("ReceiveWords Service running at "+Config.WordsReceiverServerPort+" port...");
}
@Override
public void run(){
Message msg;
DatagramSocket s = null;
@ -40,7 +35,6 @@ public class ReceiveWordsService implements Runnable {
DatagramPacket packet;
while(true) {
byte[] buf = new byte[1024];
packet = new DatagramPacket(buf, buf.length);

View file

@ -33,8 +33,6 @@ public class SessionsService {
return null;
}
public SessionsService(){}
public boolean add(String userName, String token) {
remove(userName);
return sessions.add(new Session(new User(userName,"",0), token));

View file

@ -1,13 +1,12 @@
package com.texttwist.server.tasks;
import com.texttwist.server.services.SessionsService;
import javax.swing.*;
import java.util.concurrent.Callable;
/**
* Author: Lorenzo Iovino on 19/06/2017.
* Description: Jedis Service
* Description: Task: Check Online Users
*/
public class CheckOnlineUsers implements Callable<Boolean> {
private final DefaultListModel<String> users;

View file

@ -10,12 +10,10 @@ import java.util.concurrent.Callable;
/**
* Author: Lorenzo Iovino on 28/06/2017.
* Description: Jedis Service
* Description: Task: Compute Highscores
*/
public class ComputeHighscores implements Callable<DefaultListModel<String>> {
public ComputeHighscores(){}
@Override
public DefaultListModel<String> call() throws Exception {
DefaultListModel<String> l = new DefaultListModel<>();

View file

@ -1,23 +1,22 @@
package com.texttwist.server.tasks;
import com.texttwist.server.services.AccountsService;
import com.texttwist.server.models.Dictionary;
import com.texttwist.server.models.Match;
import javafx.util.Pair;
import models.User;
import javax.swing.*;
import java.util.concurrent.Callable;
/**
* Author: Lorenzo Iovino on 27/06/2017.
* Description: Jedis Service
* Description: Task: Ccmpute Score
*/
public class ComputeScore implements Callable<Integer> {
private DefaultListModel<String> words;
private final String sender;
public Match match;
private DefaultListModel<String> wordsValid;
private DefaultListModel<String> wordsValid = new DefaultListModel<>();
public ComputeScore(String sender, DefaultListModel<String> words, Match match){
this.words = words;
@ -27,26 +26,24 @@ public class ComputeScore implements Callable<Integer> {
@Override
public Integer call() throws Exception {
wordsValid = new DefaultListModel<>();
Integer score = 0;
for (int i = 0; i < words.size(); i++) {
if (isValid(words.get(i), match.letters)) {
score += words.get(i).length();
wordsValid.addElement(words.get(i));
}
Integer score = 0;
for (int i = 0; i < words.size(); i++) {
if (isValid(words.get(i), match.letters)) {
score += words.get(i).length();
wordsValid.addElement(words.get(i));
}
match.setScore(sender, score);
}
match.setScore(sender, score);
User u = AccountsService.getInstance().findUser(sender);
u.addScore(score);
User u = AccountsService.getInstance().findUser(sender);
u.addScore(score);
if(match.allPlayersSendedHisScore()) {
match.matchTimeout = false;
match.setUndefinedScorePlayersToZero();
new SendScores(match).call();
}
return score;
if(match.allPlayersSendedHisScore()) {
match.matchTimeout = false;
match.setUndefinedScorePlayersToZero();
new SendScores(match).call();
}
return score;
}
private Boolean isValid(String word, DefaultListModel<String> letters) {

View file

@ -1,24 +1,18 @@
package com.texttwist.server.tasks;
import com.texttwist.server.services.MessageService;
import javax.swing.*;
import java.util.concurrent.Callable;
/**
* Author: Lorenzo Iovino on 25/06/2017.
* Description: Jedis Service
* Description: Task: Generate Letters
*/
public class GenerateLetters implements Callable<DefaultListModel<String>> {
public GenerateLetters(){
}
@Override
public DefaultListModel<String> call() throws Exception {
DefaultListModel<String> l = new DefaultListModel<String>();
DefaultListModel<String> l = new DefaultListModel<>();
String word = MessageService.dict.getRandomWord(6, 7);
for (int i = 0;i < word.length(); i++){

View file

@ -8,12 +8,12 @@ import java.util.concurrent.Callable;
/**
* Author: Lorenzo Iovino on 23/06/2017.
* Description: Jedis Service
* Description: Task: Join Match
*/
public class JoinMatch implements Callable<Boolean> {
public final String matchName;
public final String playerName;
public final SocketChannel socketChannel;
private final String matchName;
private final String playerName;
private final SocketChannel socketChannel;
public JoinMatch(String playerName, DefaultListModel<String> matchName, SocketChannel socketChannel) {
this.playerName = playerName;
@ -24,19 +24,19 @@ public class JoinMatch implements Callable<Boolean> {
@Override
public Boolean call() throws Exception {
final Match thisMatch = Match.findMatch(Match.activeMatches, this.matchName);
if (thisMatch != null) {
for (int j = 0; j < thisMatch.playersStatus.size(); j++) {
String name = thisMatch.playersStatus.get(j).getKey();
if (name.equals(playerName)) {
thisMatch.playersStatus.remove(j);
thisMatch.playersStatus.add(new Pair<>(name, 1));
thisMatch.playersSocket.remove(j);
thisMatch.playersSocket.add(new Pair<>(name, socketChannel));
return allJoined(thisMatch);
}
if (thisMatch != null) {
for (int j = 0; j < thisMatch.playersStatus.size(); j++) {
String name = thisMatch.playersStatus.get(j).getKey();
if (name.equals(playerName)) {
thisMatch.playersStatus.remove(j);
thisMatch.playersStatus.add(new Pair<>(name, 1));
thisMatch.playersSocket.remove(j);
thisMatch.playersSocket.add(new Pair<>(name, socketChannel));
return allJoined(thisMatch);
}
}
return false;
}
return false;
}
private Boolean allJoined(Match match) {

View file

@ -1,9 +1,12 @@
package com.texttwist.server.tasks;
import com.texttwist.server.models.Match;
import constants.Config;
import java.util.concurrent.*;
/**
* Created by loke on 23/06/2017.
* Author: Lorenzo Iovino on 23/06/2017.
* Description: Task: Join Timeout
*/
public class JoinTimeout implements Callable<Boolean> {
@ -11,14 +14,13 @@ public class JoinTimeout implements Callable<Boolean> {
public JoinTimeout(Match match) {
this.match = match;
}
@Override
public Boolean call() throws Exception {
try {
match.joinTimeout=true;
Thread.currentThread().sleep(5000);
match.joinTimeout = true;
Thread.currentThread().sleep(Config.joinMatchTimeout);
if(match.joinTimeout) {
match.joinTimeout = false;

View file

@ -2,12 +2,11 @@ package com.texttwist.server.tasks;
import com.texttwist.server.models.Match;
import constants.Config;
import java.util.concurrent.Callable;
/**
* Author: Lorenzo Iovino on 27/06/2017.
* Description: Jedis Service
* Description: Task: Match Timeout
*/
public class MatchTimeout implements Callable<Boolean> {

View file

@ -1,13 +1,12 @@
package com.texttwist.server.tasks;
import com.texttwist.server.Server;
import javax.swing.*;
import java.util.concurrent.Callable;
/**
* Author: Lorenzo Iovino on 19/06/2017.
* Description: Jedis Service
* Description: Task: Send Invitations
*/
public class SendInvitations implements Callable<Boolean> {
private DefaultListModel<String> users;
@ -22,11 +21,9 @@ public class SendInvitations implements Callable<Boolean> {
public Boolean call() throws Exception {
try {
Server.notificationServer.sendInvitations(sender, users);
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
}

View file

@ -2,22 +2,21 @@ package com.texttwist.server.tasks;
import com.texttwist.server.models.Match;
import models.Message;
import javax.swing.*;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
import java.util.concurrent.Callable;
/**
* Author: Lorenzo Iovino on 27/06/2017.
* Description: Jedis Service
* Description: Task: Send Message To All Players
*/
public class SendMessageToAllPlayers implements Callable<Boolean> {
public final Match match;
public final Message message;
public SocketChannel socketChannel;
private final Message message;
private SocketChannel socketChannel;
public SendMessageToAllPlayers(Match match, Message message, SocketChannel socketChannel){
this.match = match;
this.message = message;
@ -37,10 +36,8 @@ public class SendMessageToAllPlayers implements Callable<Boolean> {
buffer = ByteBuffer.wrap(byteMessage);
socketChannel.write(buffer);
}
}
return false;
} else {
return true;
}

View file

@ -11,7 +11,8 @@ import java.net.MulticastSocket;
import java.util.concurrent.Callable;
/**
* Created by loke on 13/07/2017.
* Author: Lorenzo Iovino on 13/07/2017.
* Description: Task: Send Scores
*/
public class SendScores implements Callable<Void> {
@ -24,19 +25,17 @@ public class SendScores implements Callable<Void> {
@Override
public Void call() throws Exception {
while (true) {
Message msg = new Message("FINALSCORE", "SERVER", "", match.getMatchPlayersScoreAsStringList());
MulticastSocket multicastSocket = null;
try {
multicastSocket = new MulticastSocket(match.multicastId);
InetAddress ia = InetAddress.getByName(Config.ScoreMulticastServerURI);
DatagramPacket hi = new DatagramPacket(msg.toString().getBytes(), msg.toString().length(), ia, match.multicastId);
multicastSocket.send(hi);
} catch (IOException e) {
e.printStackTrace();
}
Match.activeMatches.remove(Match.findMatchIndex(Match.activeMatches, match.matchCreator));
return null;
Message msg = new Message("FINALSCORE", "SERVER", "", match.getMatchPlayersScoreAsStringList());
MulticastSocket multicastSocket = null;
try {
multicastSocket = new MulticastSocket(match.multicastId);
InetAddress ia = InetAddress.getByName(Config.ScoreMulticastServerURI);
DatagramPacket hi = new DatagramPacket(msg.toString().getBytes(), msg.toString().length(), ia, match.multicastId);
multicastSocket.send(hi);
} catch (IOException e) {
e.printStackTrace();
}
Match.activeMatches.remove(Match.findMatchIndex(Match.activeMatches, match.matchCreator));
return null;
}
}

View file

@ -10,7 +10,7 @@ import java.util.concurrent.Callable;
/**
* Author: Lorenzo Iovino on 11/07/2017.
* Description: Task: Token Invalid Service
* Description: Task: Token Invalid
*/
public class TokenInvalid implements Callable<Boolean> {
private String sender;

View file

@ -1884,3 +1884,105 @@ LOGGER (Server): Fri Jul 14 00:05:27 CEST 2017 - Invoked login with username=c A
LOGGER (Server): Fri Jul 14 00:05:27 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:05:31 CEST 2017 - Invoked login with username=d AND password=d
LOGGER (Server): Fri Jul 14 00:05:31 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:07:15 CEST 2017 - Services starting ...
LOGGER (Server): Fri Jul 14 00:07:15 CEST 2017 - AuthService Service running at 9999 port...
LOGGER (Server): Fri Jul 14 00:07:15 CEST 2017 - GameService Service is running at 10000 port...
LOGGER (Server): Fri Jul 14 00:07:15 CEST 2017 - Services started correctly ...
LOGGER (Server): Fri Jul 14 00:10:48 CEST 2017 - Services starting ...
LOGGER (Server): Fri Jul 14 00:10:48 CEST 2017 - AuthService Service running at 9999 port...
LOGGER (Server): Fri Jul 14 00:10:48 CEST 2017 - GameService Service is running at 10000 port...
LOGGER (Server): Fri Jul 14 00:10:48 CEST 2017 - ReceiveWords Service running at 10001 port...
LOGGER (Server): Fri Jul 14 00:10:48 CEST 2017 - Notification Service running at 20000 port...
LOGGER (Server): Fri Jul 14 00:10:48 CEST 2017 - Services started correctly ...
LOGGER (Server): Fri Jul 14 00:10:59 CEST 2017 - Invoked login with username=a AND password=a
LOGGER (Server): Fri Jul 14 00:10:59 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:11:02 CEST 2017 - Invoked login with username=b AND password=b
LOGGER (Server): Fri Jul 14 00:11:02 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:11:25 CEST 2017 - Invoked login with username=c AND password=c
LOGGER (Server): Fri Jul 14 00:11:25 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:11:28 CEST 2017 - Invoked login with username=d AND password=d
LOGGER (Server): Fri Jul 14 00:11:28 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:13:37 CEST 2017 - Services starting ...
LOGGER (Server): Fri Jul 14 00:13:37 CEST 2017 - AuthService Service running at 9999 port...
LOGGER (Server): Fri Jul 14 00:13:38 CEST 2017 - GameService Service is running at 10000 port...
LOGGER (Server): Fri Jul 14 00:13:38 CEST 2017 - ReceiveWords Service running at 10001 port...
LOGGER (Server): Fri Jul 14 00:13:38 CEST 2017 - Notification Service running at 20000 port...
LOGGER (Server): Fri Jul 14 00:13:38 CEST 2017 - Services started correctly ...
LOGGER (Server): Fri Jul 14 00:13:42 CEST 2017 - Invoked login with username=a AND password=a
LOGGER (Server): Fri Jul 14 00:13:42 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:13:48 CEST 2017 - Invoked login with username=b AND password=b
LOGGER (Server): Fri Jul 14 00:13:48 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:14:10 CEST 2017 - Invoked login with username=c AND password=c
LOGGER (Server): Fri Jul 14 00:14:10 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:14:14 CEST 2017 - Invoked login with username=d AND password=d
LOGGER (Server): Fri Jul 14 00:14:14 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:21:35 CEST 2017 - Services starting ...
LOGGER (Server): Fri Jul 14 00:21:35 CEST 2017 - AuthService Service running at 9999 port...
LOGGER (Server): Fri Jul 14 00:21:35 CEST 2017 - GameService Service is running at 10000 port...
LOGGER (Server): Fri Jul 14 00:21:35 CEST 2017 - ReceiveWords Service running at 10001 port...
LOGGER (Server): Fri Jul 14 00:21:35 CEST 2017 - Notification Service running at 20000 port...
LOGGER (Server): Fri Jul 14 00:21:35 CEST 2017 - Services started correctly ...
LOGGER (Server): Fri Jul 14 00:21:47 CEST 2017 - Invoked login with username=a AND password=a
LOGGER (Server): Fri Jul 14 00:21:47 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:21:56 CEST 2017 - Invoked login with username=b AND password=b
LOGGER (Server): Fri Jul 14 00:21:56 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:22:00 CEST 2017 - Invoked login with username=c AND password=c
LOGGER (Server): Fri Jul 14 00:22:00 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:22:03 CEST 2017 - Invoked login with username=d AND password=d
LOGGER (Server): Fri Jul 14 00:22:03 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:23:15 CEST 2017 - Invoked login with username=e AND password=e
LOGGER (Server): Fri Jul 14 00:23:15 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:23:19 CEST 2017 - Invoked login with username=f AND password=f
LOGGER (Server): Fri Jul 14 00:23:19 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:25:05 CEST 2017 - Services starting ...
LOGGER (Server): Fri Jul 14 00:25:05 CEST 2017 - AuthService Service running at 9999 port...
LOGGER (Server): Fri Jul 14 00:25:05 CEST 2017 - GameService Service is running at 10000 port...
LOGGER (Server): Fri Jul 14 00:25:05 CEST 2017 - ReceiveWords Service running at 10001 port...
LOGGER (Server): Fri Jul 14 00:25:05 CEST 2017 - Notification Service running at 20000 port...
LOGGER (Server): Fri Jul 14 00:25:05 CEST 2017 - Services started correctly ...
LOGGER (Server): Fri Jul 14 00:25:11 CEST 2017 - Invoked login with username=a AND password=a
LOGGER (Server): Fri Jul 14 00:25:11 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:25:14 CEST 2017 - Invoked login with username=b AND password=b
LOGGER (Server): Fri Jul 14 00:25:14 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:25:24 CEST 2017 - Invoked login with username=c AND password=c
LOGGER (Server): Fri Jul 14 00:25:24 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:25:31 CEST 2017 - Invoked login with username=d AND password=d
LOGGER (Server): Fri Jul 14 00:25:31 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:25:59 CEST 2017 - Services starting ...
LOGGER (Server): Fri Jul 14 00:25:59 CEST 2017 - AuthService Service running at 9999 port...
LOGGER (Server): Fri Jul 14 00:25:59 CEST 2017 - GameService Service is running at 10000 port...
LOGGER (Server): Fri Jul 14 00:25:59 CEST 2017 - ReceiveWords Service running at 10001 port...
LOGGER (Server): Fri Jul 14 00:25:59 CEST 2017 - Notification Service running at 20000 port...
LOGGER (Server): Fri Jul 14 00:25:59 CEST 2017 - Services started correctly ...
LOGGER (Server): Fri Jul 14 00:26:03 CEST 2017 - Invoked login with username=a AND password=a
LOGGER (Server): Fri Jul 14 00:26:03 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:26:06 CEST 2017 - Invoked login with username=b AND password=b
LOGGER (Server): Fri Jul 14 00:26:06 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:26:15 CEST 2017 - Invoked login with username=c AND password=c
LOGGER (Server): Fri Jul 14 00:26:15 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:29:01 CEST 2017 - Services starting ...
LOGGER (Server): Fri Jul 14 00:29:01 CEST 2017 - AuthService Service running at 9999 port...
LOGGER (Server): Fri Jul 14 00:29:01 CEST 2017 - GameService Service is running at 10000 port...
LOGGER (Server): Fri Jul 14 00:29:01 CEST 2017 - ReceiveWords Service running at 10001 port...
LOGGER (Server): Fri Jul 14 00:29:01 CEST 2017 - Notification Service running at 20000 port...
LOGGER (Server): Fri Jul 14 00:29:01 CEST 2017 - Services started correctly ...
LOGGER (Server): Fri Jul 14 00:29:05 CEST 2017 - Invoked login with username=a AND password=a
LOGGER (Server): Fri Jul 14 00:29:05 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:29:08 CEST 2017 - Invoked login with username=b AND password=b
LOGGER (Server): Fri Jul 14 00:29:08 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:29:12 CEST 2017 - Invoked login with username=c AND password=c
LOGGER (Server): Fri Jul 14 00:29:12 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:34:04 CEST 2017 - Services starting ...
LOGGER (Server): Fri Jul 14 00:34:04 CEST 2017 - AuthService Service running at 9999 port...
LOGGER (Server): Fri Jul 14 00:34:04 CEST 2017 - GameService Service is running at 10000 port...
LOGGER (Server): Fri Jul 14 00:34:04 CEST 2017 - ReceiveWords Service running at 10001 port...
LOGGER (Server): Fri Jul 14 00:34:04 CEST 2017 - Notification Service running at 20000 port...
LOGGER (Server): Fri Jul 14 00:34:04 CEST 2017 - Services started correctly ...
LOGGER (Server): Fri Jul 14 00:34:11 CEST 2017 - Invoked login with username=a AND password=a
LOGGER (Server): Fri Jul 14 00:34:11 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:34:14 CEST 2017 - Invoked login with username=b AND password=b
LOGGER (Server): Fri Jul 14 00:34:14 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:34:17 CEST 2017 - Invoked login with username=c AND password=c
LOGGER (Server): Fri Jul 14 00:34:17 CEST 2017 - Login successfull
LOGGER (Server): Fri Jul 14 00:39:01 CEST 2017 - Invoked login with username=d AND password=d
LOGGER (Server): Fri Jul 14 00:39:01 CEST 2017 - Login successfull