Skip to content
Snippets Groups Projects
Commit 7f4358a3 authored by Leonard Haddad's avatar Leonard Haddad :rocket:
Browse files

Merge branch 'network' into 'master'

Network

See merge request reswp-2020/galaxytrucker!68
parents a6be7621 5e471a07
No related branches found
No related tags found
No related merge requests found
package com.galaxytrucker.galaxytruckerreloaded.Communication;
import com.galaxytrucker.galaxytruckerreloaded.Server.RequestObject;
import com.galaxytrucker.galaxytruckerreloaded.Server.ResponseObject;
import lombok.NonNull;
import java.io.*;
import java.net.Socket;
public class Client {
/**
* Client socket for network communication
*/
private Socket socket;
private ClientControllerCommunicator clientControllerCommunicator;
/**
* Used to send data
*/
private PrintWriter send;
/**
* - Request and Response from and to the server.
* */
public String sendAndReceive(){
// View clicks something
// Controller issues a request
// Client ships request to server
// receive response
// give response to controller
// update views
// return server response as string
return null;
}
* Used to receive data
*/
private BufferedReader receive;
/** Constructor
* Loop for receiving Data
* */
public Client(){
clientControllerCommunicator = new ClientControllerCommunicator();
// Connect to server
/**
* ObjectOutputStream for sending objects
*/
private ObjectOutputStream sendObject;
/**
* ObjectInputStream for receiving objects
*/
private ObjectInputStream receiveObject;
/**
* Send a request to the server
* @return the server's response
*/
public ResponseObject sendAndReceive(RequestObject requestObject) throws IllegalArgumentException {
try {
// Send login request
// receive true/false
// send ship request
//clientControllerCommunicator.setClientShip();
sendObject.writeObject(requestObject);
return (ResponseObject) receiveObject.readObject();
}
catch (Exception e){
e.printStackTrace();
throw new IllegalArgumentException(e.getMessage());
}
}
/**
* Login
*/
public boolean login(String username) throws IllegalArgumentException {
try {
send.println("[LOGIN]:" + username);
return receive.readLine().equals("[ACCEPTED]");
} catch (Exception e) {
e.printStackTrace();
throw new IllegalArgumentException(e.getMessage());
}
while (true){
sendAndReceive();
}
/**
* Constructor
*/
public Client(@NonNull String ipAddress, @NonNull int port) throws IllegalArgumentException {
try {
socket = new Socket(ipAddress, port);
send = new PrintWriter(socket.getOutputStream(), true);
receive = new BufferedReader(new InputStreamReader(socket.getInputStream()));
sendObject = new ObjectOutputStream(socket.getOutputStream());
receiveObject = new ObjectInputStream(socket.getInputStream());
} catch (Exception e) {
e.printStackTrace();
throw new IllegalArgumentException("Couldn't initialize connection to server");
}
}
}
package com.galaxytrucker.galaxytruckerreloaded.Server;
import java.io.*;
import java.net.Socket;
public class ClientHandler implements Runnable {
/** Client socket */
private Socket clientSocket;
/** The server */
public Server server;
/** ServerServiceCommunicator */
private ServerServiceCommunicator serverServiceCommunicator;
/** Used to send data */
private PrintWriter send;
/** Used to receive data */
private BufferedReader receive;
/** ObjectOutputStream for sending objects */
private ObjectOutputStream sendObject;
/** ObjectInputStream for receiving objects */
private ObjectInputStream receiveObject;
/** Constructor
* @param clientSocket - the client's socket
* @param server - the server */
public ClientHandler(Socket clientSocket,Server server) throws IllegalArgumentException {
this.clientSocket = clientSocket;
this.server = server;
try {
sendObject = new ObjectOutputStream(clientSocket.getOutputStream());
receiveObject = new ObjectInputStream(clientSocket.getInputStream());
send = new PrintWriter(clientSocket.getOutputStream(),true);
receive = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
}
catch (Exception e){
e.printStackTrace();
throw new IllegalArgumentException();
}
}
/** Run */
public void run(){
}
}
package com.galaxytrucker.galaxytruckerreloaded.Server;
import com.galaxytrucker.galaxytruckerreloaded.Model.Ship;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class RequestObject {
/** Type of Request */
private RequestType requestType;
/** Username */
private String username;
/** Ship */
private Ship ship;
}
package com.galaxytrucker.galaxytruckerreloaded.Server;
public enum RequestType {
LOGIN
}
package com.galaxytrucker.galaxytruckerreloaded.Server;
public class ResponseObject {
}
package com.galaxytrucker.galaxytruckerreloaded.Server;
import com.galaxytrucker.galaxytruckerreloaded.Communication.Client;
import java.net.ServerSocket;
import java.net.Socket;
/**
* This class creates the game server and handles storing the data
*/
public class Server {
public class Server implements Runnable{
/** Server socket for network communication */
private ServerSocket serverSocket;
/** Server thread */
private Thread serverThread;
/** Server service communicator */
/** ServerServiceCommunicator */
private ServerServiceCommunicator serverServiceCommunicator;
/** Server port */
private int port;
/** Is the server running? */
private boolean running = true;
/** Main method */
public static void main(String[] args){}
public static void main(String[] args){
Server server = new Server();
server.setPort(5050);
server.serverServiceCommunicator = new ServerServiceCommunicator();
new Thread(server).start();
try {
Thread.sleep(1000);
}
catch (Exception f){
System.out.println(f);
}
Client client = new Client("localhost",5050);
}
/** Client handler
* @param socket - the client's socket */
private void clientHandler(Socket socket){
/** Start server on specified port
* @param port - the port to bind */
private void bindPort(int port) {
try {
this.serverSocket = new ServerSocket(port);
}
catch (Exception e){
e.printStackTrace();
}
}
/** Is the server running? */
private synchronized boolean isRunning(){
return this.running;
}
/** Kill server */
public synchronized void killServer(){
try {
this.serverSocket.close();
this.running = false;
}
catch (Exception e){
e.printStackTrace();
}
}
/** Receive some data from the client and return a response
* @param socket - the client socket */
private void receiveAndSendData(Socket socket){
/** Get the serverServiceCommunicator */
public synchronized ServerServiceCommunicator getServerServiceCommunicator(){
return this.serverServiceCommunicator;
}
/** Run the server */
public void run(){
synchronized (this){
this.serverThread = Thread.currentThread();
}
bindPort(this.port);
System.out.println("Server initialized on " + serverSocket.getInetAddress().getHostAddress() + ":" + this.port + ", listening for connections...");
while (isRunning()){
Socket clientSocket = null;
try {
clientSocket = serverSocket.accept();
System.out.println("Accepted new connection from "+ clientSocket.getInetAddress().getHostAddress());
}
catch (Exception e){
e.printStackTrace();
}
Server server = this;
new Thread(
new ClientHandler(clientSocket,server)
).start();
}
}
/** Set the server port
* @param port - the server port */
public void setPort(int port){
this.port = port;
}
}
......@@ -2,7 +2,6 @@ package com.galaxytrucker.galaxytruckerreloaded.Server;
import com.galaxytrucker.galaxytruckerreloaded.Model.Ship;
import lombok.AccessLevel;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor(access = AccessLevel.PUBLIC)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment