Mercurial Hosting > luan
changeset 611:8bd98da6991a 0.14
remove pickle code
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 11 Dec 2015 12:24:24 -0700 |
parents | b4f3dbe1c6e3 |
children | bb9a790d8401 |
files | core/src/luan/modules/IoLuan.java core/src/luan/modules/PickleClient.java core/src/luan/modules/PickleCon.java core/src/luan/modules/PickleServer.java |
diffstat | 4 files changed, 0 insertions(+), 419 deletions(-) [+] |
line wrap: on
line diff
--- a/core/src/luan/modules/IoLuan.java Fri Dec 11 00:13:13 2015 -0700 +++ b/core/src/luan/modules/IoLuan.java Fri Dec 11 12:24:24 2015 -0700 @@ -647,33 +647,6 @@ @Override public String to_string() { return socket.toString(); } - - public LuanTable pickle_client(LuanState luan) throws IOException { - InputStream in = new BufferedInputStream(inputStream()); - OutputStream out = new BufferedOutputStream(outputStream()); - return new PickleClient(luan,in,out).table(); - } - - public void run_pickle_server(LuanState luan) throws IOException, LuanException { - InputStream in = new BufferedInputStream(inputStream()); - OutputStream out = new BufferedOutputStream(outputStream()); - new PickleServer(luan,in,out).run(); - } - - @Override public LuanTable table() { - LuanTable tbl = super.table(); - try { - tbl.rawPut( "pickle_client", new LuanJavaFunction( - LuanSocket.class.getMethod( "pickle_client", LuanState.class ), this - ) ); - tbl.rawPut( "run_pickle_server", new LuanJavaFunction( - LuanSocket.class.getMethod( "run_pickle_server", LuanState.class ), this - ) ); - } catch(NoSuchMethodException e) { - throw new RuntimeException(e); - } - return tbl; - } } public static LuanTable socket(LuanState luan,String name) throws LuanException, IOException {
--- a/core/src/luan/modules/PickleClient.java Fri Dec 11 00:13:13 2015 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,106 +0,0 @@ -package luan.modules; - -import java.io.InputStream; -import java.io.OutputStream; -import java.io.IOException; -import luan.Luan; -import luan.LuanState; -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,InputStream in,OutputStream 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; - con.env.rawPut("_reversed_pickle",_reversed_pickle); - try { - result = Luan.array(con.read()); - } finally { - con.env.rawPut("_reversed_pickle",null); - } - boolean ok = (boolean)result[0]; - if( ok ) { - Object[] rtn = new Object[result.length-1]; - System.arraycopy(result,1,rtn,0,rtn.length); - return rtn; - } else { - String msg = (String)result[1]; - String src = (String)result[2]; - throw new LuanException(con.luan, - msg + "\n" - + "in:\n" - + "------------------\n" - + formatCode(src) + "\n" - + "------------------\n" - ); - } - } - - LuanTable table() { - LuanTable tbl = new LuanTable(); - try { - tbl.rawPut( "pickle", new LuanJavaFunction( - PickleCon.class.getMethod( "pickle", Object.class ), con - ) ); - tbl.rawPut( "call", new LuanJavaFunction( - PickleClient.class.getMethod( "call", new Object[0].getClass() ), this - ) ); - tbl.rawPut( "close", new LuanJavaFunction( - PickleCon.class.getMethod( "close" ), con - ) ); - } catch(NoSuchMethodException e) { - throw new RuntimeException(e); - } - return tbl; - } - - - public static String formatCode(String s) { - StringBuilder buf = new StringBuilder(); - int line = 1; - int i = 0; - int i2 = 0; - while( i2 != -1 ) { - buf.append( line++ ); - buf.append( '\t' ); - i2 = s.indexOf('\n',i); - String lineStr = i2 == -1 ? s.substring(i) : s.substring(i,i2+1); - int j; - for( j=0; j<lineStr.length() && lineStr.charAt(j)=='\t'; j++ ) { - buf.append( " " ); - } - buf.append( lineStr.substring(j) ); - i = i2 + 1; - } - return buf.toString(); - } - - -}
--- a/core/src/luan/modules/PickleCon.java Fri Dec 11 00:13:13 2015 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,165 +0,0 @@ -package luan.modules; - -import java.io.InputStream; -import java.io.OutputStream; -import java.io.IOException; -import java.io.EOFException; -import java.nio.charset.StandardCharsets; -import java.util.Set; -import java.util.IdentityHashMap; -import java.util.Collections; -import java.util.Map; -import java.util.List; -import java.util.ArrayList; -import luan.Luan; -import luan.LuanTable; -import luan.LuanState; -import luan.LuanFunction; -import luan.LuanJavaFunction; -import luan.LuanException; - - -public final class PickleCon { - final LuanState luan; - private final InputStream in; - private final LuanFunction _read_binary; - private final OutputStream out; - private final List<byte[]> binaries = new ArrayList<byte[]>(); - String src; - final LuanTable env = new LuanTable(); - - PickleCon(LuanState luan,InputStream in,OutputStream out) { - this.in = in; - this.luan = luan; - try { - this._read_binary = new LuanJavaFunction( - PickleCon.class.getMethod( "_read_binary", Integer.TYPE ), this - ); - } catch(NoSuchMethodException e) { - throw new RuntimeException(e); - } - - this.out = out; - } - - public byte[] _read_binary(int size) throws IOException/*, LuanException*/ { - byte[] a = new byte[size]; - int i = 0; - while( i < size ) { - int n = in.read(a,i,size-i); - if( n == -1 ) -// throw new LuanException(luan, "end of stream" ); - throw new EOFException(); - i += n; - } - return a; - } - - public Object read() throws IOException, LuanException { - env.rawPut("_read_binary",_read_binary); - try { - src = readString(); - LuanFunction fn = BasicLuan.load(luan,src,"pickle-reader",env,false); - return fn.call(luan); - } finally { - env.rawPut("_binaries",null); - env.rawPut("_read_binary",null); - } - } - - public String pickle(Object obj) throws LuanException { - if( obj == null ) - return "nil"; - if( obj instanceof Boolean ) - return obj.toString(); - if( obj instanceof Number ) - return Luan.toString((Number)obj); - if( obj instanceof String ) - return "\"" + Luan.stringEncode((String)obj) + "\""; - if( obj instanceof LuanTable ) - return pickle( (LuanTable)obj, Collections.newSetFromMap(new IdentityHashMap<LuanTable,Boolean>()) ); - if( obj instanceof byte[] ) { - byte[] a = (byte[])obj; - binaries.add(a); - return "_binaries[" + binaries.size() + "]"; - } - throw new LuanException(luan, "invalid type: " + obj.getClass() ); - } - - private String pickle(Object obj,Set<LuanTable> set) throws LuanException { - return obj instanceof LuanTable ? pickle((LuanTable)obj,set) : pickle(obj); - } - - private String pickle(LuanTable tbl,Set<LuanTable> set) throws LuanException { - if( !set.add(tbl) ) { - throw new LuanException(luan, "circular reference in table" ); - } - StringBuilder sb = new StringBuilder(); - sb.append( "{" ); - for( Map.Entry<Object,Object> entry : tbl.iterable(luan) ) { - sb.append( "[" ); - sb.append( pickle(entry.getKey(),set) ); - sb.append( "]=" ); - sb.append( pickle(entry.getValue(),set) ); - sb.append( ", " ); - } - sb.append( "}" ); - return sb.toString(); - } - - public void write(Object... args) throws LuanException, IOException { - StringBuilder sb = new StringBuilder(); - if( !binaries.isEmpty() ) { - sb.append( "_binaries = {}\n" ); - for( byte[] a : binaries ) { - sb.append( "_binaries[#_binaries+1] = _read_binary(" + a.length + ")\n" ); - } - } - for( Object obj : args ) { - sb.append( luan.toString(obj) ); - } - writeString( sb.toString() ); -//System.out.println("aaaaaaaaaaaaaaaaaaaaaaaa"); -//System.out.println(sb); -//System.out.println("zzzzzzzzzzzzzzzzzzzzzzzz"); - for( byte[] a : binaries ) { - out.write(a); - } - out.flush(); - binaries.clear(); - } - - public void close() throws IOException { - in.close(); - out.close(); - } - - String readString() throws IOException { - int len = readInt(); - byte[] a = _read_binary(len); - return new String(a,StandardCharsets.UTF_8); - } - - int readInt() throws IOException { - int ch1 = in.read(); - int ch2 = in.read(); - int ch3 = in.read(); - int ch4 = in.read(); - if ((ch1 | ch2 | ch3 | ch4) < 0) - throw new EOFException(); - return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0)); - } - - void writeString(String s) throws IOException { - byte[] a = s.getBytes(StandardCharsets.UTF_8); - writeInt(a.length); - out.write(a); - } - - void writeInt(int v) throws IOException { - out.write((v >>> 24) & 0xFF); - out.write((v >>> 16) & 0xFF); - out.write((v >>> 8) & 0xFF); - out.write((v >>> 0) & 0xFF); - } -}
--- a/core/src/luan/modules/PickleServer.java Fri Dec 11 00:13:13 2015 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,121 +0,0 @@ -package luan.modules; - -import java.io.InputStream; -import java.io.OutputStream; -import java.io.StringWriter; -import java.io.PrintWriter; -import java.io.IOException; -import java.io.EOFException; -import java.util.List; -import java.util.ArrayList; -import luan.Luan; -import luan.LuanState; -import luan.LuanTable; -import luan.LuanFunction; -import luan.LuanJavaFunction; -import luan.LuanException; - - -public final class PickleServer { - - private final PickleCon con; - private boolean isRunning; - - PickleServer(LuanState luan,InputStream in,OutputStream out) { - this(new PickleCon(luan,in,out)); - } - - PickleServer(PickleCon con) { - this.con = con; - } - - void next() throws IOException { - try { - try { - Object[] result = Luan.array(con.read()); - StringBuilder sb = new StringBuilder(); - sb.append( "return true" ); - for( Object obj : result ) { - sb.append( ", " ); - sb.append( con.pickle(obj) ); - } - sb.append( '\n' ); - con.write( sb.toString() ); - } catch(LuanException e) { -// System.out.println(e); -//e.printStackTrace(); - StringBuilder sb = new StringBuilder(); - sb.append( "return false, " ); - sb.append( con.pickle(e.getFullMessage()) ); - sb.append( ", " ); - sb.append( con.pickle(con.src) ); - sb.append( '\n' ); - con.write( sb.toString() ); - } - } catch(LuanException e2) { - throw new RuntimeException(e2); - } - } - - public void run() throws LuanException { - LuanTable io = (LuanTable)PackageLuan.require(con.luan,"luan:Io"); - LuanTable env = con.env; - Object old_reverse_pickle = io.rawGet("reverse_pickle"); - Object old_unreverse_pickle = env.rawGet("_unreverse_pickle"); - try { - try { - io.rawPut("reverse_pickle", new LuanJavaFunction( - PickleServer.class.getMethod( "reverse_pickle", LuanFunction.class ), this - ) ); - env.rawPut("_unreverse_pickle", new LuanJavaFunction( - PickleServer.class.getMethod( "_unreverse_pickle" ), this - ) ); - } catch(NoSuchMethodException e) { - throw new RuntimeException(e); - } - isRunning = true; - try { - while( isRunning ) { - next(); - } - } catch(EOFException e) { - // done - } catch(IOException e) { - e.printStackTrace(); - } - if( isRunning ) { - try { - con.close(); - } catch(IOException e) { - throw new RuntimeException(e); - } - } - } finally { - io.rawPut("reverse_pickle",old_reverse_pickle); - env.rawPut("_unreverse_pickle",old_unreverse_pickle); - } - } - - public void reverse_pickle(LuanFunction fn) throws IOException, LuanException { - try { - con.write( "return _reversed_pickle()\n" ); - } catch(LuanException e) { - throw new RuntimeException(e); - } - PickleClient pc = new PickleClient(con); - try { - fn.call(con.luan,new Object[]{pc.table()}); - } finally { - try { - pc.call( "_unreverse_pickle()\n" ); - } catch(LuanException e) { - throw new RuntimeException(e); - } - } - } - - public void _unreverse_pickle() { - isRunning = false; - } - -}