home *** CD-ROM | disk | FTP | other *** search
/ Late Night VRML 2.0 with Java CD-ROM / code.zip / Ch19 / chat / Chat.java < prev    next >
Encoding:
Java Source  |  1997-02-16  |  1.7 KB  |  86 lines

  1. // Simple Multiuser Server
  2. // (c) Copyright Justin Couch   justin@vlc.com.au
  3. // The Virtual Light Company 1996
  4. //
  5. // From Chapter 20: Late Night VRML 2.0 and java
  6. //
  7. // This is the Chat server starter class. It fires off the connection manager
  8. // and uses TCP connections
  9.  
  10. package chat;
  11.  
  12. import java.net.*;
  13. import java.io.*;
  14. import filter.UserServer;
  15.  
  16. public class Chat extends Thread
  17. {
  18.     private static final int BUFFER_LENGTH = 1024;
  19.     private int    _port;
  20.     private boolean        server_available = false;
  21.     private DatagramSocket    listen_socket = null;
  22.     private ThreadGroup    thread_group;
  23.     private ChatManager    manager = null;
  24.     private UserServer    server;
  25.     
  26.     public Chat(int port, ThreadGroup tg, UserServer userver)
  27.     {
  28.         super(tg, "Chat server thread");
  29.  
  30.         thread_group = tg;
  31.  
  32.         _port = port;
  33.  
  34.         System.out.println("Starting Chat Server on UDP port " + port);
  35.         try
  36.         {
  37.             listen_socket = new DatagramSocket(port);
  38.         }
  39.         catch(IOException e)
  40.         {
  41.             System.err.println("Unable to open Chat socket " + e.getMessage());
  42.             return;
  43.         }
  44.  
  45.         manager = new ChatManager();
  46.  
  47.         server = userver;
  48.         server_available = true;
  49.     }
  50.  
  51.     public void run()
  52.     {
  53.         byte[]    buffer;
  54.         DatagramPacket packet;
  55.         ChatMessage a_chat;
  56.  
  57.         // if the server failed to start then exit and do nothing.
  58.         if(!server_available)
  59.             return;
  60.  
  61.         // tell the chat manager to start running
  62.         manager.start();
  63.  
  64.         // now process the input.
  65.         while(true)
  66.         {
  67.             buffer = new byte[BUFFER_LENGTH];
  68.             packet = new DatagramPacket(buffer, BUFFER_LENGTH);
  69.  
  70.             try
  71.             {
  72.                 listen_socket.receive(packet);
  73.                 Thread.yield();
  74.             }
  75.             catch(IOException e)
  76.             {
  77.                 System.err.println("packet error");
  78.             }
  79.  
  80.             a_chat = new ChatMessage(packet, thread_group, server);
  81.             a_chat.run();
  82.             manager.add(a_chat);
  83.         }
  84.     }
  85. }
  86.