public ServerObject serverFor(Object o) { ServerObject server = serving.get(o); if (server == null) { server = new ServerObject(objectsId.getAndIncrement(), o); serving.put(o, server); servingById.put(server.getId(), server); } return server; }
protected Request request(long objectId, Method method, Object[] args, boolean expectsResponse) throws IOException { Request r = new Request(this, method, args); long requestId = -1; if (expectsResponse) { requestId = nextRequest.getAndIncrement(); requests.put(requestId, r); } sendRequest(objectId, requestId, r); return r; }
private void processRequest(DataInputStream in) throws IOException { long serverId = in.readLong(); ServerObject server = servingById.get(serverId); long requestId = in.readLong(); Request r = new Request(this, server.getObject()); r.deserialize(in); r.invoke(); if (requestId != -1) { sendResponse(requestId, r.getResult(), r.getResultDeclaredType()); } }
private void processResponse(DataInputStream in) throws IOException { long requestId = in.readLong(); Request r = requests.remove(requestId); if (r == null) { throw new IllegalStateException( "Request " + requestId + " is unknown (last request generated was " + nextRequest.get()); } Object o = null; if (in.readBoolean()) { o = serializerFor(classForName(in.readUTF()), r.getResultDeclaredType()).deserialize(in); } r.set(o); }