1.7.3 : One instance only and launching another one spawn a mario
This commit is contained in:
@@ -15,6 +15,8 @@ import java.util.Random;
|
|||||||
|
|
||||||
import javax.swing.SwingUtilities;
|
import javax.swing.SwingUtilities;
|
||||||
|
|
||||||
|
import fr.klemek.minimario.LocalServer.ConnectionListener;
|
||||||
|
|
||||||
public abstract class Launch {
|
public abstract class Launch {
|
||||||
|
|
||||||
private static final String VERSION = "1.7.2";
|
private static final String VERSION = "1.7.2";
|
||||||
@@ -32,6 +34,18 @@ public abstract class Launch {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
|
LocalServer.startServer(new ConnectionListener(){
|
||||||
|
@Override
|
||||||
|
public void onConnection() {
|
||||||
|
try {
|
||||||
|
new MarioWindow(null, currentFactor, null);
|
||||||
|
refreshTray();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
new MarioWindow(null, currentFactor, null);
|
new MarioWindow(null, currentFactor, null);
|
||||||
addTrayIcon(MarioWindow.getAll().get(0));
|
addTrayIcon(MarioWindow.getAll().get(0));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
|||||||
@@ -0,0 +1,68 @@
|
|||||||
|
package fr.klemek.minimario;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.net.ServerSocket;
|
||||||
|
import java.net.Socket;
|
||||||
|
|
||||||
|
public class LocalServer extends Thread {
|
||||||
|
|
||||||
|
public static final int[] PORTS = {34881, 41834, 16118, 24326}; //4 random, one should be available
|
||||||
|
|
||||||
|
public static final String CONTACT = "MiniMario !";
|
||||||
|
|
||||||
|
private ServerSocket serverSocket = null;
|
||||||
|
private Socket clientSocket = null;
|
||||||
|
|
||||||
|
private ConnectionListener listener;
|
||||||
|
|
||||||
|
public LocalServer(ConnectionListener listener){
|
||||||
|
this.listener = listener;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
int i = 0;
|
||||||
|
while(i<PORTS.length){
|
||||||
|
try {
|
||||||
|
System.out.println("Starting MiniMario local server on port "+PORTS[i]+" ...");
|
||||||
|
serverSocket = new ServerSocket(PORTS[i], 1);
|
||||||
|
System.out.println("Started MiniMario local server on port "+PORTS[i]);
|
||||||
|
while (true) {
|
||||||
|
clientSocket = serverSocket.accept();
|
||||||
|
PrintWriter pw = new PrintWriter(clientSocket.getOutputStream());
|
||||||
|
pw.println(CONTACT);
|
||||||
|
pw.flush();
|
||||||
|
if(listener!=null)
|
||||||
|
listener.onConnection();
|
||||||
|
clientSocket.close();
|
||||||
|
}
|
||||||
|
} catch (IOException ioe) {
|
||||||
|
System.out.println("Error in LocalServer: " + ioe);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
System.out.println("Couldn't start MiniMario local server on given ports");
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("resource")
|
||||||
|
public static void startServer(ConnectionListener listener){
|
||||||
|
for(int port:PORTS){
|
||||||
|
try {
|
||||||
|
Socket socket = new Socket("localhost", port);
|
||||||
|
BufferedReader br = new BufferedReader (new InputStreamReader (socket.getInputStream()));
|
||||||
|
String serverResponse = br.readLine();
|
||||||
|
if(serverResponse.equals(CONTACT)){
|
||||||
|
System.out.println("Already running MiniMario local server on port : "+port);
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {}
|
||||||
|
}
|
||||||
|
new LocalServer(listener).start();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected interface ConnectionListener{
|
||||||
|
public void onConnection();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -112,6 +112,8 @@ public class MarioWindow extends JWindow implements ActionListener {
|
|||||||
this.ai.setPos(this.getLocation());
|
this.ai.setPos(this.getLocation());
|
||||||
|
|
||||||
this.refresh.start();
|
this.refresh.start();
|
||||||
|
|
||||||
|
System.out.println("Spawned "+tilesetName+" at ("+this.getX()+","+this.getY()+")");
|
||||||
}
|
}
|
||||||
|
|
||||||
//functions
|
//functions
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ public class TilePanel extends JPanel {
|
|||||||
this.imageHeight = image.getHeight();
|
this.imageHeight = image.getHeight();
|
||||||
this.columns = this.imageWidth / this.tileWidth;
|
this.columns = this.imageWidth / this.tileWidth;
|
||||||
this.rows = this.imageHeight / this.tileHeight;
|
this.rows = this.imageHeight / this.tileHeight;
|
||||||
System.out.println("Tileset : "+this.columns+"x"+this.rows);
|
|
||||||
this.setFactor(factor);
|
this.setFactor(factor);
|
||||||
this.setBackground(new Color(0, 0, 0, 0));
|
this.setBackground(new Color(0, 0, 0, 0));
|
||||||
this.setOpaque(false);
|
this.setOpaque(false);
|
||||||
|
|||||||
Reference in New Issue
Block a user