⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unicastref.java

📁 kaffe是一个java虚拟机的源代码。里面包含了一些java例程和标准的java包。
💻 JAVA
字号:
/* * Copyright (c) 1996, 1997, 1998, 1999 *      Transvirtual Technologies, Inc.  All rights reserved. * * See the file "license-lesser.terms" for information on usage and  * redistribution of this file. */package kaffe.rmi.server;import java.rmi.Remote;import java.rmi.RemoteException;import java.rmi.server.RemoteRef;import java.rmi.server.RMISocketFactory;import java.rmi.server.RMIClientSocketFactory;import java.rmi.server.RMIServerSocketFactory;import java.rmi.server.RemoteObject;import java.rmi.server.RemoteCall;import java.rmi.server.UnicastRemoteObject;import java.rmi.server.Operation;import java.rmi.server.ObjID;import java.rmi.server.UID;import java.lang.reflect.Method;import java.io.ObjectOutput;import java.io.ObjectInput;import java.io.IOException;import java.net.Socket;import java.net.InetAddress;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;public class UnicastRef	implements RemoteRef, ProtocolConstants {public ObjID objid;UnicastConnectionManager manager;/** * Used by serialization. */private UnicastRef() {}public UnicastRef(ObjID objid, String host, int port, RMIClientSocketFactory csf) {	this(objid);	manager = UnicastConnectionManager.getInstance(host, port, csf);}public UnicastRef(ObjID objid) {	this.objid = objid;}public Object invoke(Remote obj, Method method, Object[] params, long opnum) throws Exception {	return (invokeCommon(obj, method, params, -1, opnum));}private Object invokeCommon(Remote obj, Method method, Object[] params, int opnum, long hash) throws Exception {	UnicastConnection conn;	try {		conn = manager.getConnection();	}	catch (IOException e1) {		throw new RemoteException("connection failed to host: " + manager.serverName, e1);	}	ObjectOutputStream out;	DataOutputStream dout;	try {		dout = conn.getDataOutputStream();		dout.writeByte(MESSAGE_CALL);		out = conn.getObjectOutputStream();				objid.write(out);		out.writeInt(opnum);		out.writeLong(hash);		if (params != null) {			for (int i = 0; i < params.length; i++) {				if (params[i] instanceof UnicastRemoteObject) {					out.writeObject(UnicastRemoteObject.exportObject((UnicastRemoteObject)params[i]));				}				else {					out.writeObject(params[i]);				}			}		}		out.flush();	}	catch (IOException e2) {		throw new RemoteException("call failed: ", e2);	}	int returncode;	Object returnval;	DataInputStream din;	ObjectInputStream in;	UID ack;	try {		din = conn.getDataInputStream();		if (din.readUnsignedByte() != MESSAGE_CALL_ACK) {			throw new RemoteException("Call not acked");		}		in = conn.getObjectInputStream();		returncode = in.readUnsignedByte();		ack = UID.read(in);		returnval = in.readObject();	}	catch (IOException e3) {		throw new RemoteException("call return failed: ", e3);	}	manager.discardConnection(conn);	if (returncode != RETURN_ACK) {		throw (Exception)returnval;	}	return (returnval);}/** * @deprecated */public RemoteCall newCall(RemoteObject obj, Operation[] op, int opnum, long hash) throws RemoteException {	return (new UnicastRemoteCall(obj, opnum, hash));}/** * @deprecated */public void invoke(RemoteCall call) throws Exception {	UnicastRemoteCall c = (UnicastRemoteCall)call;	Object ret = invokeCommon((Remote)c.getObject(), (Method)null, c.getArguments(), c.getOpnum(), c.getHash());	c.setReturnValue(ret);}/** * @deprecated */public void done(RemoteCall call) throws RemoteException {	/* Does nothing */}public void writeExternal(ObjectOutput out) throws IOException {	if (manager == null) {		throw new IOException("no connection");	}	manager.write(out);	objid.write(out);	out.writeByte(RETURN_ACK);}public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {	manager = UnicastConnectionManager.read(in);	objid = ObjID.read(in);	if (in.readByte() != RETURN_ACK) {		throw new IOException("no ack found");	}}public boolean remoteEquals(RemoteRef ref) {	throw new kaffe.util.NotImplemented();}public int remoteHashCode() {	throw new kaffe.util.NotImplemented();}public String getRefClass(ObjectOutput out) {	return ("UnicastRef");}public String remoteToString() {	throw new kaffe.util.NotImplemented();}public void dump(UnicastConnection conn) {	try {		DataInputStream din = conn.getDataInputStream();		for (;;) {			int b = din.readUnsignedByte();			System.out.print(Integer.toHexString(b));			if (b >= 32 && b < 128) {				System.out.print(": " + (char)b);			}			System.out.println();		}	}	catch (IOException _) {	}}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -