Java source code Gobang network (b)

  Java source code Gobang network (b) 
  [Source: CSDN hits: 707 Author: NA] 

  /************************************************* Attachments 
  Finally: chessServer.java 
  ************************************************** *****************************************/ 
  Import java.io. *; 
  Import java.net .*; 
  Import java.awt .*; 
  Import java.util .*; 
  Import java.awt.event .*; 
  Class MessageServer extends Panel / / implements ActionListener 
  ( 
  TextArea messageBoard = new TextArea ( "", 22,50, TextArea.SCROLLBARS_VERTICAL_ONLY); 
  Label statusLabel = new Label ( "current link:" Label.LEFT); 
  Panel boardPanel = new Panel (); 
  Panel statusPanel = new Panel (); 

  MessageServer () 
  ( 
  SetSize (350,300); 
  SetBackground (Color.pink); 
  SetLayout (new BorderLayout ()); 
  BoardPanel.setLayout (new FlowLayout ()); 
  BoardPanel.setSize (210,210); 
  StatusPanel.setLayout (new BorderLayout ()); 
  StatusPanel.setSize (210,50); 
  BoardPanel.add (messageBoard); 
  StatusPanel.add (statusLabel, BorderLayout.WEST); 
  Add (boardPanel, BorderLayout.CENTER); 
  Add (statusPanel, BorderLayout.NORTH); 
  ) 
  ) 

  Class ServerThread extends Thread 
  ( 
  Socket clientSocket; 
  Hashtable clientDataHash; 
  Hashtable clientNameHash; 
  Hashtable chessPeerHash; 
  MessageServer server; 

  Boolean isClientClosed = false; 

  ServerThread (Socket clientSocket, Hashtable clientDataHash, Hashtable clientNameHash, Hashtable chessPeerHash, MessageServer server) 
  ( 
  This.clientSocket = clientSocket; 
  This.clientDataHash = clientDataHash; 
  This.clientNameHash = clientNameHash; 
  This.chessPeerHash = chessPeerHash; 
  This.server = server; 
  ) 

  Public void messageTransfer (String message) 
  ( 
  String clientName, peerName; 

  If (message.startsWith ("/")) 
  ( 

  If (message.startsWith ( "/ changename")) 
  ( 
  ClientName = message.substring (12); 
  If (clientName.length () <= 0 | | clientName.length ()> 20 | | 
  ClientName.startsWith ("/") | | clientNameHash.containsValue (clientName) | | 
  ClientName.startsWith ( "changename") | | clientName.startsWith (the "list") | | 
  ClientName.startsWith ( "[inchess]") | | clientName.startsWith ( "creatgame") | | 
  ClientName.startsWith ( "joingame") | | clientName.startsWith ( "yourname") | | 
  ClientName.startsWith ( "userlist") | | clientName.startsWith ( "chess") | | 
  ClientName.startsWith ( "OK") | | clientName.startsWith ( "reject") | | 
  ClientName.startsWith ( "peer") | | clientName.startsWith ( "peername") | | 
  ClientName.startsWith ( "giveup") | | clientName.startsWith ( "youwin") | | 
  ClientName.startsWith ( "all")) 
  ( 
  Message = "null and void order"; 
  Feedback (message); 
  ) 
  Else 
  ( 
  If (clientNameHash.containsValue (( "[inchess]" + (String) clientNameHash.get (clientSocket)))) 
  ( 
  Synchronized (clientNameHash) 
  ( 
  ClientNameHash.put ((Socket) getHashKey (clientNameHash, ( "[inchess]" + clientNameHash.get (clientSocket))), 
  ( "[Inchess]" + clientName)); 
  ChessPeerTalk (( "[inchess]" + clientName ),("/ yourname "+("[ inchess] "+ clientName))); 
  ) 
  ) 
  Else if (chessPeerHash.containsKey (clientNameHash.get (clientSocket))) 
  ( 
  / / Client to name game 
  Synchronized (clientNameHash) 
  ( 
  ClientNameHash.put ((Socket) getHashKey (clientNameHash, ( "[inchess]" + clientNameHash.get (clientSocket))), 
  ( "[Inchess]" + clientName)); 
  ) 

  Synchronized (chessPeerHash) 
  ( 
  / / Add a new name mapping chessPeerHash 
  ChessPeerHash.put (clientName, chessPeerHash.get (clientNameHash.get (clientSocket))); 
  / / Delete the old mapping chessPeerHash 
  ChessPeerHash.remove (clientNameHash.get (clientSocket)); 
  ) 
  / / Client sent the game to new name 
  ChessPeerTalk (( "[inchess]" + clientName ),("/ yourname "+("[ inchess] "+ clientName))); 
  / / To peer client sent the game 
  ChessPeerTalk ((String) chessPeerHash.get (clientName ),("/ peer "+" [inchess] "+ clientName)); 

  ) 
  Else if (chessPeerHash.containsValue (clientNameHash.get (clientSocket))) 
  ( 
  Synchronized (clientNameHash) 
  ( 
  / / Client to name game 
  ClientNameHash.put ((Socket) getHashKey (clientNameHash, ( "[inchess]" + clientNameHash.get (clientSocket))), 
  ( "[Inchess]" + clientName)); 
  ) 
  Synchronized (chessPeerHash) 
  ( 
  / / ChessPeerHash re-mapping 
  ChessPeerHash.put ((String) getHashKey (chessPeerHash, clientNameHash.get (clientSocket)), clientName); 
  / / Client sent the game to new name 
  ChessPeerTalk (( "[inchess]" + clientName ),("/ yourname "+("[ inchess] "+ clientName))); 
  ) 
  / / To peer client sent the game 
  ChessPeerTalk ((String) getHashKey (chessPeerHash, clientName ),("/ peer "+" [inchess] "+ clientName)); 

  ) 

  Message = clientNameHash.get (clientSocket) + "name:" + clientName; 
  Synchronized (clientNameHash) 
  ( 
  ClientNameHash.put (clientSocket, clientName); 
  ) 
  PublicTalk (message); 
  Feedback ( "/ yourname" + (String) clientNameHash.get (clientSocket)); 
  PublicTalk (getUserList ()); 

  ) 

  ) 
  Else if (message.equals ( "/ list")) 
  ( 
  Feedback (getUserList ()); 
  ) 
  Else if (message.startsWith ( "/ creatgame [inchess]")) 
  ( 
  String chessServerName = message.substring (20); 
  Synchronized (clientNameHash) 
  ( 
  ClientNameHash.put (clientSocket, message.substring (11)); 
  ) 
  Synchronized (chessPeerHash) 
  ( 
  ChessPeerHash.put (chessServerName, "wait"); 
  ) 
  Feedback ( "/ yourname" + clientNameHash.get (clientSocket)); 
  ChessPeerTalk (chessServerName, "/ OK"); 
  PublicTalk (getUserList ()); 
  ) 
  Else if (message.startsWith ( "/ joingame")) 
  ( 
  StringTokenizer userToken = new StringTokenizer (message, ""); 
  String getUserToken, serverName, selfName; 
  ChessNameOpt String [] = ( "0", "0"); 
  Int getOptNum = 0; 

  While (userToken.hasMoreTokens ()) 
  ( 
  GetUserToken = (String) userToken.nextToken ( ""); 
  If (getOptNum> = 1 & & getOptNum <= 2) 
  ( 
  ChessNameOpt [getOptNum-1] = getUserToken; 
  ) 
  GetOptNum + +; 
  ) 
  ChessNameOpt serverName = [0]; 
  ChessNameOpt selfName = [1]; 

  If (chessPeerHash.containsKey (serverName) & & chessPeerHash.get (serverName). Equals ( "wait")) 
  ( 
  Synchronized (clientNameHash) 
  ( 
  ClientNameHash.put (clientSocket, ( "[inchess]" + selfName)); 
  ) 
  Synchronized (chessPeerHash) 
  ( 
  ChessPeerHash.put (serverName, selfName); 
  ) 
  PublicTalk (getUserList ()); 
  ChessPeerTalk (selfName, ( "/ peer" + "[inchess]" + serverName)); 
  ChessPeerTalk (serverName, ( "/ peer" + "[inchess]" + selfName)); 
  ) 
  Else 
  ( 
  ChessPeerTalk (selfName, "/ reject"); 
  Try 
  ( 
  ClientClose (); 
  ) 
  Catch (Exception ez) 
  ( 
  ) 
  ) 
  ) 
  Else if (message.startsWith ( "/ [inchess]")) 
  ( 
  Int firstLocation = 0, lastLocation; 

  LastLocation = message.indexOf ( "", 0); 

  Message.substring peerName = ((firstLocation +1), lastLocation); 
  Message.substring message = ((lastLocation +1)); 
  If (chessPeerTalk (peerName, message)) 
  ( 
  Feedback ( "/ error"); 
  ) 
  ) 
  Else if (message.startsWith ( "/ giveup")) 
  ( 
  String chessClientName = message.substring (8); 
  If (chessPeerHash.containsKey (chessClientName) & &! ((String) chessPeerHash.get (chessClientName)). Equals ( "wait")) 
  ( 
  ChessPeerTalk ((String) chessPeerHash.get (chessClientName), "/ youwin"); 
  Synchronized (chessPeerHash) 
  ( 
  ChessPeerHash.remove (chessClientName); 
  ) 
  ) 
  If (chessPeerHash.containsValue (chessClientName)) 
  ( 
  ChessPeerTalk ((String) getHashKey (chessPeerHash, chessClientName), "/ youwin"); 
  Synchronized (chessPeerHash) 
  ( 
  ChessPeerHash.remove ((String) getHashKey (chessPeerHash, chessClientName)); 
  ) 
  ) 
  ) 
  Else 
  ( 

  Int firstLocation = 0, lastLocation; 

  LastLocation = message.indexOf ( "", 0); 
  If (lastLocation ==- 1) 
  ( 
  Feedback ( "null and void Order"); 
  Return; 
  ) 
  Else 
  ( 
  Message.substring peerName = ((firstLocation +1), lastLocation); 
  Message.substring message = ((lastLocation +1)); 
  Message = (String) clientNameHash.get (clientSocket )+">"+ message; 
  If (peerTalk (peerName, message)) 
  ( 
  Feedback ( "there is no such users:" peerName + + "\ n"); 
  ) 
  ) 

  ) 

  ) 

  Else 
  ( 
  Message = clientNameHash.get (clientSocket )+">"+ message; 
  Server.messageBoard.append (message + "\ n"); 
  PublicTalk (message); 
  Server.messageBoard.setCaretPosition (server.messageBoard.getText (). Length ()); 
  ) 

  ) 

  Public void publicTalk (String publicTalkMessage) 
  ( 

  Synchronized (clientDataHash) 
  ( 
  For (Enumeration enu = clientDataHash.elements (); enu.hasMoreElements ();) 
  ( 
  DataOutputStream outData = (DataOutputStream) enu.nextElement (); 
  Try 
  ( 
  OutData.writeUTF (publicTalkMessage); 
  ) 
  Catch (IOException es) 
  ( 
  Es.printStackTrace (); 
  ) 
  ) 
  ) 

  ) 

  Public boolean peerTalk (String peerTalk, String talkMessage) 
  ( 

  For (Enumeration enu = clientDataHash.keys (); enu.hasMoreElements ();) 
  ( 
  Socket userClient = (Socket) enu.nextElement (); 

  If (peerTalk.equals ((String) clientNameHash.get (userClient)) & &! PeerTalk.equals ((String) clientNameHash.get (clientSocket))) 
  ( 
  Synchronized (clientDataHash) 
  ( 
  DataOutputStream peerOutData = (DataOutputStream) clientDataHash.get (userClient); 
  Try 
  ( 
  PeerOutData.writeUTF (talkMessage); 
  ) 
  Catch (IOException es) 
  ( 
  Es.printStackTrace (); 
  ) 
  ) 
  Feedback (talkMessage); 
  Return (false); 
  ) 
  Else if (peerTalk.equals ((String) clientNameHash.get (clientSocket))) 
  ( 
  Feedback (talkMessage); 
  Return (false); 
  ) 
  ) 

  Return (true); 

  ) 

  Public boolean chessPeerTalk (String chessPeerTalk, String chessTalkMessage) 
  ( 

  For (Enumeration enu = clientDataHash.keys (); enu.hasMoreElements ();) 
  ( 
  Socket userClient = (Socket) enu.nextElement (); 

  If (chessPeerTalk.equals ((String) clientNameHash.get (userClient)) & &! ChessPeerTalk.equals ((String) clientNameHash.get (clientSocket))) 
  ( 
  Synchronized (clientDataHash) 
  ( 
  DataOutputStream peerOutData = (DataOutputStream) clientDataHash.get (userClient); 
  Try 
  ( 
  PeerOutData.writeUTF (chessTalkMessage); 
  ) 
  Catch (IOException es) 
  ( 
  Es.printStackTrace (); 
  ) 
  ) 
  Return (false); 
  ) 
  ) 
  Return (true); 
  ) 

  Public void Feedback (String feedbackString) 
  ( 
  Synchronized (clientDataHash) 
  ( 
  DataOutputStream outData = (DataOutputStream) clientDataHash.get (clientSocket); 
  Try 
  ( 
  OutData.writeUTF (feedbackString); 
  ) 
  Catch (Exception eb) 
  ( 
  Eb.printStackTrace (); 
  ) 
  ) 

  ) 

  Public String getUserList () 
  ( 
  String userList = "/ userlist"; 

  For (Enumeration enu = clientNameHash.elements (); enu.hasMoreElements ();) 
  ( 
  UserList userList + = "" + (String) enu.nextElement (); 
  ) 
  Return (userList); 
  ) 

  Public Object getHashKey (Hashtable targetHash, Object hashValue) 
  ( 
  Object hashKey; 
  For (Enumeration enu = targetHash.keys (); enu.hasMoreElements ();) 
  ( 
  HashKey = (Object) enu.nextElement (); 
  If (hashValue.equals ((Object) targetHash.get (hashKey))) 
  Return (hashKey); 
  ) 
  Return (null); 
  ) 

  Public void firstCome () 
  ( 
  PublicTalk (getUserList ()); 
  Feedback ( "/ yourname" + (String) clientNameHash.get (clientSocket)); 
  Feedback ( "Gobang Java chat client"); 
  Feedback ( "/ changename <your name> - change of name"); 
  Feedback ( "/ list - updated User List"); 
  Feedback ( "/ <username> <say it> -私聊"); 
  Feedback ( "Note: orders, the target of the first speech for all"); 
  ) 

  Public void clientClose () 
  ( 
  Server.messageBoard.append ( "user disconnect:" clientSocket + + "\ n"); 
  / / If the client host games 
  Synchronized (chessPeerHash) 
  ( 
  If (chessPeerHash.containsKey (clientNameHash.get (clientSocket))) 
  ( 
  ChessPeerHash.remove ((String) clientNameHash.get (clientSocket)); 
  ) 
  If (chessPeerHash.containsValue (clientNameHash.get (clientSocket))) 
  ( 
  ChessPeerHash.put ((String) getHashKey (chessPeerHash (String) clientNameHash.get (clientSocket)), "tobeclosed"); 
  ) 
  ) 
  Synchronized (clientDataHash) 
  ( 
  ClientDataHash.remove (clientSocket); 
  ) 
  Synchronized (clientNameHash) 
  ( 
  ClientNameHash.remove (clientSocket); 
  ) 
  PublicTalk (getUserList ()); 
  Server.statusLabel.setText ( "current link:" + clientDataHash.size ()); 
  Try 
  ( 
  ClientSocket.close (); 
  ) 
  Catch (IOException exx) 
  ( 
  ) 

  IsClientClosed = true; 

  ) 

  Public void run () 
  ( 
  DataInputStream inData; 
  Synchronized (clientDataHash) 
  ( 
  Server.statusLabel.setText ( "current link:" + clientDataHash.size ()); 
  ) 
  Try 
  ( 
  InData = new DataInputStream (clientSocket.getInputStream ()); 
  FirstCome (); 
  While (true) 
  ( 
  String message = inData.readUTF (); 
  MessageTransfer (message); 
  ) 
  ) 
  Catch (IOException esx) 
  ( 
  ) 
  Finally 
  ( 
  If (! IsClientClosed) 
  ( 
  ClientClose (); 
  ) 
  ) 
  ) 

  ) 

  Public class chessServer extends Frame implements ActionListener 
  ( 

  Button messageClearButton = new Button ( "clear the Show"); 
  Button serverStatusButton = new Button ( "server status"); 
  Button serverOffButton = new Button ( "shutdown of the server"); 
  Panel buttonPanel = new Panel (); 

  MessageServer server = new MessageServer (); 
  ServerSocket serverSocket; 
  Hashtable clientDataHash = new Hashtable (50); 
  Hashtable clientNameHash = new Hashtable (50); 
  Hashtable chessPeerHash = new Hashtable (50); 

  ChessServer () 
  ( 
  Super ( "Gobang Java server"); 
  SetBackground (Color.pink); 

  ButtonPanel.setLayout (new FlowLayout ()); 
  MessageClearButton.setSize (60,25); 
  ButtonPanel.add (messageClearButton); 
  MessageClearButton.addActionListener (this); 
  ServerStatusButton.setSize (75,25); 
  ButtonPanel.add (serverStatusButton); 
  ServerStatusButton.addActionListener (this); 
  ServerOffButton.setSize (75,25); 
  ButtonPanel.add (serverOffButton); 
  ServerOffButton.addActionListener (this); 

  Add (server, BorderLayout.CENTER); 
  Add (buttonPanel, BorderLayout.SOUTH); 

  AddWindowListener (new WindowAdapter () 
  ( 
  Public void windowClosing (WindowEvent e) 
  ( 
  System.exit (0); 
  ) 
  )); 
  Pack (); 
  SetVisible (true); 
  SetSize (400,450); 
  SetResizable (false); 
  Validate (); 
  Try 
  ( 
  MakeMessageServer (4331, server); 
  ) 
  Catch (Exception e) 
  ( 
  System.out.println ( "e"); 
  ) 
  ) 

  Public void makeMessageServer (int port, MessageServer server) throws IOException 
  ( 
  Socket clientSocket; 
  Long clientAccessNumber = 1; 
  This.server = server; 

  Try 
  ( 
  ServerSocket = new ServerSocket (port); 
  Server.messageBoard.setText ( "server began:" + serverSocket.getInetAddress (). GetLocalHost ()+":"+ serverSocket.getLocalPort () + "\ n"); 

  While (true) 
  ( 
  ClientSocket = serverSocket.accept (); 
  Server.messageBoard.append ( "user connections:" clientSocket + + "\ n"); 

  DataOutputStream outData = new DataOutputStream (clientSocket.getOutputStream ()); 

  ClientDataHash.put (clientSocket, outData); 
  ClientNameHash.put (clientSocket, (the "new visitors" + clientAccessNumber ++)); 

  ServerThread thread = new ServerThread (clientSocket, clientDataHash, clientNameHash, chessPeerHash, server); 

  Thread.start (); 
  ) 
  ) 
  Catch (IOException ex) 
  ( 
  System.out.println ( "has been running in the server \ n"); 
  ) 

  ) 

  Public void actionPerformed (ActionEvent e) 
  ( 
  If (e.getSource () == messageClearButton) 
  ( 
  Server.messageBoard.setText (""); 
  ) 
  If (e.getSource () == serverStatusButton) 
  ( 
  Try 
  ( 
  Server.messageBoard.append (the "server message:" + serverSocket.getInetAddress (). GetLocalHost ()+":"+ serverSocket.getLocalPort () + "\ n"); 
  ) 
  Catch (Exception ee) 
  ( 
  System.out.println ( "serverSocket.getInetAddress (). GetLocalHost () error \ n"); 
  ) 
  ) 
  If (e.getSource () == serverOffButton) 
  ( 
  System.exit (0); 
  ) 
  ) 

  Public static void main (String args []) 
  ( 
  ChessServer chessServer = new chessServer (); 
  ) 
  ) 

  [Print this article] [Close] 

Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Facebook
  • DotNetKicks
  • DZone
  • Netvouz
  • Propeller

Tags: , ,

Releated Java Articles

Comments

Leave a Reply