com.lyrisoft.chat.server.remote
Class ChatServer

java.lang.Object
  |
  +--com.lyrisoft.chat.server.remote.ChatServer
All Implemented Interfaces:
ICommands, IServerCommands
Direct Known Subclasses:
FlashChatServer

public class ChatServer
extends java.lang.Object
implements ICommands, IServerCommands

This is the Chat Server


Field Summary
protected  IAuthenticator _authenticator
           
protected  long _creationTime
           
protected  int _cumulativeLogins
           
protected  Dispatcher _dispatcher
           
protected  java.lang.Thread _dispatchThread
           
protected  DistributedState _distributedState
           
protected  Distributor _distributor
           
protected  java.lang.Thread _distributorThread
           
protected  boolean _keepGoing
           
protected  java.lang.String _motd
           
protected  int _port
           
protected  java.util.HashMap _rooms
           
protected  java.net.ServerSocket _serverSocket
           
protected  javax.servlet.ServletContext _servletContext
           
protected  java.util.HashMap _users
           
protected  Vulture _vulture
           
protected  java.lang.Thread _vultureThread
           
static boolean DEBUG
           
protected static Logger errorLogger
           
protected static Logger logger
           
 
Fields inherited from interface com.lyrisoft.chat.ICommands
ACCESS_DENIED, ACK_KILL, ALREADY_SIGNED_ON, DELIMITER, EMOTE_TO_ROOM, EMOTE_TO_USER, ERROR, GET_ROOMS, GET_USERS_IN_ROOM, GET_USERS_ON_SERVER, HELP, HYPERLINK, IGNORE, INVALID_CHARACTER, INVITE, JOIN_ROOM, JOIN_ROOM_ACK, KICK, KILL, NO_INVITE, NO_SUCH_USER, OP, PART_ROOM, PART_ROOM_ACK, PING, PONG, REMOTE_CLIENT_MESSAGE, ROOM_ACCESS_DENIED, ROOM_DIFF, ROOM_MSG, ROOM_USER_DIFF, SAY_TO_ROOM, SAY_TO_USER, SHUTDOWN, SIGNOFF, SIGNON, SIGNON_ACK, STATS, UNIGNORE, UNINVITE, USER_DIFF, VERSION, WHOIS
 
Fields inherited from interface com.lyrisoft.chat.server.remote.IServerCommands
BROADCAST_PING, HELLO
 
Constructor Summary
ChatServer()
           
ChatServer(javax.servlet.ServletContext context)
           
ChatServer(java.lang.String conf)
           
ChatServer(java.lang.String conf, javax.servlet.ServletContext context)
           
 
Method Summary
protected  void acceptConnections()
          Tells the server to begin accepting connections.
 void announcePresence()
           
 void broadcast(java.lang.String s)
           
 void checkServerPings(long timeout)
           
static java.lang.String clientKey(ChatClient client)
          returns a key for referencing the users hashmap.
static java.lang.String clientKey(java.lang.String client)
          returns a key for referencing the users hashmap.
protected  ChatClient createChatClient(java.net.Socket s)
           
protected  Dispatcher createDispatcher()
           
protected  void createLoggers(java.lang.String logFile, java.lang.String errorLogFile)
           
 RoomServer createRoomServer(java.lang.String roomName, java.lang.String password)
           
protected  Logger createServletContextLogger(java.lang.String logFile)
           
static void DEBUG(java.lang.String s)
           
 void distribute(ChatClient client, java.lang.String text)
           
 void distributeRoomList()
           
 void distributeRoomState(java.lang.String roomName)
           
 void distributeUserList()
          If user list is blank, just send an empty reply.
 ChatClient getClient(java.lang.String clientName)
          Get a ChatClient by name
 int getCumulativeLogins()
           
static boolean getDebug()
           
 Dispatcher getDispatcher()
           
 java.lang.String[] getLocalRoomNames()
           
 java.lang.String[] getLocalUserNames()
           
 java.lang.String getName()
           
 int getPort()
           
 RoomServer getRoom(java.lang.String roomName)
          Get the RoomServer for a particular room
 int getRoomCount()
          get the number of rooms currently on the server
 java.lang.String[] getRoomNames()
          Get the names of all the rooms on this server
 java.lang.String[] getRoomsFor(ChatClient client)
           
 java.lang.String[] getServerNames()
           
 long getUptime()
          Get the uptime
 int getUserCount()
          get the number of users currently on the server
 int getUserCountInRoom(java.lang.String roomName)
           
 int getUserCountOnServer(java.lang.String server)
           
 java.lang.String[] getUserNames()
          Get the names of all the users on this server
 java.util.Map getUsers()
           
 java.lang.String[] getUsersInRoom(java.lang.String roomName)
           
 void handleBroadcastPing(java.lang.String server)
           
 void handleIncoming(javax.jms.Message message)
          Incoming message from the Distributor (JMS)
 void handlePong(java.lang.String server, java.lang.String arg)
           
 void initCommandProcessor(java.util.Properties p)
           
 void initTranslator(java.util.Properties p)
           
 void joinRoom(ChatClient client, java.lang.String roomName, java.lang.String password)
           
 void kill(java.lang.String victim, ChatClient killer, java.lang.String message)
          Kick a user off the system.
static void log(java.lang.Exception e)
          Log an exception (goes to the error log)
static void log(java.lang.String message)
          Log a message (goes to the standard log)
static void logError(java.lang.String message)
          Log an error (goes to the error log)
static void main(java.lang.String[] args)
          Instantiate a ChatServer and start accepting connections
 void notifyClientsRoomCreated(java.lang.String roomName)
           
 void notifyClientsRoomDestroyed(java.lang.String roomName)
           
 void partRoom(ChatClient client, java.lang.String roomName)
          Remote a user from a room
 void pleaseStop()
           
 void preProcessProperties(java.util.Properties p)
          A hook for reading in your own extra nfc.conf properties
protected  void readMotd()
           
 void remoteJoinRoom(java.lang.String server, java.lang.String username, java.lang.String roomname, java.lang.String password)
           
 void remotePartRoom(java.lang.String server, java.lang.String username, java.lang.String roomname, boolean isSignoff)
           
 void remoteSignOff(java.lang.String server, java.lang.String userId)
           
 void remoteSignOn(java.lang.String server, java.lang.String userId)
           
 boolean roomExists(java.lang.String roomname)
           
static java.lang.String roomKey(RoomServer room)
          returns a key for referencing the rooms hashmap.
static java.lang.String roomKey(java.lang.String room)
          returns a key for referencing the rooms hashmap.
 void sendBroadcastPing()
           
protected  void sendMotd(ChatClient client)
           
 void sendServerPing(java.lang.String server)
           
 void sendServerPong(java.lang.String server, java.lang.String arg)
           
 boolean serverExists(java.lang.String servername)
           
 void serverSignOff(java.lang.String server)
           
 void serverSignOn(java.lang.String server)
           
 void setRemoteUserList(java.lang.String server, java.lang.String[] users)
           
protected static void showUsageAndExit()
           
 void signOff(ChatClient client)
          Sign off of the system.
 void signOn(ChatClient client, java.lang.String password)
          Sign on to the server
 boolean userExists(java.lang.String username)
           
protected  void validateUserId(java.lang.String user)
          Determines if a user id is valid.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEBUG

public static final boolean DEBUG

logger

protected static Logger logger

errorLogger

protected static Logger errorLogger

_port

protected int _port

_serverSocket

protected java.net.ServerSocket _serverSocket

_keepGoing

protected boolean _keepGoing

_creationTime

protected long _creationTime

_authenticator

protected IAuthenticator _authenticator

_users

protected java.util.HashMap _users

_rooms

protected java.util.HashMap _rooms

_motd

protected java.lang.String _motd

_vulture

protected Vulture _vulture

_vultureThread

protected java.lang.Thread _vultureThread

_dispatcher

protected Dispatcher _dispatcher

_dispatchThread

protected java.lang.Thread _dispatchThread

_distributor

protected Distributor _distributor

_distributorThread

protected java.lang.Thread _distributorThread

_distributedState

protected DistributedState _distributedState

_cumulativeLogins

protected int _cumulativeLogins

_servletContext

protected javax.servlet.ServletContext _servletContext
Constructor Detail

ChatServer

public ChatServer(java.lang.String conf,
                  javax.servlet.ServletContext context)
           throws java.lang.Exception

ChatServer

public ChatServer(javax.servlet.ServletContext context)
           throws java.lang.Exception

ChatServer

public ChatServer(java.lang.String conf)
           throws java.lang.Exception

ChatServer

public ChatServer()
           throws java.lang.Exception
Method Detail

getPort

public int getPort()

preProcessProperties

public void preProcessProperties(java.util.Properties p)
                          throws PropertyException
A hook for reading in your own extra nfc.conf properties

getCumulativeLogins

public int getCumulativeLogins()

createDispatcher

protected Dispatcher createDispatcher()

getDispatcher

public Dispatcher getDispatcher()

initTranslator

public void initTranslator(java.util.Properties p)

initCommandProcessor

public void initCommandProcessor(java.util.Properties p)

readMotd

protected void readMotd()
                 throws ResourceException,
                        java.io.IOException

log

public static void log(java.lang.String message)
Log a message (goes to the standard log)

logError

public static void logError(java.lang.String message)
Log an error (goes to the error log)

log

public static void log(java.lang.Exception e)
Log an exception (goes to the error log)

getRoom

public RoomServer getRoom(java.lang.String roomName)
Get the RoomServer for a particular room

getClient

public ChatClient getClient(java.lang.String clientName)
Get a ChatClient by name

validateUserId

protected void validateUserId(java.lang.String user)
                       throws AccessException
Determines if a user id is valid. Ensures that the name is made up of alphanumerical characters and contains no spaces.

getUsers

public java.util.Map getUsers()

serverSignOn

public void serverSignOn(java.lang.String server)

serverSignOff

public void serverSignOff(java.lang.String server)

setRemoteUserList

public void setRemoteUserList(java.lang.String server,
                              java.lang.String[] users)

remoteSignOn

public void remoteSignOn(java.lang.String server,
                         java.lang.String userId)

remoteSignOff

public void remoteSignOff(java.lang.String server,
                          java.lang.String userId)

signOn

public void signOn(ChatClient client,
                   java.lang.String password)
            throws AccessException,
                   AccessDenied
Sign on to the server
Parameters:
client - the ChatClient
password -  
Throws:
AccessException - is the login failed

broadcast

public void broadcast(java.lang.String s)

sendMotd

protected void sendMotd(ChatClient client)

kill

public void kill(java.lang.String victim,
                 ChatClient killer,
                 java.lang.String message)
Kick a user off the system.

signOff

public void signOff(ChatClient client)
Sign off of the system. This is called by the ChatClient when the socket unexpectedly closes, or when the user quits.

partRoom

public void partRoom(ChatClient client,
                     java.lang.String roomName)
Remote a user from a room

notifyClientsRoomDestroyed

public void notifyClientsRoomDestroyed(java.lang.String roomName)

remoteJoinRoom

public void remoteJoinRoom(java.lang.String server,
                           java.lang.String username,
                           java.lang.String roomname,
                           java.lang.String password)

remotePartRoom

public void remotePartRoom(java.lang.String server,
                           java.lang.String username,
                           java.lang.String roomname,
                           boolean isSignoff)

joinRoom

public void joinRoom(ChatClient client,
                     java.lang.String roomName,
                     java.lang.String password)
              throws RoomJoinException

notifyClientsRoomCreated

public void notifyClientsRoomCreated(java.lang.String roomName)

createRoomServer

public RoomServer createRoomServer(java.lang.String roomName,
                                   java.lang.String password)

roomKey

public static java.lang.String roomKey(java.lang.String room)
returns a key for referencing the rooms hashmap. mainly to avoid case-sensitivity problems.

roomKey

public static java.lang.String roomKey(RoomServer room)
returns a key for referencing the rooms hashmap. mainly to avoid case-sensitivity problems.

clientKey

public static java.lang.String clientKey(ChatClient client)
returns a key for referencing the users hashmap. mainly to avoid case-sensitivity problems.

clientKey

public static java.lang.String clientKey(java.lang.String client)
returns a key for referencing the users hashmap. mainly to avoid case-sensitivity problems.

acceptConnections

protected void acceptConnections()
Tells the server to begin accepting connections.

createChatClient

protected ChatClient createChatClient(java.net.Socket s)
                               throws java.io.IOException

pleaseStop

public void pleaseStop()

getRoomNames

public java.lang.String[] getRoomNames()
Get the names of all the rooms on this server
Returns:
an array contains the names of all the rooms

getLocalRoomNames

public java.lang.String[] getLocalRoomNames()

getServerNames

public java.lang.String[] getServerNames()

getUserNames

public java.lang.String[] getUserNames()
Get the names of all the users on this server
Returns:
an array contains the names of all the users

getLocalUserNames

public java.lang.String[] getLocalUserNames()

getRoomsFor

public java.lang.String[] getRoomsFor(ChatClient client)

getRoomCount

public int getRoomCount()
get the number of rooms currently on the server
Returns:
the number of rooms

getUserCount

public int getUserCount()
get the number of users currently on the server
Returns:
the number of users

getUptime

public long getUptime()
Get the uptime
Returns:
the uptime in milliseconds

main

public static void main(java.lang.String[] args)
Instantiate a ChatServer and start accepting connections

createServletContextLogger

protected Logger createServletContextLogger(java.lang.String logFile)

createLoggers

protected void createLoggers(java.lang.String logFile,
                             java.lang.String errorLogFile)

showUsageAndExit

protected static void showUsageAndExit()

distribute

public void distribute(ChatClient client,
                       java.lang.String text)

handleIncoming

public void handleIncoming(javax.jms.Message message)
Incoming message from the Distributor (JMS)

getName

public java.lang.String getName()

announcePresence

public void announcePresence()

distributeRoomList

public void distributeRoomList()

distributeRoomState

public void distributeRoomState(java.lang.String roomName)

distributeUserList

public void distributeUserList()
If user list is blank, just send an empty reply. The empty reply is important because it's the only way somebody who just said /hello will see that we exist

getUserCountInRoom

public int getUserCountInRoom(java.lang.String roomName)

getUserCountOnServer

public int getUserCountOnServer(java.lang.String server)

getUsersInRoom

public java.lang.String[] getUsersInRoom(java.lang.String roomName)

userExists

public boolean userExists(java.lang.String username)

serverExists

public boolean serverExists(java.lang.String servername)

roomExists

public boolean roomExists(java.lang.String roomname)

checkServerPings

public void checkServerPings(long timeout)

sendBroadcastPing

public void sendBroadcastPing()

sendServerPing

public void sendServerPing(java.lang.String server)

sendServerPong

public void sendServerPong(java.lang.String server,
                           java.lang.String arg)

handlePong

public void handlePong(java.lang.String server,
                       java.lang.String arg)

handleBroadcastPing

public void handleBroadcastPing(java.lang.String server)

DEBUG

public static void DEBUG(java.lang.String s)

getDebug

public static boolean getDebug()


Copyright © 2000-2002 Taso Lyristis