📄 gestorllamadaremota.java
字号:
package org.mikel.jchord.red;/* * ThreadServidorLlamadasRemotas.java * * Created on 28 de enero de 2005, 16:20 */import java.net.*;import java.io.*;import java.util.*;import org.mikel.jchord.Identificador;import org.mikel.jchord.Nodo;/** * * @author mikel */public class GestorLlamadaRemota implements Runnable { Socket cliente; Nodo nodoDue駉; /** * Creates a new instance of ThreadServidorLlamadasRemotas * @param cliente * @param nodoDue駉 */ public GestorLlamadaRemota(Socket cliente, Nodo nodoDue駉){ this.cliente = cliente; this.nodoDue駉 = nodoDue駉; } public void run(){ try{ // while(true){ //Obtiene petici髇 del cliente ObjectInputStream in = new ObjectInputStream(cliente.getInputStream()); Peticion pet = (Peticion) in.readObject(); //System.out.println("Thread Servidor n"+nodoDue駉.getIdNodo().getIntId()+": Recibido peticion de cliente: "); //CREAR RESPUESTA ejecutando m閠odo en nodo local y rellenando la petici髇 // System.out.println(nodoDue駉.getIdNodo().getPuerto()+" sirviendo peticion"+pet.getMetodo()); switch(pet.getMetodo()){ case Peticion.PING: pet.setRespuesta(null); break; case Peticion.GET_PREDECESOR: pet.setRespuesta(nodoDue駉.getPredecesor()); break; case Peticion.FIND_SUCCESSOR: Identificador id = nodoDue駉.findSuccessorEscalable((java.math.BigInteger) pet.getParametro()); pet.setRespuesta(id); break; case Peticion.FIND_SUCCESSOR_PRINT: Identificador ident = nodoDue駉.findSuccessorEscalablePrint((java.math.BigInteger) pet.getParametro()); pet.setRespuesta(ident); break; case Peticion.NOTIFY: //notify: aprovecha la respuesta para devolver lista de sucesores actual nodoDue駉.notify((Identificador) pet.getParametro()); pet.setRespuesta(nodoDue駉.getListaSucesores()); pet.setCodigoError(0); break; case Peticion.NOTIFICAR_LEAVE_SUCESOR_ENVIAR_PREDECESOR_Y_CLAVES: //actualizarPredecesorYClaves ArrayList params = (ArrayList) pet.getParametro(); nodoDue駉.actualizarPredecesorYClaves((Identificador)params.get(0),(Hashtable)params.get(1)); break; case Peticion.NOTIFICAR_LEAVE_PREDECESOR_ENVIAR_ULTIMO_LISTASUCESORES: //actualizarUltimoListaSucesores nodoDue駉.actualizarUltimoListaSucesores((Identificador) pet.getParametro()); break; case Peticion.INSERTAR_VALOR_KEY: //insertarValorClave Hashtable ht = (Hashtable) pet.getParametro(); nodoDue駉.a馻dirKeys(ht); break; case Peticion.OBTENER_VALOR_KEY: //obtenerValorClave pet.setRespuesta(nodoDue駉.getValorListaKeys((java.math.BigInteger) pet.getParametro())); break; case Peticion.OBTENER_INFO_NODO: //obtenerInfoNodo pet.setRespuesta(nodoDue駉.getPropiedades()); break; default: //error //System.out.println("Metodo desconocido"); pet.setCodigoError(-1); break; } //Enviar petici髇 resuelta al cliente ObjectOutputStream out = new ObjectOutputStream(cliente.getOutputStream()); out.writeObject(pet); out.flush(); out.close(); // } } catch(IOException e) { System.out.println("Error I/O Thread Servidor"); e.printStackTrace(); } catch(ClassNotFoundException ex) { System.out.println("Error ClassNotFound Thread Servidor"); } catch(Throwable exc) { System.out.println("Error Thread Servidor"); exc.printStackTrace(); } } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -