diff src/luan/lib/PickleClient.java @ 146:0517a4a7fcc5

add Io.reverse_pickle git-svn-id: https://luan-java.googlecode.com/svn/trunk@147 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Sun, 15 Jun 2014 13:35:33 +0000
parents 0594c132888b
children 138b9baee80b
line wrap: on
line diff
--- a/src/luan/lib/PickleClient.java	Sun Jun 15 10:02:16 2014 +0000
+++ b/src/luan/lib/PickleClient.java	Sun Jun 15 13:35:33 2014 +0000
@@ -8,19 +8,43 @@
 import luan.LuanException;
 import luan.LuanTable;
 import luan.LuanJavaFunction;
+import luan.LuanFunction;
 
 
 public final class PickleClient {
 
 	private final PickleCon con;
+	private final LuanFunction _reversed_pickle;
 
 	PickleClient(LuanState luan,DataInputStream in,DataOutputStream out) {
-		con = new PickleCon(luan,in,out);
+		this(new PickleCon(luan,in,out));
+	}
+
+	PickleClient(PickleCon con) {
+		this.con = con;
+		try {
+			this._reversed_pickle = new LuanJavaFunction(
+				PickleClient.class.getMethod( "_reversed_pickle" ), this
+			);
+		} catch(NoSuchMethodException e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	public Object _reversed_pickle() throws LuanException, IOException {
+		new PickleServer(con).run();
+		return con.read();
 	}
 
 	public Object call(Object... args) throws LuanException, IOException {
 		con.write(args);
-		Object[] result = Luan.array(con.read());
+		Object[] result;
+		con.ioModule.put("_reversed_pickle",_reversed_pickle);
+		try {
+			result = Luan.array(con.read());
+		} finally {
+			con.ioModule.put("_reversed_pickle",null);
+		}
 		boolean ok = (boolean)result[0];
 		if( ok ) {
 			Object[] rtn = new Object[result.length-1];