import java.net.*; import java.io.*; import java.util.* ; /** * Servidor de HTTP */ public class ChatHttpServer { public static void main( String[] args) throws IOException { int serverPort = 8080; if( args.length > 1) { System.err.println( "Use: java ChatHttpServer [porto]"); System.exit(0); } else if( args.length == 1) serverPort = Integer.parseInt( args[0]); new ChatHttpServer( serverPort).doIt(); } protected int serverPort; protected ChatUtilities chat; protected ChatHttpServer( int serverPort) throws IOException { this.serverPort = serverPort; this.chat = new ChatUtilities( serverPort); } // ===================================================================================== // ============= funcoes auxiliares // ==================================================== // ===================================================================================== /** * Copia o conteudo do stream in para o stream out */ protected void dumpStream( InputStream in, OutputStream out) throws IOException { byte[] arr = new byte[1024]; for( ;;) { int n = in.read( arr); if( n == -1) break; out.write( arr, 0, n); } } // ===================================================================================== // ============= funcoes principais // ==================================================== // ===================================================================================== /** * Processa um dos seguintes pedidos HTTP: * GET /chatRoomName HTTP/1.x - obtem pagina com conteudo da chat room * POST /chatRoomName HTTP/1.x - adiciona mensagem ao chat room: parametros no * corpo do pedido HTTP, codificados como "application/x-www-form-urlencoded" * nickName - nick name do utilizador a executar o chat room * messageText - mensagem adicionada ao chat room * qualquer outro pedido deve levar a amostragem duma mensagem de erro */ void processRequest( Socket socket) { //TODO: Completar com codigo para atender uma conexao/pedido } /** * Funcao principal do servidor - responsavel por criar o socket do servidor, * atender conexoes e invocar o metodo processRequest que trata o pedido de * cada conexao */ void doIt() throws IOException { //TODO: Completar com codigo com o ciclo principal de atendimento, que ira chamar // o metodo processRequest para cada conexao } }