Advertisement
Guest User

Untitled

a guest
Mar 30th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.77 KB | None | 0 0
  1. package networkBomberman;
  2.  
  3. import java.io.DataOutputStream;
  4. import java.io.IOException;
  5. import java.io.OutputStreamWriter;
  6. import java.net.ServerSocket;
  7. import java.net.Socket;
  8. import java.util.ArrayList;
  9. import java.util.Iterator;
  10. import java.util.LinkedList;
  11. import java.util.Timer;
  12. import java.util.concurrent.ExecutorService;
  13. import java.util.concurrent.Executors;
  14.  
  15. import org.json.JSONObject;
  16.  
  17. import dev.code.bomberman.Game;
  18.  
  19. public class BombermanGameServer implements Runnable {
  20.  
  21. private static ServerSocket socketBombermanGameServer = null;
  22. private int port = 0;
  23.  
  24. static ExecutorService clientHandlerPool = null;
  25. static int player = 4;
  26. private int clientID = 0; //Fuer jeden Client eine und gleichzeitig Anzahl der Clients
  27.  
  28. static boolean gameOver = false;
  29. boolean gameStart = false;
  30.  
  31. static LinkedList<String> msgQueue = null;
  32. static ArrayList<OutputStreamWriter> writer_list = null;
  33.  
  34. static Timer timer;
  35. static int delay = 0;
  36. static int period = 50;
  37. static int tick = 0;
  38.  
  39. static String[] playerName;
  40.  
  41. private int myGameServerID = 0;
  42.  
  43. BombermanGameServer(int gameServerID, int port){
  44. this.myGameServerID = gameServerID;
  45. this.port = port;
  46. BombermanManagementServer.addNewBombermanGameServer(this); //Fuegt sich selbst eine Liste der Server ein die noch nicht das Spiel gestartet haben
  47. }
  48.  
  49. //Setter
  50. public void setSocket(Socket socket){
  51. addNewClient(socket);
  52. }
  53.  
  54. //Getter
  55. public int getMyID(){
  56. return this.myGameServerID;
  57. }
  58.  
  59. public int getClientID(){
  60. return this.clientID;
  61. }
  62.  
  63. public void run() {
  64. startBombermanGameServer();
  65. startTickTimer();
  66. while(this.clientID < 2){ //Irgendeine Wartemethode
  67. try {
  68. Thread.sleep(100);
  69. } catch (InterruptedException e) {
  70. // TODO Auto-generated catch block
  71. e.printStackTrace();
  72. }
  73. }
  74. Game game = new Game("Title!", 1000, 1000);
  75. game.start();
  76. this.gameStart = true;
  77. while(gameOver == false){
  78.  
  79. if(!msgQueue.isEmpty()){
  80. readMsgQueue();
  81. }
  82.  
  83. try {
  84. Thread.sleep(25);
  85. } catch (InterruptedException e) {
  86. // TODO Auto-generated catch block
  87. e.printStackTrace();
  88. }
  89.  
  90. }
  91. closeBombermanGameServer();
  92. }
  93.  
  94. private static void startTickTimer() {
  95. timer = new Timer();
  96. TickTimer tickTimer = new TickTimer();
  97. timer.scheduleAtFixedRate(tickTimer, delay, period);
  98. }
  99. /**
  100. * Thread liest die Beschriebene msgQueue aus und fРЎРЉgt seine ID hinzu, die der ID des Clients entspricht.
  101. * @param msgQueue
  102. * @return Oberster Eintrag der MsgQueue
  103. */
  104. public static String readMsgQueue()
  105. {
  106. String output;
  107. output = msgQueue.getFirst();
  108. output = output + " " + tick;
  109. msgQueue.removeFirst();
  110. return output;
  111. }
  112.  
  113.  
  114. /**
  115. * Versenden ein JSONObject an alle Clients, funktion wird zum versenden der InitialMatrix und der VerР Т‘nderungen im Spiel verwendet
  116. * @param Message
  117. */
  118.  
  119. public static void broadcastToClient(JSONObject player, JSONObject game)
  120. {//BENUTZEN clientToServerJson(String command, String msg){
  121.  
  122. Iterator<OutputStreamWriter> it = writer_list.iterator();
  123. while(it.hasNext()){
  124. OutputStreamWriter writer = it.next();
  125. try {
  126. writer.write(player.toString().length() + 1 + player.toString() + "\n");
  127. writer.flush();
  128. writer.write(game.toString().length() + 1 + game.toString() + "\n");
  129. writer.flush();
  130. } catch (IOException e) {
  131. // TODO Auto-generated catch block
  132. e.printStackTrace();
  133. }
  134. }
  135. }
  136.  
  137. //zum Versenden von Aenderungen
  138. public static void sendToAllClients(JSONObject jsonObject)
  139. {//BENUTZEN clientToServerJson(String command, String msg){
  140.  
  141. Iterator<OutputStreamWriter> it = writer_list.iterator();
  142. while(it.hasNext()){
  143. OutputStreamWriter writer = it.next();
  144. try {
  145. writer.write(jsonObject.toString().length() + 1 + jsonObject.toString() + "\n");
  146. writer.flush();
  147. } catch (IOException e) {
  148. // TODO Auto-generated catch block
  149. e.printStackTrace();
  150. }
  151. }
  152. }
  153.  
  154.  
  155. private static void closeBombermanGameServer() {
  156. try {
  157. socketBombermanGameServer.close();
  158. } catch (IOException e) {
  159. // TODO Auto-generated catch block
  160. e.printStackTrace();
  161. }
  162. }
  163.  
  164. private void addNewClient(Socket socket){
  165. DataOutputStream output;
  166. try {
  167. output = new DataOutputStream(socket.getOutputStream());
  168. OutputStreamWriter serverWriter = new OutputStreamWriter(output, "UTF-8");
  169. writer_list.add(serverWriter);
  170. clientHandlerPool.execute(new BombermanGameClientHandler(socket, this.clientID));
  171. clientID++;
  172. } catch (IOException e) {
  173. // TODO Auto-generated catch block
  174. e.printStackTrace();
  175. }
  176.  
  177. }
  178.  
  179. private void startBombermanGameServer() {
  180. try {
  181. socketBombermanGameServer = new ServerSocket(this.port);
  182. } catch (IOException e) {
  183. // TODO Auto-generated catch block
  184. e.printStackTrace();
  185. }
  186. msgQueue = new LinkedList<String>();
  187. clientHandlerPool = Executors.newFixedThreadPool(player);
  188. writer_list = new ArrayList<OutputStreamWriter>();
  189. System.out.println("Server has started");
  190.  
  191. }
  192.  
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement