1 package org.sapia.ubik.rmi.server.transport.udp; 2 3 import org.sapia.ubik.net.Request; 4 import org.sapia.ubik.net.ServerAddress; 5 import org.sapia.ubik.net.udp.UDPServer; 6 import org.sapia.ubik.net.udp.UDPServerAddress; 7 import org.sapia.ubik.rmi.server.Config; 8 import org.sapia.ubik.rmi.server.Log; 9 import org.sapia.ubik.rmi.server.RMICommand; 10 import org.sapia.ubik.rmi.server.Server; 11 import org.sapia.ubik.rmi.server.transport.RmiConnection; 12 13 import java.io.IOException ; 14 15 import java.net.DatagramSocket ; 16 import java.net.SocketException ; 17 18 19 23 public class UdpRmiServer extends UDPServer implements Server { 24 27 public UdpRmiServer() throws SocketException { 28 super(new DatagramSocket (0)); 29 } 30 31 34 public ServerAddress getServerAddress() { 35 return new UDPServerAddress(_server.getInetAddress(), _server.getPort()); 36 } 37 38 41 public void start() { 42 Thread t = new Thread (this); 43 t.setDaemon(true); 44 t.setName("ubik.rmi.server"); 45 t.start(); 46 } 47 48 51 protected void handleRequest(Request req, Object data) { 52 if (Log.isDebug()) { 53 Log.debug(getClass(), "receiving command"); 54 } 55 56 RMICommand cmd = (RMICommand) data; 57 58 if (Log.isDebug()) { 59 Log.debug(getClass(), 60 "command received: " + cmd.getClass().getName() + " from " + 61 req.getConnection().getServerAddress() + '@' + cmd.getVmId()); 62 } 63 64 cmd.init(new Config(req.getServerAddress(), req.getConnection())); 65 66 Object resp; 67 68 try { 69 resp = cmd.execute(); 70 } catch (Throwable t) { 71 t.printStackTrace(); 72 resp = t; 73 } 74 75 try { 76 ((RmiConnection) req.getConnection()).send(resp, cmd.getVmId(), 77 cmd.getServerAddress().getTransportType()); 78 } catch (IOException e) { 79 e.printStackTrace(); 80 } 81 } 82 } 83 | Popular Tags |