diff --git a/nbactions.xml b/nbactions.xml
index a0cb38e..f53975f 100644
--- a/nbactions.xml
+++ b/nbactions.xml
@@ -1,40 +1,40 @@
-
-
- run
-
- jar
-
-
- clean
- javafx:run
-
-
-
- debug
-
- clean
- javafx:run@ide-debug
-
-
- true
-
-
-
- profile
-
- clean
- javafx:run@ide-profile
-
-
-
- CUSTOM-jlink
- jlink
-
- clean
-
- compile
- javafx:jlink
-
-
-
+
+
+ run
+
+ jar
+
+
+ clean
+ javafx:run
+
+
+
+ debug
+
+ clean
+ javafx:run@ide-debug
+
+
+ true
+
+
+
+ profile
+
+ clean
+ javafx:run@ide-profile
+
+
+
+ CUSTOM-jlink
+ jlink
+
+ clean
+
+ compile
+ javafx:jlink
+
+
+
diff --git a/pom.xml b/pom.xml
index 1847adc..d2433b8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -46,10 +46,9 @@
org.apache.maven.plugins
maven-compiler-plugin
- 3.11.0
+ 3.13.0
- 17
- 17
+ 25
@@ -75,7 +74,8 @@
-
+
@@ -87,4 +87,4 @@
-
\ No newline at end of file
+
diff --git a/src/main/java/com/mycompany/tictactoeserver/App.java b/src/main/java/com/mycompany/tictactoeserver/App.java
index 22d34dc..5eadb71 100644
--- a/src/main/java/com/mycompany/tictactoeserver/App.java
+++ b/src/main/java/com/mycompany/tictactoeserver/App.java
@@ -1,31 +1,28 @@
package com.mycompany.tictactoeserver;
import com.mycompany.tictactoeserver.datasource.database.Database;
-import com.mycompany.tictactoeserver.domain.exception.DatabaseConnectionException;
-import com.mycompany.tictactoeserver.domain.exception.ExceptionHandlerMiddleware;
-import java.io.IOException;
-import java.net.URL;
+import com.mycompany.tictactoeserver.domain.services.communication.MessageRouter;
+import com.mycompany.tictactoeserver.domain.utils.exception.DatabaseConnectionException;
+import com.mycompany.tictactoeserver.domain.utils.exception.ExceptionHandlerMiddleware;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
+import java.io.IOException;
+import java.net.URL;
+
public class App extends Application {
private static Scene scene;
@Override
public void start(Stage stage) throws IOException {
- try {
- Database db = Database.getInstance();
- db.connect();
- scene = new Scene(loadFXML("presentation/main_screen"), 640, 480);
- stage.setScene(scene);
- stage.show();
- } catch (DatabaseConnectionException ex) {
- System.getLogger(App.class.getName()).log(System.Logger.Level.ERROR, (String) null, ex);
- }
+ setupDependencies();
+ scene = new Scene(loadFXML("presentation/main_screen"), 640, 480);
+ stage.setScene(scene);
+ stage.show();
}
static void setRoot(String fxml) throws IOException {
@@ -41,7 +38,7 @@ private static Parent loadFXML(String fxml) throws IOException {
return fxmlLoader.load();
}
- public static void main(String[] args) {
+ static void main(String[] args) {
Thread.setDefaultUncaughtExceptionHandler((thread, throwable) -> {
if (throwable instanceof Exception) {
@@ -51,6 +48,17 @@ public static void main(String[] args) {
}
});
+
launch();
}
+
+ private void setupDependencies() {
+ try {
+ Database.getInstance().connect();
+ } catch (DatabaseConnectionException e) {
+ ExceptionHandlerMiddleware.getInstance().handleException(e);
+ }
+
+ MessageRouter.getInstance();
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/mycompany/tictactoeserver/datasource/database/Database.java b/src/main/java/com/mycompany/tictactoeserver/datasource/database/Database.java
index 0843cea..da058d5 100644
--- a/src/main/java/com/mycompany/tictactoeserver/datasource/database/Database.java
+++ b/src/main/java/com/mycompany/tictactoeserver/datasource/database/Database.java
@@ -1,35 +1,33 @@
package com.mycompany.tictactoeserver.datasource.database;
-import com.mycompany.tictactoeserver.domain.exception.DatabaeDisConnectionException;
-import com.mycompany.tictactoeserver.domain.exception.DatabaseConnectionException;
+import com.mycompany.tictactoeserver.domain.utils.exception.DatabaeDisConnectionException;
+import com.mycompany.tictactoeserver.domain.utils.exception.DatabaseConnectionException;
+
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Database {
- private static Database instance = null;
private Connection connection = null;
- private Database() { }
+ private static Database instance = null;
+
+ private Database() {
+ }
public static Database getInstance() {
-
- if (instance == null) {
- synchronized (Database.class) {
- if (instance == null) {
- instance = new Database();
- }
- }
+ synchronized (Database.class) {
+ if (instance == null)
+ instance = new Database();
}
-
+
return instance;
}
- public void connect() throws DatabaseConnectionException{
- if (connection != null) {
+ public void connect() throws DatabaseConnectionException {
+ if (connection != null)
return;
- }
try {
connection = DriverManager.getConnection(
@@ -42,13 +40,13 @@ public void connect() throws DatabaseConnectionException{
}
}
- public void disconnect() throws DatabaeDisConnectionException{
+ public void disconnect() throws DatabaeDisConnectionException {
try {
if (connection != null && !connection.isClosed()) {
connection.close();
}
} catch (SQLException e) {
- throw new DatabaeDisConnectionException(e.getStackTrace());
+ throw new DatabaeDisConnectionException(e.getStackTrace());
} finally {
connection = null;
}
diff --git a/src/main/java/com/mycompany/tictactoeserver/datasource/database/dao/ActivityDAO.java b/src/main/java/com/mycompany/tictactoeserver/datasource/database/dao/ActivityDAO.java
index a349f33..ba83946 100644
--- a/src/main/java/com/mycompany/tictactoeserver/datasource/database/dao/ActivityDAO.java
+++ b/src/main/java/com/mycompany/tictactoeserver/datasource/database/dao/ActivityDAO.java
@@ -2,9 +2,9 @@
import com.mycompany.tictactoeserver.datasource.database.Database;
import com.mycompany.tictactoeserver.datasource.model.ActivityPoint;
-import com.mycompany.tictactoeserver.domain.exception.ActiveSessionExistsException;
-import com.mycompany.tictactoeserver.domain.exception.ActivityNotFoundException;
-import com.mycompany.tictactoeserver.domain.exception.DataAccessException;
+import com.mycompany.tictactoeserver.domain.utils.exception.ActiveSessionExistsException;
+import com.mycompany.tictactoeserver.domain.utils.exception.ActivityNotFoundException;
+import com.mycompany.tictactoeserver.domain.utils.exception.DataAccessException;
import java.sql.*;
import java.time.LocalDateTime;
diff --git a/src/main/java/com/mycompany/tictactoeserver/datasource/database/dao/PlayerDAO.java b/src/main/java/com/mycompany/tictactoeserver/datasource/database/dao/PlayerDAO.java
index 059fc63..917509e 100644
--- a/src/main/java/com/mycompany/tictactoeserver/datasource/database/dao/PlayerDAO.java
+++ b/src/main/java/com/mycompany/tictactoeserver/datasource/database/dao/PlayerDAO.java
@@ -8,18 +8,12 @@
*
* @author sheri
*/
+
import com.mycompany.tictactoeserver.datasource.database.Database;
import com.mycompany.tictactoeserver.datasource.model.Player;
-import com.mycompany.tictactoeserver.domain.exception.ExceptionHandlerMiddleware;
-import com.mycompany.tictactoeserver.domain.exception.PlayerDeletionException;
-import com.mycompany.tictactoeserver.domain.exception.PlayerInsertionException;
-import com.mycompany.tictactoeserver.domain.exception.PlayerNotFoundException;
-import com.mycompany.tictactoeserver.domain.exception.PlayerUpdateException;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
+import com.mycompany.tictactoeserver.domain.utils.exception.*;
+
+import java.sql.*;
import java.util.ArrayList;
import java.util.List;
@@ -65,10 +59,10 @@ public Player findByUsername(String username) {
try (PreparedStatement stmt = connection.prepareStatement(sql)) {
stmt.setString(1, username);
ResultSet rs = stmt.executeQuery();
- if (rs.next()) {return mapRow(rs);}
-
- else {
- return null;
+ if (rs.next()) {
+ return mapRow(rs);
+ } else {
+ return null;
}
} catch (SQLException e) {
exceptionHandler.handleException(new PlayerNotFoundException(e.getStackTrace()));
diff --git a/src/main/java/com/mycompany/tictactoeserver/datasource/database/dao/RoomDao.java b/src/main/java/com/mycompany/tictactoeserver/datasource/database/dao/RoomDAO.java
similarity index 62%
rename from src/main/java/com/mycompany/tictactoeserver/datasource/database/dao/RoomDao.java
rename to src/main/java/com/mycompany/tictactoeserver/datasource/database/dao/RoomDAO.java
index 39919e8..9dcd2b8 100644
--- a/src/main/java/com/mycompany/tictactoeserver/datasource/database/dao/RoomDao.java
+++ b/src/main/java/com/mycompany/tictactoeserver/datasource/database/dao/RoomDAO.java
@@ -3,32 +3,32 @@
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
package com.mycompany.tictactoeserver.datasource.database.dao;
+
import com.mycompany.tictactoeserver.datasource.database.Database;
-import com.mycompany.tictactoeserver.domain.exception.*;
import com.mycompany.tictactoeserver.datasource.model.Room;
+import com.mycompany.tictactoeserver.domain.utils.exception.RoomCreationException;
+import com.mycompany.tictactoeserver.domain.utils.exception.RoomNotFoundException;
+import com.mycompany.tictactoeserver.domain.utils.exception.RoomUpdationException;
+
+import java.sql.*;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Timestamp;
/**
*
- * @author mahmoud
+ * @author mahmoud
*/
-public class RoomDao {
-
+public class RoomDAO {
+
private final Connection connection;
- public RoomDao() {
+ public RoomDAO() {
this.connection = Database.getInstance().getConnection();
}
public void createRoom(Room room) throws RoomCreationException {
-String sqlCreation =
- "INSERT INTO ROOM (id, first_player_id, second_player_id, status, created_at) " +
- "VALUES (?, ?, ?, ?, ?)";
+ String sqlCreation =
+ "INSERT INTO ROOM (id, first_player_id, second_player_id, status, created_at) " +
+ "VALUES (?, ?, ?, ?, ?)";
try (PreparedStatement roomCreationStatement = connection.prepareStatement(sqlCreation)) {
roomCreationStatement.setString(1, room.getId());
roomCreationStatement.setString(2, room.getFirstPlayerId());
@@ -40,24 +40,24 @@ public void createRoom(Room room) throws RoomCreationException {
throw new RoomCreationException(ex.getStackTrace());
}
}
-
- public void updateRoom(Room room) throws RoomUpdationException {
- String sqlUpdate = "UPDATE ROOM SET first_player_id = ?, second_player_id = ?, winner_id = ?, status = ?, created_at = ? WHERE id = ?";
- try (PreparedStatement ps = connection.prepareStatement(sqlUpdate)) {
- ps.setString(1, room.getFirstPlayerId());
- ps.setString(2, room.getSecondPlayerId());
- ps.setString(3, room.getWinnerId());
- ps.setInt(4, room.getStatus());
- ps.setTimestamp(5, Timestamp.valueOf(room.getCreatedAt()));
- ps.setString(6, room.getId());
+ public void updateRoom(Room room) throws RoomUpdationException {
+ String sqlUpdate = "UPDATE ROOM SET first_player_id = ?, second_player_id = ?, winner_id = ?, status = ?, created_at = ? WHERE id = ?";
- ps.executeUpdate();
- } catch (SQLException ex) {
- throw new RoomUpdationException(ex.getStackTrace());
+ try (PreparedStatement ps = connection.prepareStatement(sqlUpdate)) {
+ ps.setString(1, room.getFirstPlayerId());
+ ps.setString(2, room.getSecondPlayerId());
+ ps.setString(3, room.getWinnerId());
+ ps.setInt(4, room.getStatus());
+ ps.setTimestamp(5, Timestamp.valueOf(room.getCreatedAt()));
+ ps.setString(6, room.getId());
+
+ ps.executeUpdate();
+ } catch (SQLException ex) {
+ throw new RoomUpdationException(ex.getStackTrace());
+ }
}
-}
public Room findRoomById(String roomId) throws RoomNotFoundException {
String sqlSearchingByID = "SELECT * FROM ROOM WHERE id = ?";
diff --git a/src/main/java/com/mycompany/tictactoeserver/datasource/model/ActivityPoint.java b/src/main/java/com/mycompany/tictactoeserver/datasource/model/ActivityPoint.java
index 8a8cd4d..f5ae23c 100644
--- a/src/main/java/com/mycompany/tictactoeserver/datasource/model/ActivityPoint.java
+++ b/src/main/java/com/mycompany/tictactoeserver/datasource/model/ActivityPoint.java
@@ -3,6 +3,7 @@
import java.time.LocalDateTime;
+
public class ActivityPoint {
private final String id;
private String playerId;
@@ -15,9 +16,10 @@ public ActivityPoint() {
}
public ActivityPoint(String playerId) {
- this.id = UUID.randomUUID().toString();
- this.startTime = LocalDateTime.now();
+ this.startTime = LocalDateTime.now();
this.playerId = playerId;
+
+ this.id = UUID.randomUUID().toString();
}
public String getId() {
return id;
diff --git a/src/main/java/com/mycompany/tictactoeserver/datasource/model/Player.java b/src/main/java/com/mycompany/tictactoeserver/datasource/model/Player.java
index a814774..a8825e1 100644
--- a/src/main/java/com/mycompany/tictactoeserver/datasource/model/Player.java
+++ b/src/main/java/com/mycompany/tictactoeserver/datasource/model/Player.java
@@ -4,12 +4,12 @@
public class Player {
- final private String id;
+ final private String id;
private String username;
private String password;
private int score;
-
-
+
+
public Player() {
this.id = UUID.randomUUID().toString();
this.score = 0;
@@ -21,6 +21,7 @@ public Player(String username, String password) {
this.password = password;
this.score = 0;
}
+
public Player(String username, String password, int score) {
this.id = UUID.randomUUID().toString();
this.username = username;
@@ -29,11 +30,10 @@ public Player(String username, String password, int score) {
}
-
public String getId() {
return id;
}
-
+
public String getUsername() {
return username;
}
diff --git a/src/main/java/com/mycompany/tictactoeserver/datasource/model/Room.java b/src/main/java/com/mycompany/tictactoeserver/datasource/model/Room.java
index ef0162f..432e371 100644
--- a/src/main/java/com/mycompany/tictactoeserver/datasource/model/Room.java
+++ b/src/main/java/com/mycompany/tictactoeserver/datasource/model/Room.java
@@ -10,19 +10,21 @@ public class Room {
private String secondPlayerId;
private String winnerId;
private int status;
- private LocalDateTime createdAt;
+ private LocalDateTime createdAt;
public Room() {
this.id = UUID.randomUUID().toString();
this.createdAt = LocalDateTime.now();
}
- public Room(String firstPlayerId ) {
- this.id = UUID.randomUUID().toString();
+
+ public Room(String firstPlayerId) {
+ this.id = UUID.randomUUID().toString();
this.createdAt = LocalDateTime.now();
this.firstPlayerId = firstPlayerId;
}
+
public Room(String firstPlayerId, String secondPlayerId) {
- this.id = UUID.randomUUID().toString();
+ this.id = UUID.randomUUID().toString();
this.createdAt = LocalDateTime.now();
this.firstPlayerId = firstPlayerId;
this.secondPlayerId = secondPlayerId;
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/authentication/AuthenticationManager.java b/src/main/java/com/mycompany/tictactoeserver/domain/authentication/AuthenticationManager.java
deleted file mode 100644
index f71f52f..0000000
--- a/src/main/java/com/mycompany/tictactoeserver/domain/authentication/AuthenticationManager.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package com.mycompany.tictactoeserver.domain.authentication;
-
-import com.mycompany.tictactoeserver.datasource.database.dao.PlayerDAO;
-import com.mycompany.tictactoeserver.datasource.model.Player;
-import com.mycompany.tictactoeserver.domain.communication.Header;
-import com.mycompany.tictactoeserver.domain.communication.Message;
-import com.mycompany.tictactoeserver.domain.communication.MessageType;
-import com.mycompany.tictactoeserver.domain.entity.AuthenticationDto;
-import com.mycompany.tictactoeserver.domain.exception.ExceptionHandlerMiddleware;
-import com.mycompany.tictactoeserver.domain.exception.HashingException;
-import com.mycompany.tictactoeserver.domain.exception.ServerInterruptException;
-import com.mycompany.tictactoeserver.domain.security.ServerSecurityManager;
-
-public class AuthenticationManager {
-
-
- private static AuthenticationManager instance ;
- private final PlayerDAO playerDao ;
-
- private AuthenticationManager() {
- this.playerDao = new PlayerDAO();
- }
-
- public static AuthenticationManager getInstance()
- {
- if(instance==null)
- instance= new AuthenticationManager();
-
- return instance;
- }
-
-
-
-
- public Message register(String username , String plainTextPassword){
-
- AuthenticationDto player = new AuthenticationDto(
- playerDao.findByUsername(username)
- );
-
- if(!player.isPlayerFound()){
-
- try {
- String hashedPassword = ServerSecurityManager.hashText(plainTextPassword);
- playerDao.insert(new Player(username , hashedPassword));
- player.setPassword(hashedPassword);
- player.setUsername(username);
- } catch (HashingException ex) {
- ServerInterruptException customException = new ServerInterruptException(ex.getStackTrace());
- ExceptionHandlerMiddleware.getInstance().handleException(customException);
- }
- }
-
-
- return new Message( new Header(MessageType.ERROR), player);
-
- }
-
- public Message login(String username , String plainTextPassword){
-
- try {
- AuthenticationDto player = new AuthenticationDto(
- playerDao.findByUsername(username)
- );
-
- String hashedPassword = ServerSecurityManager.hashText(plainTextPassword);
- Header messagHeader = new Header();
-
-
-
- if( player.isPlayerFound() &&
- username.equals(player.getUsername()) &&
- hashedPassword.endsWith(player.getPassword())){
-
- messagHeader.setMsgType(MessageType.RESPONSE);
- }
- else{
- messagHeader.setMsgType(MessageType.ERROR);
- }
-
- return new Message( messagHeader, player);
- } catch (HashingException ex) {
- ServerInterruptException customException = new ServerInterruptException(ex.getStackTrace());
- ExceptionHandlerMiddleware.getInstance().handleException(customException);
- }
- return null ;
- }
-
-
-
-
-
-
-}
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/communication/CommunicationManager.java b/src/main/java/com/mycompany/tictactoeserver/domain/communication/CommunicationManager.java
deleted file mode 100644
index 12df134..0000000
--- a/src/main/java/com/mycompany/tictactoeserver/domain/communication/CommunicationManager.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
- * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
- */
-package com.mycompany.tictactoeserver.domain.communication;
-
-import org.json.JSONObject;
-
-/**
- *
- * @author Hazem
- */
-public class CommunicationManager {
-
- public static JSONObject toJSON(Object msg)
- {
- JSONObject jsonMessage = new JSONObject(msg);
- return jsonMessage;
- }
-
- public static String fromJSON(JSONObject jsonMessage)
- {
- String msg = jsonMessage.toString();
- return msg;
- }
-
-
-
-}
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/communication/Message.java b/src/main/java/com/mycompany/tictactoeserver/domain/communication/Message.java
deleted file mode 100644
index e91c91d..0000000
--- a/src/main/java/com/mycompany/tictactoeserver/domain/communication/Message.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
- * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
- */
-package com.mycompany.tictactoeserver.domain.communication;
-
-/**
- *
- * @author Hazem
- */
-public class Message {
- private Header header;
- private Object data;
-
- public Message() {
- header=null;
- data=null;
- }
-
-
- public Message(Header header, Object data) {
- this.header = header;
- this.data = data;
- }
-
- public Header getHeader() {
- return header;
- }
-
- public Object getData() {
- return data;
- }
-}
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/communication/MessageType.java b/src/main/java/com/mycompany/tictactoeserver/domain/communication/MessageType.java
deleted file mode 100644
index bf9599d..0000000
--- a/src/main/java/com/mycompany/tictactoeserver/domain/communication/MessageType.java
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
- * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Enum.java to edit this template
- */
-package com.mycompany.tictactoeserver.domain.communication;
-
-/**
- *
- * @author Hazem
- */
-public enum MessageType {
- REQUEST,
- RESPONSE,
- EVENT,
- ERROR
-}
-
-
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/entity/AuthResponseEntity.java b/src/main/java/com/mycompany/tictactoeserver/domain/entity/AuthResponseEntity.java
new file mode 100644
index 0000000..18f773c
--- /dev/null
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/entity/AuthResponseEntity.java
@@ -0,0 +1,31 @@
+package com.mycompany.tictactoeserver.domain.entity;
+
+import com.mycompany.tictactoeserver.datasource.model.Player;
+import org.json.JSONObject;
+
+public class AuthResponseEntity {
+ String id;
+ String username;
+ int score;
+
+ public AuthResponseEntity() {
+ }
+
+ public AuthResponseEntity(Player player) {
+ id = player.getId();
+ username = player.getUsername();
+ score = player.getScore();
+ }
+
+ public JSONObject toJson() {
+ JSONObject json = new JSONObject();
+
+ json.put("id", id);
+ json.put("username", username);
+ json.put("score", score);
+
+ return json;
+
+ }
+
+}
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/entity/AuthenticationDto.java b/src/main/java/com/mycompany/tictactoeserver/domain/entity/AuthenticationDto.java
deleted file mode 100644
index b84516f..0000000
--- a/src/main/java/com/mycompany/tictactoeserver/domain/entity/AuthenticationDto.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.mycompany.tictactoeserver.domain.entity;
-
-import com.mycompany.tictactoeserver.datasource.model.Player;
-
-public class AuthenticationDto {
-
- private String username ;
- private String password ;
-
- public AuthenticationDto() {
- }
-
- public AuthenticationDto(Player player) {
- if(player!=null)
- {
- this.username= player.getUsername();
- this.password= player.getPassword();
- }
- else
- {
- this.username=null;
- this.password=null;
- }
- }
-
- public AuthenticationDto(String username, String password) {
- this.username = username;
- this.password = password;
- }
-
- public String getPassword() {
- return password;
- }
-
- public String getUsername() {
- return username;
- }
-
- public void setPassword(String password) {
- this.password = password;
- }
-
- public void setUsername(String username) {
- this.username = username;
- }
-
- public boolean isPlayerFound()
- {
- return username!=null;
- }
-
- @Override
- public String toString()
- {
- return "Username: " +username ;
- }
-}
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/game/GameManager.java b/src/main/java/com/mycompany/tictactoeserver/domain/game/GameManager.java
deleted file mode 100644
index 3f5d3ef..0000000
--- a/src/main/java/com/mycompany/tictactoeserver/domain/game/GameManager.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.mycompany.tictactoeserver.domain.game;
-
-import java.util.UUID;
-
-public interface GameManager {
- void createRoom();
-
- void addPlayer(UUID uuid);
-}
\ No newline at end of file
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/security/ServerSecurityManager.java b/src/main/java/com/mycompany/tictactoeserver/domain/security/ServerSecurityManager.java
deleted file mode 100644
index 027913a..0000000
--- a/src/main/java/com/mycompany/tictactoeserver/domain/security/ServerSecurityManager.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
- * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
- */
-package com.mycompany.tictactoeserver.domain.security;
-
-import com.mycompany.tictactoeserver.domain.exception.HashingException;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-
-/**
- *
- * @author Hazem
- */
-public class ServerSecurityManager {
- final static private String algorithm = "SHA-256";
-
- public ServerSecurityManager() {
- }
-
- public static String hashText(String text) throws HashingException {
-
- try {
- byte[] rawText= text.getBytes();
-
- MessageDigest messageDigest = MessageDigest.getInstance(algorithm);
-
- messageDigest.update(rawText);
-
- byte []encryptedrawText = messageDigest.digest();
-
- String encryptedText = bytesToHex(encryptedrawText);
-
- return encryptedText;
- } catch (NoSuchAlgorithmException ex) {
- throw new HashingException(ex.getStackTrace());
- }
- }
-
- private static String bytesToHex(byte []bytes)
- {
- StringBuilder hexString = new StringBuilder();
-
- for (byte b : bytes){
- hexString.append(String.format("%02X", b));
- }
- return hexString.toString();
- }
-
-}
-
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/server/GameServerManager.java b/src/main/java/com/mycompany/tictactoeserver/domain/server/GameServerManager.java
index 7ed88e8..617f26c 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/server/GameServerManager.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/server/GameServerManager.java
@@ -1,17 +1,18 @@
package com.mycompany.tictactoeserver.domain.server;
-import com.mycompany.tictactoeserver.domain.authentication.AuthenticationManager;
-import com.mycompany.tictactoeserver.domain.communication.Message;
-import com.mycompany.tictactoeserver.domain.exception.*;
+import com.mycompany.tictactoeserver.domain.services.communication.MessageRouter;
import com.mycompany.tictactoeserver.domain.utils.callbacks.PlayerHandlerCallback;
+import com.mycompany.tictactoeserver.domain.utils.exception.ExceptionHandlerMiddleware;
+import com.mycompany.tictactoeserver.domain.utils.exception.PlayerSendMessageException;
+import com.mycompany.tictactoeserver.domain.utils.exception.ServerInterruptException;
+
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.util.Vector;
-import org.json.JSONObject;
-public class GameServerManager implements ServerManager {
+public class GameServerManager {
private final Vector players = new Vector<>();
public Thread thread;
private final ServerRunnable runnable;
@@ -25,128 +26,78 @@ public static GameServerManager getInstance() {
return instance;
}
- private GameServerManager()
- {
- runnable = new ServerRunnable(this::addListener);
+ private GameServerManager() {
+ runnable = new ServerRunnable(this::addPlayer);
thread = new Thread(runnable);
thread.start();
}
- public boolean isRunning()
- {
+ public boolean isRunning() {
return runnable.isRunning();
}
- @Override
- public synchronized void start()
- {
- System.out.println("Starting GameServerManager");
- runnable.toggleRunning();
+ public void start() {
+ synchronized (lock) {
+ System.out.println("Starting GameServerManager");
+ runnable.toggleRunning();
+ }
}
- @Override
public void stop() {
System.out.println("Stopping GameServerManager");
runnable.toggleRunning();
- Vector snapshot;
+ Vector copy;
synchronized (lock) {
- snapshot = new Vector<>(players);
+ copy = new Vector<>(players);
players.clear();
}
- for (PlayerConnectionHandler p : snapshot) {
+ for (PlayerConnectionHandler p : copy) {
p.close();
}
}
-
-
-
- @Override
- public void broadcastMessage(String message) throws PlayerSendMessageException
- {
+ public void broadcastMessage(String message) throws PlayerSendMessageException {
synchronized (lock) {
- for (PlayerConnectionHandler player : players)
- {
+ for (PlayerConnectionHandler player : players) {
sendMessage(message, player);
}
}
}
- @Override
- public void sendMessage(String message, PlayerConnectionHandler player) throws PlayerSendMessageException
- {
+ public void sendMessage(String message, PlayerConnectionHandler player) throws PlayerSendMessageException {
player.sendMessageToPlayer(message);
}
- @Override
- public void parseMessage(String message, PlayerConnectionHandler player)
- {
- mapFunction(message, player);
- }
+ public void onReceiveMessage(String message, PlayerConnectionHandler sender) {
+ MessageRouter router = MessageRouter.getInstance();
- @Override
- public void addListener(PlayerConnectionHandler player) {
- synchronized (lock) { players.add(player); }
+ try {
+ router.navigateMessage(message, sender);
+ } catch (PlayerSendMessageException e) {
+ ExceptionHandlerMiddleware.getInstance().handleException(e);
+ }
}
- @Override
- public void removeListener(PlayerConnectionHandler player) {
- synchronized (lock) { players.remove(player); }
+ public void addPlayer(PlayerConnectionHandler player) {
+ synchronized (lock) {
+ players.add(player);
+ }
}
- private void mapFunction(String message, PlayerConnectionHandler player)
- {
- JSONObject jsonMessage= new JSONObject( message);
- String functoin = jsonMessage.getString("function");
- String username = jsonMessage.getString("username");
- String password = jsonMessage.getString("password");
- AuthenticationManager auth = AuthenticationManager.getInstance();
- Message msg = new Message();
- switch (functoin)
- {
-
- case "login":
- {
- msg = auth.login(username, password);
- break;
- }
- case "register":
- {
-
- msg=auth.register(username, password);
- System.out.println("Assign message");
- break;
- }
-
- default:
- try
- {
- broadcastMessage(message);
- }
- catch (PlayerSendMessageException e)
- {
- throw new RuntimeException(e);
- }
-
- }
- try {
- JSONObject obj = new JSONObject(msg);
- System.out.println(msg.getData().toString());
- player.sendMessageToPlayer(obj.toString());
- } catch (PlayerSendMessageException ex) {
- System.getLogger(GameServerManager.class.getName()).log(System.Logger.Level.ERROR, (String) null, ex);
+ public void removePlayer(PlayerConnectionHandler player) {
+ synchronized (lock) {
+ players.remove(player);
}
}
}
-class ServerRunnable implements Runnable
-{
+class ServerRunnable implements Runnable {
private volatile ServerSocket serverSocket;
PlayerHandlerCallback onAdd;
@@ -154,26 +105,20 @@ class ServerRunnable implements Runnable
int PORT = 4321;
- ServerRunnable(PlayerHandlerCallback onAdd)
- {
+ ServerRunnable(PlayerHandlerCallback onAdd) {
this.onAdd = onAdd;
- try
- {
+ try {
serverSocket = new ServerSocket(PORT);
- }
- catch (IOException e)
- {
- ServerInterruptException interruptException = new ServerInterruptException(e.getStackTrace());
+ } catch (IOException e) {
+ ServerInterruptException interruptException = new ServerInterruptException(e.getStackTrace());
ExceptionHandlerMiddleware.getInstance().handleException(interruptException);
}
}
- public synchronized void toggleRunning()
- {
+ public synchronized void toggleRunning() {
isRunning = !isRunning;
- if(isRunning)
- {
+ if (isRunning) {
notify();
System.out.println("Server Notified");
}
@@ -184,17 +129,12 @@ public boolean isRunning() {
}
@Override
- public void run()
- {
-
- while (true)
- {
- try
- {
- synchronized (this)
- {
- if (!isRunning)
- {
+ public void run() {
+
+ while (true) {
+ try {
+ synchronized (this) {
+ if (!isRunning) {
System.out.println("Server Waiting...");
serverSocket.close();
wait();
@@ -204,22 +144,15 @@ public void run()
System.out.println("Server Accepting...");
Socket clientSocket = serverSocket.accept();
- if(isRunning)
- {
+ if (isRunning) {
onAdd.call(new PlayerConnectionHandler(clientSocket));
System.out.println("Client Connected: " + clientSocket.getInetAddress().getHostAddress());
- }
- else
- {
+ } else {
clientSocket.close();
}
- }
- catch (SocketException | InterruptedException ex)
- {
+ } catch (SocketException | InterruptedException ex) {
System.out.println("Server Closed, Exception: ---> " + ex.getMessage());
- }
- catch (IOException e)
- {
+ } catch (IOException e) {
ServerInterruptException customException = new ServerInterruptException(e.getStackTrace());
ExceptionHandlerMiddleware.getInstance().handleException(customException);
}
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/server/PlayerConnectionHandler.java b/src/main/java/com/mycompany/tictactoeserver/domain/server/PlayerConnectionHandler.java
index 7d7b63e..1586b48 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/server/PlayerConnectionHandler.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/server/PlayerConnectionHandler.java
@@ -1,9 +1,12 @@
package com.mycompany.tictactoeserver.domain.server;
import com.mycompany.tictactoeserver.datasource.model.Player;
-import com.mycompany.tictactoeserver.domain.exception.*;
import com.mycompany.tictactoeserver.domain.utils.callbacks.StringCallback;
import com.mycompany.tictactoeserver.domain.utils.callbacks.VoidCallback;
+import com.mycompany.tictactoeserver.domain.utils.exception.ExceptionHandlerMiddleware;
+import com.mycompany.tictactoeserver.domain.utils.exception.PlayerConnectionException;
+import com.mycompany.tictactoeserver.domain.utils.exception.PlayerSendMessageException;
+
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
@@ -16,50 +19,42 @@ public class PlayerConnectionHandler {
private final PlayerRunnable runnable;
PlayerConnectionHandler(Socket socket) {
- runnable = new PlayerRunnable(socket, this::receiveMessageFromPlayer, this::onCloseRunnable );
+ runnable = new PlayerRunnable(socket, this::receiveMessageFromPlayer, this::onCloseRunnable);
Thread thread = new Thread(runnable);
thread.start();
}
- public void sendMessageToPlayer(String message) throws PlayerSendMessageException
- {
+ public void sendMessageToPlayer(String message) throws PlayerSendMessageException {
runnable.sendMessageToSocket(message);
}
- public void receiveMessageFromPlayer(String message)
- {
- serverManager.parseMessage(message, this);
+ public void receiveMessageFromPlayer(String message) {
+ serverManager.onReceiveMessage(message, this);
}
- public void close()
- {
+ public void close() {
runnable.setRunning(false);
runnable.close();
}
- private void onCloseRunnable()
- {
- serverManager.removeListener(this);
+ private void onCloseRunnable() {
+ serverManager.removePlayer(this);
}
-
- public Player getPlayer()
- {
+ public Player getPlayer() {
return player;
}
- public void setPlayer(Player player)
- {
+ public void setPlayer(Player player) {
this.player = player;
}
}
-class PlayerRunnable implements Runnable
-{
+class PlayerRunnable implements Runnable {
private final Socket socket;
private DataInputStream in;
private DataOutputStream out;
@@ -69,19 +64,15 @@ class PlayerRunnable implements Runnable
private volatile boolean isRunning = true;
- PlayerRunnable(Socket socket, StringCallback onReceive, VoidCallback onClose)
- {
+ PlayerRunnable(Socket socket, StringCallback onReceive, VoidCallback onClose) {
this.onReceive = onReceive;
this.onClose = onClose;
this.socket = socket;
- try
- {
+ try {
this.in = new DataInputStream(socket.getInputStream());
this.out = new DataOutputStream(socket.getOutputStream());
- }
- catch (IOException e)
- {
+ } catch (IOException e) {
close();
PlayerConnectionException connectionException = new PlayerConnectionException(e.getStackTrace());
ExceptionHandlerMiddleware.getInstance().handleException(connectionException);
@@ -89,27 +80,20 @@ class PlayerRunnable implements Runnable
}
}
- public synchronized void setRunning(boolean isRunning)
- {
+ public synchronized void setRunning(boolean isRunning) {
this.isRunning = isRunning;
- if(this.isRunning)
- {
+ if (this.isRunning) {
notify();
System.out.println("Notified");
}
}
@Override
- public void run()
- {
- try
- {
- while (true)
- {
- synchronized (this)
- {
- if (!isRunning)
- {
+ public void run() {
+ try {
+ while (true) {
+ synchronized (this) {
+ if (!isRunning) {
System.out.println("Player Waiting...");
wait();
}
@@ -119,10 +103,7 @@ public void run()
System.out.println("in: ---> " + msg);
onReceive.call(msg);
}
- }
-
- catch (InterruptedException | IOException ex)
- {
+ } catch (InterruptedException | IOException ex) {
onClose.call();
close();
System.out.println("Client Disconnected");
@@ -139,24 +120,20 @@ public void sendMessageToSocket(String message) throws PlayerSendMessageExceptio
}
}
- public void close()
- {
- try
- {
+ public void close() {
+ try {
if (in != null) in.close();
+ } catch (IOException ignored) {
}
- catch (IOException ignored) {}
- try
- {
+ try {
if (out != null) out.close();
+ } catch (IOException ignored) {
}
- catch (IOException ignored) {}
- try
- {
+ try {
if (socket != null && !socket.isClosed()) socket.close();
+ } catch (IOException ignored) {
}
- catch (IOException ignored) {}
}
}
\ No newline at end of file
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/server/ServerManager.java b/src/main/java/com/mycompany/tictactoeserver/domain/server/ServerManager.java
deleted file mode 100644
index e79c5f8..0000000
--- a/src/main/java/com/mycompany/tictactoeserver/domain/server/ServerManager.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.mycompany.tictactoeserver.domain.server;
-
-import com.mycompany.tictactoeserver.domain.exception.*;
-
-public interface ServerManager {
- void start() ;
-
- void stop() throws StopServerException;
-
- void broadcastMessage(String message) throws PlayerSendMessageException;
-
- void sendMessage(String message, PlayerConnectionHandler player) throws PlayerSendMessageException;
-
-
- void addListener(PlayerConnectionHandler listener);
-
- void removeListener(PlayerConnectionHandler listener);
-
- void parseMessage(String message, PlayerConnectionHandler player);
-
-}
\ No newline at end of file
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/services/authentication/AuthenticationService.java b/src/main/java/com/mycompany/tictactoeserver/domain/services/authentication/AuthenticationService.java
new file mode 100644
index 0000000..8b80e2c
--- /dev/null
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/services/authentication/AuthenticationService.java
@@ -0,0 +1,104 @@
+package com.mycompany.tictactoeserver.domain.services.authentication;
+
+import com.mycompany.tictactoeserver.datasource.database.dao.PlayerDAO;
+import com.mycompany.tictactoeserver.datasource.model.Player;
+import com.mycompany.tictactoeserver.domain.entity.AuthResponseEntity;
+import com.mycompany.tictactoeserver.domain.services.communication.Action;
+import com.mycompany.tictactoeserver.domain.services.communication.Header;
+import com.mycompany.tictactoeserver.domain.services.communication.Message;
+import com.mycompany.tictactoeserver.domain.services.communication.MessageType;
+import com.mycompany.tictactoeserver.domain.services.security.ServerSecurityManager;
+import com.mycompany.tictactoeserver.domain.utils.exception.ExceptionHandlerMiddleware;
+import com.mycompany.tictactoeserver.domain.utils.exception.HashingException;
+import com.mycompany.tictactoeserver.domain.utils.exception.ServerInterruptException;
+import org.json.JSONObject;
+
+public class AuthenticationService {
+
+
+ private static AuthenticationService instance;
+ private final PlayerDAO playerDao;
+
+ private AuthenticationService() {
+ this.playerDao = new PlayerDAO();
+ }
+
+ public static AuthenticationService getInstance() {
+ if (instance == null)
+ instance = new AuthenticationService();
+
+ return instance;
+ }
+
+
+ public Message register(String username, String plainTextPassword) {
+
+ Player player = playerDao.findByUsername(username);
+
+ if (player != null) {
+ JSONObject json = new JSONObject();
+ json.put("error", "Username already exists");
+ return new Message(new Header(MessageType.ERROR, Action.REGISTER), json);
+ }
+
+ AuthResponseEntity responseEntity;
+
+ try {
+
+ String hashedPassword = ServerSecurityManager.hashText(plainTextPassword);
+ Player newPlayer = new Player(username, hashedPassword);
+ playerDao.insert(newPlayer);
+ responseEntity = new AuthResponseEntity(newPlayer);
+
+ } catch (HashingException ex) {
+
+ ServerInterruptException customException = new ServerInterruptException(ex.getStackTrace());
+ ExceptionHandlerMiddleware.getInstance().handleException(customException);
+
+ JSONObject json = new JSONObject();
+ json.put("error", "Internal Server Error");
+ return new Message(new Header(MessageType.ERROR, Action.REGISTER), json);
+
+ }
+
+
+ return new Message(new Header(MessageType.RESPONSE, Action.REGISTER), responseEntity.toJson());
+
+ }
+
+ public Message login(String username, String plainTextPassword) {
+
+ try {
+
+ Player player = playerDao.findByUsername(username);
+
+ if (player == null) {
+ JSONObject json = new JSONObject();
+ json.put("error", "Invalid Credentials");
+ return new Message(new Header(MessageType.ERROR, Action.LOGIN), json);
+ }
+
+
+ String hashedPassword = ServerSecurityManager.hashText(plainTextPassword);
+ if (!hashedPassword.equals(player.getPassword())) {
+ JSONObject json = new JSONObject();
+ json.put("error", "Invalid Credentials");
+ return new Message(new Header(MessageType.ERROR, Action.LOGIN), json);
+ }
+
+
+ AuthResponseEntity responseEntity = new AuthResponseEntity(player);
+ return new Message(new Header(MessageType.RESPONSE, Action.LOGIN), responseEntity.toJson());
+
+ } catch (HashingException ex) {
+ ServerInterruptException customException = new ServerInterruptException(ex.getStackTrace());
+ ExceptionHandlerMiddleware.getInstance().handleException(customException);
+
+ JSONObject json = new JSONObject();
+ json.put("error", "Internal Server Error");
+ return new Message(new Header(MessageType.ERROR, Action.LOGIN), json);
+ }
+ }
+
+
+}
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/services/communication/Action.java b/src/main/java/com/mycompany/tictactoeserver/domain/services/communication/Action.java
new file mode 100644
index 0000000..eec918c
--- /dev/null
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/services/communication/Action.java
@@ -0,0 +1,32 @@
+package com.mycompany.tictactoeserver.domain.services.communication;
+
+public enum Action {
+ LOGIN(10),
+ REGISTER(20),
+ REQUEST_GAME(30),
+ GAME_RESPONSE(40),
+ SEND_GAME_UPDATE(50);
+
+
+ final int id;
+
+ Action(int id) {
+ this.id = id;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public static Action valueOf(int id) {
+ for (Action action : Action.values()) {
+ if (action.getId() == id) {
+ return action;
+ }
+ }
+
+ return null;
+ }
+
+
+}
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/communication/Header.java b/src/main/java/com/mycompany/tictactoeserver/domain/services/communication/Header.java
similarity index 57%
rename from src/main/java/com/mycompany/tictactoeserver/domain/communication/Header.java
rename to src/main/java/com/mycompany/tictactoeserver/domain/services/communication/Header.java
index bd7c17d..c38aa12 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/communication/Header.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/services/communication/Header.java
@@ -2,7 +2,7 @@
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
-package com.mycompany.tictactoeserver.domain.communication;
+package com.mycompany.tictactoeserver.domain.services.communication;
/**
*
@@ -10,14 +10,16 @@
*/
public class Header {
-
- private MessageType msgType ;
+
+ private MessageType msgType;
+ private Action action;
public Header() {
}
- public Header(MessageType msgType) {
+ public Header(MessageType msgType, Action action) {
this.msgType = msgType;
+ this.action = action;
}
public MessageType getMsgType() {
@@ -27,5 +29,12 @@ public MessageType getMsgType() {
public void setMsgType(MessageType msgType) {
this.msgType = msgType;
}
-
+
+ public Action getAction() {
+ return action;
+ }
+
+ public void setAction(Action action) {
+ this.action = action;
+ }
}
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/services/communication/Message.java b/src/main/java/com/mycompany/tictactoeserver/domain/services/communication/Message.java
new file mode 100644
index 0000000..81f6fe0
--- /dev/null
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/services/communication/Message.java
@@ -0,0 +1,45 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.mycompany.tictactoeserver.domain.services.communication;
+
+import org.json.JSONObject;
+
+/**
+ *
+ * @author Hazem
+ */
+public class Message {
+ private Header header = null;
+ private JSONObject data = null;
+
+ public Message() {
+ }
+
+ public Message(Header header, JSONObject data) {
+ this.header = header;
+ this.data = data;
+ }
+
+ public Header getHeader() {
+ return header;
+ }
+
+ public JSONObject getData() {
+ return data;
+ }
+
+ public JSONObject toJson() {
+ JSONObject jsonMessage = new JSONObject();
+
+ jsonMessage.put("type", this.header.getMsgType());
+ jsonMessage.put("action", this.header.getAction());
+
+ jsonMessage.put("data", this.data);
+
+
+ return jsonMessage;
+
+ }
+}
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/services/communication/MessageRouter.java b/src/main/java/com/mycompany/tictactoeserver/domain/services/communication/MessageRouter.java
new file mode 100644
index 0000000..a870237
--- /dev/null
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/services/communication/MessageRouter.java
@@ -0,0 +1,67 @@
+package com.mycompany.tictactoeserver.domain.services.communication;
+
+import com.mycompany.tictactoeserver.domain.server.GameServerManager;
+import com.mycompany.tictactoeserver.domain.server.PlayerConnectionHandler;
+import com.mycompany.tictactoeserver.domain.services.authentication.AuthenticationService;
+import com.mycompany.tictactoeserver.domain.utils.exception.PlayerSendMessageException;
+import org.json.JSONObject;
+
+public class MessageRouter {
+ private static MessageRouter instance;
+ private final GameServerManager server;
+
+ private MessageRouter() {
+ server = GameServerManager.getInstance();
+ }
+
+ public static MessageRouter getInstance() {
+ if (instance == null) {
+ instance = new MessageRouter();
+ }
+ return instance;
+ }
+
+ public void navigateMessage(String message, PlayerConnectionHandler sender) throws PlayerSendMessageException {
+ JSONObject json = new JSONObject(message);
+
+ MessageType messageType = MessageType.valueOf(json.getInt("type"));
+
+ assert messageType != null;
+ switch (messageType) {
+ case REQUEST:
+ Message msg = handleRequest(json);
+ server.sendMessage(msg.toJson().toString(), sender);
+ break;
+ case RESPONSE:
+ // Handle response messages
+ break;
+ case EVENT:
+ // Handle event messages
+ break;
+ case ERROR:
+ // Handle error messages
+ break;
+ default:
+ System.out.println("Unknown MessageType: " + messageType);
+ break;
+ }
+ }
+
+ private Message handleRequest(JSONObject json) {
+ Action action = Action.valueOf(json.getInt("action"));
+
+ assert action != null;
+ return switch (action) {
+ case LOGIN ->
+ AuthenticationService.getInstance().login(json.getString("username"), json.getString("password"));
+ case REGISTER ->
+ AuthenticationService.getInstance().register(json.getString("username"), json.getString("password"));
+ default -> {
+ System.out.println("Unknown Action: " + action);
+ yield new Message();
+ }
+ };
+ }
+
+
+}
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/services/communication/MessageType.java b/src/main/java/com/mycompany/tictactoeserver/domain/services/communication/MessageType.java
new file mode 100644
index 0000000..b17266e
--- /dev/null
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/services/communication/MessageType.java
@@ -0,0 +1,41 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Enum.java to edit this template
+ */
+package com.mycompany.tictactoeserver.domain.services.communication;
+
+/**
+ *
+ * @author Hazem
+ */
+public enum MessageType {
+ REQUEST(10),
+ RESPONSE(20),
+ EVENT(30),
+ ERROR(40);
+
+ final int id;
+
+ MessageType(int id) {
+ this.id = id;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public static MessageType valueOf(int id) {
+ for (MessageType type : MessageType.values()) {
+ if (type.getId() == id) {
+ return type;
+ }
+ }
+
+ return null;
+ }
+
+}
+
+
+
+
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/services/game/GameManager.java b/src/main/java/com/mycompany/tictactoeserver/domain/services/game/GameManager.java
new file mode 100644
index 0000000..98500b5
--- /dev/null
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/services/game/GameManager.java
@@ -0,0 +1,7 @@
+package com.mycompany.tictactoeserver.domain.services.game;
+
+public interface GameManager {
+ void createRoom();
+
+ void addPlayer(String uuid);
+}
\ No newline at end of file
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/services/security/ServerSecurityManager.java b/src/main/java/com/mycompany/tictactoeserver/domain/services/security/ServerSecurityManager.java
new file mode 100644
index 0000000..6d7367d
--- /dev/null
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/services/security/ServerSecurityManager.java
@@ -0,0 +1,49 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.mycompany.tictactoeserver.domain.services.security;
+
+import com.mycompany.tictactoeserver.domain.utils.exception.HashingException;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ *
+ * @author Hazem
+ */
+public class ServerSecurityManager {
+ final static private String algorithm = "SHA-256";
+
+ public ServerSecurityManager() {
+ }
+
+ public static String hashText(String text) throws HashingException {
+
+ try {
+ byte[] rawText = text.getBytes();
+
+ MessageDigest messageDigest = MessageDigest.getInstance(algorithm);
+
+ messageDigest.update(rawText);
+
+ byte[] encryptedrawText = messageDigest.digest();
+
+ return bytesToHex(encryptedrawText);
+ } catch (NoSuchAlgorithmException ex) {
+ throw new HashingException(ex.getStackTrace());
+ }
+ }
+
+ private static String bytesToHex(byte[] bytes) {
+ StringBuilder hexString = new StringBuilder();
+
+ for (byte b : bytes) {
+ hexString.append(String.format("%02X", b));
+ }
+ return hexString.toString();
+ }
+
+}
+
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/statistics/ActivityService.java b/src/main/java/com/mycompany/tictactoeserver/domain/services/statistics/ActivityService.java
similarity index 89%
rename from src/main/java/com/mycompany/tictactoeserver/domain/statistics/ActivityService.java
rename to src/main/java/com/mycompany/tictactoeserver/domain/services/statistics/ActivityService.java
index 6cf24bf..2e40c25 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/statistics/ActivityService.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/services/statistics/ActivityService.java
@@ -1,8 +1,8 @@
-package com.mycompany.tictactoeserver.domain.statistics;
+package com.mycompany.tictactoeserver.domain.services.statistics;
-import com.mycompany.tictactoeserver.datasource.database.dao.ActivityDAO;
+import com.mycompany.tictactoeserver.datasource.database.dao.*;
import com.mycompany.tictactoeserver.datasource.model.ActivityPoint;
-import com.mycompany.tictactoeserver.domain.exception.*;
+import com.mycompany.tictactoeserver.domain.utils.exception.*;
public class ActivityService {
private final ActivityDAO activityDao;
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/statistics/StatisticsManager.java b/src/main/java/com/mycompany/tictactoeserver/domain/services/statistics/StatisticsManager.java
similarity index 80%
rename from src/main/java/com/mycompany/tictactoeserver/domain/statistics/StatisticsManager.java
rename to src/main/java/com/mycompany/tictactoeserver/domain/services/statistics/StatisticsManager.java
index 12eba58..aa75c0a 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/statistics/StatisticsManager.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/services/statistics/StatisticsManager.java
@@ -1,4 +1,4 @@
-package com.mycompany.tictactoeserver.domain.statistics;
+package com.mycompany.tictactoeserver.domain.services.statistics;
import com.mycompany.tictactoeserver.datasource.model.ActivityPoint;
import com.mycompany.tictactoeserver.datasource.model.Player;
@@ -7,5 +7,6 @@
public interface StatisticsManager {
Vector getActivity();
+
Vector getLeaderboard();
}
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/utils/callbacks/PlayerHandlerCallback.java b/src/main/java/com/mycompany/tictactoeserver/domain/utils/callbacks/PlayerHandlerCallback.java
index 279d7bf..be082cd 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/utils/callbacks/PlayerHandlerCallback.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/utils/callbacks/PlayerHandlerCallback.java
@@ -3,7 +3,6 @@
import com.mycompany.tictactoeserver.domain.server.PlayerConnectionHandler;
@FunctionalInterface
-public interface PlayerHandlerCallback
-{
+public interface PlayerHandlerCallback {
void call(PlayerConnectionHandler player);
}
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/utils/callbacks/StringCallback.java b/src/main/java/com/mycompany/tictactoeserver/domain/utils/callbacks/StringCallback.java
index 6829d63..5cebc42 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/utils/callbacks/StringCallback.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/utils/callbacks/StringCallback.java
@@ -1,7 +1,6 @@
package com.mycompany.tictactoeserver.domain.utils.callbacks;
@FunctionalInterface
-public interface StringCallback
-{
+public interface StringCallback {
void call(String msg);
}
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/utils/callbacks/VoidCallback.java b/src/main/java/com/mycompany/tictactoeserver/domain/utils/callbacks/VoidCallback.java
index 0653c70..00180fa 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/utils/callbacks/VoidCallback.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/utils/callbacks/VoidCallback.java
@@ -1,8 +1,7 @@
package com.mycompany.tictactoeserver.domain.utils.callbacks;
@FunctionalInterface
-public interface VoidCallback
-{
+public interface VoidCallback {
void call();
}
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/exception/ActiveSessionExistsException.java b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/ActiveSessionExistsException.java
similarity index 84%
rename from src/main/java/com/mycompany/tictactoeserver/domain/exception/ActiveSessionExistsException.java
rename to src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/ActiveSessionExistsException.java
index 02b16ee..564924b 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/exception/ActiveSessionExistsException.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/ActiveSessionExistsException.java
@@ -1,4 +1,4 @@
-package com.mycompany.tictactoeserver.domain.exception;
+package com.mycompany.tictactoeserver.domain.utils.exception;
public class ActiveSessionExistsException extends Exception {
public ActiveSessionExistsException(StackTraceElement[] stackTraceElements) {
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/exception/ActivityNotFoundException.java b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/ActivityNotFoundException.java
similarity index 84%
rename from src/main/java/com/mycompany/tictactoeserver/domain/exception/ActivityNotFoundException.java
rename to src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/ActivityNotFoundException.java
index d8361b1..52fd9ed 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/exception/ActivityNotFoundException.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/ActivityNotFoundException.java
@@ -1,4 +1,4 @@
-package com.mycompany.tictactoeserver.domain.exception;
+package com.mycompany.tictactoeserver.domain.utils.exception;
public class ActivityNotFoundException extends Exception {
public ActivityNotFoundException(StackTraceElement[] stackTraceElements) {
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/exception/DataAccessException.java b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/DataAccessException.java
similarity index 77%
rename from src/main/java/com/mycompany/tictactoeserver/domain/exception/DataAccessException.java
rename to src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/DataAccessException.java
index 34e3b68..c8791b6 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/exception/DataAccessException.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/DataAccessException.java
@@ -1,4 +1,4 @@
-package com.mycompany.tictactoeserver.domain.exception;
+package com.mycompany.tictactoeserver.domain.utils.exception;
public class DataAccessException extends Exception {
public DataAccessException(StackTraceElement[] stackTraceElements) {
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/exception/DatabaeDisConnectionException.java b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/DatabaeDisConnectionException.java
similarity index 61%
rename from src/main/java/com/mycompany/tictactoeserver/domain/exception/DatabaeDisConnectionException.java
rename to src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/DatabaeDisConnectionException.java
index aaf8325..3f743c1 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/exception/DatabaeDisConnectionException.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/DatabaeDisConnectionException.java
@@ -2,15 +2,15 @@
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
-package com.mycompany.tictactoeserver.domain.exception;
+package com.mycompany.tictactoeserver.domain.utils.exception;
/**
*
* @author sheri
*/
-public class DatabaeDisConnectionException extends Exception{
- public DatabaeDisConnectionException(StackTraceElement[] stackTrace) {
+public class DatabaeDisConnectionException extends Exception {
+ public DatabaeDisConnectionException(StackTraceElement[] stackTrace) {
super("database-dis-connection-exception");
super.setStackTrace(stackTrace);
- }
+ }
}
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/exception/DatabaseConnectionException.java b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/DatabaseConnectionException.java
similarity index 88%
rename from src/main/java/com/mycompany/tictactoeserver/domain/exception/DatabaseConnectionException.java
rename to src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/DatabaseConnectionException.java
index 9630fab..79651d5 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/exception/DatabaseConnectionException.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/DatabaseConnectionException.java
@@ -2,7 +2,7 @@
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
-package com.mycompany.tictactoeserver.domain.exception;
+package com.mycompany.tictactoeserver.domain.utils.exception;
/**
*
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/exception/ExceptionHandlerMiddleware.java b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/ExceptionHandlerMiddleware.java
similarity index 74%
rename from src/main/java/com/mycompany/tictactoeserver/domain/exception/ExceptionHandlerMiddleware.java
rename to src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/ExceptionHandlerMiddleware.java
index 23027f6..910927a 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/exception/ExceptionHandlerMiddleware.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/ExceptionHandlerMiddleware.java
@@ -1,4 +1,4 @@
-package com.mycompany.tictactoeserver.domain.exception;
+package com.mycompany.tictactoeserver.domain.utils.exception;
import com.mycompany.tictactoeserver.datasource.model.Player;
@@ -29,31 +29,14 @@ public void handleException(Exception ex) {
case "database-connection-exception":
case "database-dis-connection-exception":
case "hashing-exception":
-
- System.out.println("hashing-exception");
- break;
case "room-not-found-exception":
- System.out.println("room-not-found-exception");
- break;
case "room-updation-exception":
- System.out.println("room-updation-exception");
- break;
case "room-creation-exception":
- System.out.println("room-creation-exception");
- break;
case "player-insertion-exception":
case "player-update-exception":
- System.out.println("player-update-exception");
- break;
case "player-deletion-exception":
- System.out.println("player-deletion-exception");
- break;
case "player-not-found-exception":
- System.out.println("player-not-found-exception");
- break;
case "data-access-exception":
- System.out.println("data-access-exception");
- break;
default:
}
@@ -72,9 +55,11 @@ public void handleException(Exception ex, String[] data) {
System.out.println("unknown-exception");
break;
}
+
logError(ex.getMessage(), ex.getStackTrace());
}
+
private void logError(String message, StackTraceElement[] stackTrace) {
System.out.println(message + ": ---> " + Arrays.toString(stackTrace));
}
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/exception/HashingException.java b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/HashingException.java
similarity index 75%
rename from src/main/java/com/mycompany/tictactoeserver/domain/exception/HashingException.java
rename to src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/HashingException.java
index 0eb9a6a..1c87475 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/exception/HashingException.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/HashingException.java
@@ -2,7 +2,7 @@
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
-package com.mycompany.tictactoeserver.domain.exception;
+package com.mycompany.tictactoeserver.domain.utils.exception;
import java.security.NoSuchAlgorithmException;
@@ -10,14 +10,12 @@
*
* @author Hazem
*/
-public class HashingException extends NoSuchAlgorithmException{
+public class HashingException extends NoSuchAlgorithmException {
public HashingException(StackTraceElement[] stackTrace) {
super("hashing-exception");
super.setStackTrace(stackTrace);
}
-
-
-
-
+
+
}
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/exception/PlayerConnectionException.java b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/PlayerConnectionException.java
similarity index 78%
rename from src/main/java/com/mycompany/tictactoeserver/domain/exception/PlayerConnectionException.java
rename to src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/PlayerConnectionException.java
index f83b481..a45aa1c 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/exception/PlayerConnectionException.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/PlayerConnectionException.java
@@ -1,4 +1,4 @@
-package com.mycompany.tictactoeserver.domain.exception;
+package com.mycompany.tictactoeserver.domain.utils.exception;
public class PlayerConnectionException extends Exception {
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/exception/PlayerDeletionException.java b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/PlayerDeletionException.java
similarity index 87%
rename from src/main/java/com/mycompany/tictactoeserver/domain/exception/PlayerDeletionException.java
rename to src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/PlayerDeletionException.java
index 6b9be82..01d5bf9 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/exception/PlayerDeletionException.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/PlayerDeletionException.java
@@ -2,7 +2,7 @@
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
-package com.mycompany.tictactoeserver.domain.exception;
+package com.mycompany.tictactoeserver.domain.utils.exception;
/**
*
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/exception/PlayerInsertionException.java b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/PlayerInsertionException.java
similarity index 76%
rename from src/main/java/com/mycompany/tictactoeserver/domain/exception/PlayerInsertionException.java
rename to src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/PlayerInsertionException.java
index 0e3f30e..30098b6 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/exception/PlayerInsertionException.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/PlayerInsertionException.java
@@ -2,13 +2,13 @@
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
-package com.mycompany.tictactoeserver.domain.exception;
+package com.mycompany.tictactoeserver.domain.utils.exception;
/**
*
* @author sheri
*/
-public class PlayerInsertionException extends Exception{
+public class PlayerInsertionException extends Exception {
public PlayerInsertionException(StackTraceElement[] stackTrace) {
super("player-insertion-exception");
super.setStackTrace(stackTrace);
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/exception/PlayerNotFoundException.java b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/PlayerNotFoundException.java
similarity index 87%
rename from src/main/java/com/mycompany/tictactoeserver/domain/exception/PlayerNotFoundException.java
rename to src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/PlayerNotFoundException.java
index c97b895..0bf7777 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/exception/PlayerNotFoundException.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/PlayerNotFoundException.java
@@ -2,7 +2,7 @@
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
-package com.mycompany.tictactoeserver.domain.exception;
+package com.mycompany.tictactoeserver.domain.utils.exception;
/**
*
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/exception/PlayerReceiveMessageException.java b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/PlayerReceiveMessageException.java
similarity index 79%
rename from src/main/java/com/mycompany/tictactoeserver/domain/exception/PlayerReceiveMessageException.java
rename to src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/PlayerReceiveMessageException.java
index ae61e41..744b8cc 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/exception/PlayerReceiveMessageException.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/PlayerReceiveMessageException.java
@@ -1,4 +1,4 @@
-package com.mycompany.tictactoeserver.domain.exception;
+package com.mycompany.tictactoeserver.domain.utils.exception;
public class PlayerReceiveMessageException extends Exception {
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/exception/PlayerSendMessageException.java b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/PlayerSendMessageException.java
similarity index 78%
rename from src/main/java/com/mycompany/tictactoeserver/domain/exception/PlayerSendMessageException.java
rename to src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/PlayerSendMessageException.java
index ec2e12c..4f4cb9c 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/exception/PlayerSendMessageException.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/PlayerSendMessageException.java
@@ -1,4 +1,4 @@
-package com.mycompany.tictactoeserver.domain.exception;
+package com.mycompany.tictactoeserver.domain.utils.exception;
public class PlayerSendMessageException extends Exception {
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/exception/PlayerUpdateException.java b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/PlayerUpdateException.java
similarity index 87%
rename from src/main/java/com/mycompany/tictactoeserver/domain/exception/PlayerUpdateException.java
rename to src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/PlayerUpdateException.java
index 7e33afb..b252da9 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/exception/PlayerUpdateException.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/PlayerUpdateException.java
@@ -2,7 +2,7 @@
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
-package com.mycompany.tictactoeserver.domain.exception;
+package com.mycompany.tictactoeserver.domain.utils.exception;
/**
*
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/exception/RoomCreationException.java b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/RoomCreationException.java
similarity index 63%
rename from src/main/java/com/mycompany/tictactoeserver/domain/exception/RoomCreationException.java
rename to src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/RoomCreationException.java
index ecd0114..da72f89 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/exception/RoomCreationException.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/RoomCreationException.java
@@ -2,17 +2,17 @@
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
-package com.mycompany.tictactoeserver.domain.exception;
+package com.mycompany.tictactoeserver.domain.utils.exception;
/**
*
- * @author mahmoud
+ * @author mahmoud
*/
-public class RoomCreationException extends Exception{
-
- public RoomCreationException(StackTraceElement[] stackTrace){
- super("room-creation-exception");
+public class RoomCreationException extends Exception {
+
+ public RoomCreationException(StackTraceElement[] stackTrace) {
+ super("room-creation-exception");
super.setStackTrace(stackTrace);
}
-
+
}
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/exception/RoomNotFoundException.java b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/RoomNotFoundException.java
similarity index 67%
rename from src/main/java/com/mycompany/tictactoeserver/domain/exception/RoomNotFoundException.java
rename to src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/RoomNotFoundException.java
index 5c02434..aeb7dad 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/exception/RoomNotFoundException.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/RoomNotFoundException.java
@@ -2,16 +2,16 @@
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
-package com.mycompany.tictactoeserver.domain.exception;
+package com.mycompany.tictactoeserver.domain.utils.exception;
/**
*
* @author mahmoud
*/
-public class RoomNotFoundException extends Exception{
- public RoomNotFoundException(StackTraceElement[] stackTrace){
- super("room-not-found-exception");
+public class RoomNotFoundException extends Exception {
+ public RoomNotFoundException(StackTraceElement[] stackTrace) {
+ super("room-not-found-exception");
super.setStackTrace(stackTrace);
}
-
+
}
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/exception/RoomUpdationException.java b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/RoomUpdationException.java
similarity index 75%
rename from src/main/java/com/mycompany/tictactoeserver/domain/exception/RoomUpdationException.java
rename to src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/RoomUpdationException.java
index a529cca..2d082b3 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/exception/RoomUpdationException.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/RoomUpdationException.java
@@ -2,17 +2,17 @@
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
-package com.mycompany.tictactoeserver.domain.exception;
+package com.mycompany.tictactoeserver.domain.utils.exception;
/**
*
* @author mahmoud
*/
-public class RoomUpdationException extends Exception{
-
- public RoomUpdationException(StackTraceElement[] stackTrace){
+public class RoomUpdationException extends Exception {
+
+ public RoomUpdationException(StackTraceElement[] stackTrace) {
super("room-updation-exception");
super.setStackTrace(stackTrace);
}
-
+
}
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/exception/ServerInterruptException.java b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/ServerInterruptException.java
similarity index 78%
rename from src/main/java/com/mycompany/tictactoeserver/domain/exception/ServerInterruptException.java
rename to src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/ServerInterruptException.java
index 9a52313..65a3b87 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/exception/ServerInterruptException.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/ServerInterruptException.java
@@ -1,4 +1,4 @@
-package com.mycompany.tictactoeserver.domain.exception;
+package com.mycompany.tictactoeserver.domain.utils.exception;
public class ServerInterruptException extends Exception {
public ServerInterruptException(StackTraceElement[] stackTrace) {
diff --git a/src/main/java/com/mycompany/tictactoeserver/domain/exception/StopServerException.java b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/StopServerException.java
similarity index 77%
rename from src/main/java/com/mycompany/tictactoeserver/domain/exception/StopServerException.java
rename to src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/StopServerException.java
index f45c149..3d11c15 100644
--- a/src/main/java/com/mycompany/tictactoeserver/domain/exception/StopServerException.java
+++ b/src/main/java/com/mycompany/tictactoeserver/domain/utils/exception/StopServerException.java
@@ -1,4 +1,4 @@
-package com.mycompany.tictactoeserver.domain.exception;
+package com.mycompany.tictactoeserver.domain.utils.exception;
public class StopServerException extends Exception {
diff --git a/src/main/java/com/mycompany/tictactoeserver/presentation/MainScreenController.java b/src/main/java/com/mycompany/tictactoeserver/presentation/MainScreenController.java
index 97da7ee..9cd2376 100644
--- a/src/main/java/com/mycompany/tictactoeserver/presentation/MainScreenController.java
+++ b/src/main/java/com/mycompany/tictactoeserver/presentation/MainScreenController.java
@@ -22,9 +22,8 @@ public void initialize(URL url, ResourceBundle resourceBundle) {
private void toggleServer() {
GameServerManager serverManager = GameServerManager.getInstance();
- try
- {
- if(!serverManager.isRunning()){
+ try {
+ if (!serverManager.isRunning()) {
serverManager.start();
centerButton.setText("Stop Server");
return;
@@ -32,12 +31,10 @@ private void toggleServer() {
serverManager.stop();
centerButton.setText("Start Server");
- }
- catch (Exception e)
- {
+ } catch (Exception e) {
System.out.println("Msg: " + e.getMessage());
System.out.println("Trace: " + Arrays.toString(e.getStackTrace()));
- showAlert(Alert.AlertType.ERROR, e.getMessage(), Arrays.toString(e.getStackTrace()));
+ showAlert(Alert.AlertType.ERROR, e.getMessage(), Arrays.toString(e.getStackTrace()));
}
}
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index fb77551..0186d4b 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -12,7 +12,7 @@
exports com.mycompany.tictactoeserver;
exports com.mycompany.tictactoeserver.presentation;
exports com.mycompany.tictactoeserver.domain.server;
- exports com.mycompany.tictactoeserver.domain.exception;
+ exports com.mycompany.tictactoeserver.domain.utils.exception;
exports com.mycompany.tictactoeserver.domain.utils.callbacks;
exports com.mycompany.tictactoeserver.datasource.model;
diff --git a/src/main/resources/com/mycompany/tictactoeserver/presentation/main_screen.fxml b/src/main/resources/com/mycompany/tictactoeserver/presentation/main_screen.fxml
index 09bce10..e97408b 100644
--- a/src/main/resources/com/mycompany/tictactoeserver/presentation/main_screen.fxml
+++ b/src/main/resources/com/mycompany/tictactoeserver/presentation/main_screen.fxml
@@ -1,10 +1,12 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/src/main/resources/database/database.sql b/src/main/resources/database/database.sql
index 75c4213..f5f08e6 100644
--- a/src/main/resources/database/database.sql
+++ b/src/main/resources/database/database.sql
@@ -1,9 +1,9 @@
-
-create table Player (
- id varchar(36) primary key,
- username varchar(50) not null unique,
+create table Player
+(
+ id varchar(36) primary key,
+ username varchar(50) not null unique,
password varchar(100) not null,
- score int default 0 -- start with 0 scoree by default
+ score int default 0
);
create table Activity (
@@ -12,5 +12,5 @@ create table Activity (
start_time timestamp,
end_time timestamp,
constraint fk_activity_player foreign key (player_id)
- references player(id)
+ references player (id)
);