package udpchatserver; /** * Title: * Description: * Copyright: Copyright (c) 2001 * Company: * @author * @version 1.0 */ import java.net.* ; import java.io.* ; import java.lang.* ; import java.util.* ; public class ChatServerThread extends Thread{ static final int BUFFER_SIZE = 512; //Sets Max Packet Size private DatagramPacket IncomingPacket; //Socket to Communicate with ClientsTableEntry CTE; DatagramSocket OutToClientSocket; Hashtable ClientsTable; byte[] RecievedBuffer = new byte[BUFFER_SIZE]; byte[] SendAllBuffer = new byte[BUFFER_SIZE]; byte[] SendPrivateBuffer = new byte[BUFFER_SIZE]; String SendPrivateString; String SendAllString; String Blank = " "; String Username; String RecieverName; String SenderName; String Message; InetAddress RecieverIPAddress; InetAddress ClientIPAddress; int RecieverPort; int ClientPort; public ChatServerThread(DatagramPacket ArrivedPacket, Hashtable MasterClientsTable) { //Create buffers to hold incoming & outgoing messages IncomingPacket = ArrivedPacket; ClientsTable = MasterClientsTable; } public void run(){ byte[] buf = new byte [BUFFER_SIZE]; //Fill the recieved buffer with the data from incoming packet RecievedBuffer = IncomingPacket.getData(); //Get Client IP/Port from incoming packet ClientIPAddress = IncomingPacket.getAddress(); ClientPort = IncomingPacket.getPort(); //Parse packet for the info contained within for (int i=0; i Not Available"); Available = false; break; } else{ Available = true; System.out.println(" -> Available"); } } return Available; } public String GetUsername2(InetAddress SenderIP, int SenderPort){ //Method to Get a Username given an IP and Port Enumeration e = ClientsTable.elements(); System.out.println("\nGetting USername... SenderIP: " + SenderIP + " SenderPort: " + SenderPort); while(e.hasMoreElements()){ CTE = (ClientsTableEntry)e.nextElement(); System.out.print("TableEntry: " +CTE.GetUsername()); System.out.print(" IP: " +CTE.GetClientIP()); System.out.println(" Port: " +CTE.GetClientPort()); if((SenderIP.equals((InetAddress)CTE.GetClientIP())) &(SenderPort==(int)CTE.GetClientPort())){ Username = CTE.GetUsername(); System.out.println("Username is: " + Username); break; } else{ System.out.println("Username is not "+ CTE.GetUsername() + " for IP: " + SenderIP + " Port: " + SenderPort); } } return Username; } public boolean CheckSenderID(InetAddress SenderIP, int SenderPort){ //Method to Check the validity of a senders Identifiction System.out.println("\nChecking SenderID... SenderIP: " + SenderIP + " SenderPort: " + SenderPort); boolean ValidUser = true; Enumeration e = ClientsTable.elements(); while(e.hasMoreElements()){ CTE = (ClientsTableEntry)e.nextElement(); System.out.print("TableEntry: " +CTE.GetUsername()); System.out.print(" IP: " +CTE.GetClientIP()); System.out.print(" Port: " +CTE.GetClientPort()); if((SenderIP.equals((InetAddress)CTE.GetClientIP())) & (SenderPort==(int)CTE.GetClientPort())){ ValidUser = true; System.out.println(" -> Valid Sender"); SenderName = CTE.GetUsername(); System.out.println("SenderUsername has been set to: " + SenderName); break; } else{ ValidUser = false; System.out.println(" -> Invalid Sender"); } } return ValidUser; } public boolean CheckRecieverID(String RecieverUsername){ //Method to Check the validity of a recievers Identifiction boolean valid = false; Enumeration e = ClientsTable.elements(); System.out.println("\nChecking RecieverID for Reciever: " + RecieverUsername); while(e.hasMoreElements()){ CTE = (ClientsTableEntry)e.nextElement(); System.out.print("TableEntry: " +CTE.GetUsername()); System.out.print(" IP: " +CTE.GetClientIP()); System.out.print(" Port: " +CTE.GetClientPort()); if(RecieverUsername.equals((String)CTE.GetUsername())){ valid = true; System.out.println(" -> Valid Reciever"); RecieverName = (String)CTE.GetUsername(); System.out.println("ReciverUsername has been set to: " + RecieverName); break; } else{ valid = false; System.out.println(" -> inValid Reciever"); } } return valid; } public void UpdateClientState(String Username, InetAddress ClientIPAddress, int ClientPort, boolean ActiveState){ //Method to set a user as active or inactive in the HashTable ClientsTable.remove(Username); // ClientsTableEntry NewEntry = new ClientsTableEntry(Username, ClientIPAddress, ClientPort, ActiveState); // ClientsTable.put(Username, NewEntry); } public void GetRecieverIPPort(String RecieverUsername){ //Gets a users IP and Port given a username Enumeration e = ClientsTable.elements(); while(e.hasMoreElements()){ CTE = (ClientsTableEntry)e.nextElement(); if(RecieverUsername.equals((String)CTE.GetUsername())){ RecieverIPAddress = CTE.GetClientIP(); RecieverPort = CTE.GetClientPort(); } } } }