Guest User

Untitled

a guest
Jan 16th, 2014
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.15 KB | None | 0 0
  1. package main;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.DataInputStream;
  5. import java.io.DataOutputStream;
  6. import java.io.IOException;
  7. import java.io.InputStreamReader;
  8. import java.net.ServerSocket;
  9. import java.net.Socket;
  10. import java.text.DateFormat;
  11. import java.text.SimpleDateFormat;
  12. import java.util.Calendar;
  13. import java.util.Timer;
  14. import java.util.TimerTask;
  15.  
  16. import login.Login;
  17.  
  18. public class Server extends Thread {
  19.  
  20. private boolean running;
  21. private Socket connection;
  22. private ServerSocket serverSocket;
  23. public DataOutputStream socketOut;
  24. public DataInputStream socketIn;
  25. final private int MAX_CLIENTS = 3000;
  26. final private SubServer[] clientConnections = new SubServer[MAX_CLIENTS];
  27. final private static int port = 43594;
  28. private ControlPanel cp;
  29.  
  30. public static void main(String[] args) throws IOException {
  31. new Server(port).createConnection();
  32. }
  33.  
  34. public Server(int port) throws IOException {
  35. running = true;
  36. this.serverSocket = new ServerSocket(port);
  37. cp = new ControlPanel();
  38. load();
  39. start();
  40. }
  41.  
  42. private void load() {
  43. DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
  44. Calendar cal = Calendar.getInstance();
  45. ControlPanel.append("[" + dateFormat.format(cal.getTime()) + "]:"
  46. + " Server is now online!");
  47. }
  48.  
  49. private void createConnection() {
  50. try {
  51. connection = this.serverSocket.accept();
  52. socketOut = new DataOutputStream(connection.getOutputStream());
  53. socketIn = new DataInputStream(connection.getInputStream());
  54. assignConnectionToSubServer(connection);
  55. } catch (IOException e) {
  56. e.printStackTrace();
  57. }
  58. }
  59.  
  60. private void assignConnectionToSubServer(Socket connection) {
  61. for (int i = 0; i < MAX_CLIENTS; i++) {
  62. if (clientConnections[i] == null) {
  63. clientConnections[i] = new SubServer(connection, i, this,
  64. socketOut, socketIn);
  65. break;
  66. }
  67. }
  68. }
  69.  
  70. public boolean kick(String username) {
  71. for (int i = 0; i < MAX_CLIENTS; i++) {
  72. try {
  73. if (clientConnections[i].getUsername().equals(username)) {
  74. clientConnections[i].close();
  75. clientConnections[i] = null;
  76. return true;
  77. }
  78. } catch (NullPointerException e) {
  79. }
  80. }
  81. return false;
  82. }
  83. }
  84.  
  85. class SubServer extends Thread {
  86.  
  87. final private int id;
  88. final private Socket connection;
  89. private String username;
  90. private String password;
  91. private Server server;
  92. private DataOutputStream socketOut;
  93. private DataInputStream socketIn;
  94. private BufferedReader br;
  95.  
  96. public SubServer(Socket connection, int id, Server server,
  97. DataOutputStream socketOut, DataInputStream socketIn) {
  98. this.id = id;
  99. this.connection = connection;
  100. this.server = server;
  101. this.socketOut = socketOut;
  102. this.socketIn = socketIn;
  103. this.br = new BufferedReader(new InputStreamReader(socketIn));
  104. userLoop();
  105. start();
  106. }
  107.  
  108. private void userLoop() { // checks for incoming data from client
  109. Timer t = new Timer();
  110. t.schedule(new TimerTask() {
  111. @Override
  112. public void run() {
  113. try {
  114. socketIn.read(); // check for heartbeat from client
  115.  
  116. String userInput;
  117. while ((userInput = br.readLine()) != null) {
  118. }
  119.  
  120. } catch (Exception e) {
  121. ControlPanel.model.removeElement(getUsername());
  122. ControlPanel.append(getUsername() + " has disconnected.");
  123. }
  124. }
  125. }, 1000);
  126. }
  127.  
  128. public String getUsername() {
  129. return username;
  130. }
  131.  
  132. public String getPassword() {
  133. return password;
  134. }
  135.  
  136. public int getUserID() {
  137. return id;
  138. }
  139.  
  140. @Override
  141. public void run() {
  142. while (!interrupted()) {
  143. try {
  144. username = socketIn.readUTF();
  145. password = socketIn.readUTF();
  146. Login.login(username, password, socketOut);
  147. int i = socketIn.readInt();
  148. if (i == 1) {
  149. ControlPanel.model.addElement(username);
  150. ControlPanel.append(getUsername() + " connected using "
  151. + connection.getRemoteSocketAddress());
  152. break;
  153. } else if (i == 0) {
  154. // do nothing, ignore it. client heartbeat
  155. break;
  156. }
  157. } catch (IOException e) {
  158. // e.printStackTrace();
  159. }
  160. }
  161. }
  162.  
  163. public void close() {
  164. try {
  165. this.connection.close();
  166. } catch (IOException e) {
  167. }
  168. }
  169. }
Advertisement
Add Comment
Please, Sign In to add comment