annotate src/luan/modules/RpcLuan.java @ 1112:490f77bb2ad1

add JsonParser
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 02 Aug 2017 17:37:59 -0600
parents 88b5b81cad4a
children 22652f4020fb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
1 package luan.modules;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
2
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3 import java.io.InputStream;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
4 import java.io.OutputStream;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
5 import java.io.BufferedInputStream;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
6 import java.io.BufferedOutputStream;
744
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
7 import java.io.InputStreamReader;
754
1a101ac9ea46 add lucene restore
Franklin Schmidt <fschmidt@gmail.com>
parents: 744
diff changeset
8 import java.io.FilterInputStream;
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
9 import java.io.IOException;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
10 import java.io.EOFException;
744
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
11 import java.net.Socket;
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
12 import java.nio.charset.StandardCharsets;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
13 import java.util.Set;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
14 import java.util.IdentityHashMap;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
15 import java.util.Collections;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
16 import java.util.Map;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
17 import luan.Luan;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
18 import luan.LuanState;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
19 import luan.LuanTable;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
20 import luan.LuanFunction;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
21 import luan.LuanException;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
22 import luan.LuanMethod;
758
c29d11d675fd added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents: 754
diff changeset
23 import luan.modules.parsers.Json;
1112
490f77bb2ad1 add JsonParser
Franklin Schmidt <fschmidt@gmail.com>
parents: 1111
diff changeset
24 import luan.lib.json.JsonParser;
1111
88b5b81cad4a move Parser to luan.lib.parser
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
25 import luan.lib.parser.ParseException;
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
26
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
27
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
28 public final class RpcLuan {
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
29 private static final int NIL = 0;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
30 private static final int STRING = 1;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
31 private static final int BOOLEAN = 2;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
32 private static final int NUMBER = 3;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
33 private static final int BINARY = 4;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
34 private static final int TABLE = 5;
744
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
35 private static final int IO = 6;
759
ae612dfc57cb better handling of longs in rpc and json
Franklin Schmidt <fschmidt@gmail.com>
parents: 758
diff changeset
36 private static final int LONG = 7;
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
37
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
38 @LuanMethod public static Object[] call(LuanState luan,LuanTable socketTbl,String fnName,Object... args)
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
39 throws LuanException, IOException
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
40 {
744
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
41 IoLuan.LuanSocket luanSocket = (IoLuan.LuanSocket)socketTbl.rawGet("java");
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
42 Socket socket = luanSocket.socket;
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
43 InputStream in = new BufferedInputStream(socket.getInputStream());
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
44 OutputStream out = new BufferedOutputStream(socket.getOutputStream());
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
45 Close close = new Close();
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
46 try {
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
47 writeString(out,fnName);
744
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
48 writeObjs(out,luan,args);
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
49 out.flush();
744
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
50 socket.shutdownOutput();
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
51 boolean ok = readBoolean(in);
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
52 if( ok ) {
744
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
53 return readObjs(in,luan,close);
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
54 } else {
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
55 String msg = readString(in);
646
cdc70de628b5 simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents: 610
diff changeset
56 throw new LuanException(msg);
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
57 }
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
58 } finally {
744
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
59 if( close.b) {
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
60 socket.close();
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
61 }
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
62 }
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
63 }
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
64
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
65 public static void respond(LuanState luan,LuanTable socketTbl,LuanTable fns)
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
66 throws IOException, LuanException
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
67 {
744
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
68 IoLuan.LuanSocket luanSocket = (IoLuan.LuanSocket)socketTbl.rawGet("java");
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
69 Socket socket = luanSocket.socket;
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
70 InputStream in = new BufferedInputStream(socket.getInputStream());
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
71 OutputStream out = new BufferedOutputStream(socket.getOutputStream());
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
72 try {
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
73 Object[] rtn;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
74 try {
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
75 String fnName = readString(in);
744
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
76 Object[] args = readObjs(in,luan,null);
742
5578541125ea add Hosting.caller()
Franklin Schmidt <fschmidt@gmail.com>
parents: 694
diff changeset
77 LuanFunction fn = (LuanFunction)fns.get(luan,fnName);
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
78 if( fn == null )
646
cdc70de628b5 simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents: 610
diff changeset
79 throw new LuanException( "function not found: " + fnName );
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
80 rtn = Luan.array(fn.call(luan,args));
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
81 } catch(LuanException e) {
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
82 writeBoolean(out,false);
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
83 writeString(out,e.getFullMessage());
754
1a101ac9ea46 add lucene restore
Franklin Schmidt <fschmidt@gmail.com>
parents: 744
diff changeset
84 out.flush();
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
85 return;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
86 }
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
87 writeBoolean(out,true);
744
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
88 writeObjs(out,luan,rtn);
754
1a101ac9ea46 add lucene restore
Franklin Schmidt <fschmidt@gmail.com>
parents: 744
diff changeset
89 out.flush();
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
90 } finally {
744
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
91 socket.close();
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
92 }
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
93 }
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
94
744
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
95 private static void writeObjs(OutputStream out,LuanState luan,Object[] a) throws IOException, LuanException {
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
96 IoLuan.LuanIn luanIn = null;
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
97 writeInt(out,a.length);
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
98 for( Object obj : a ) {
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
99 if( obj instanceof LuanTable ) {
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
100 LuanTable tbl = (LuanTable)obj;
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
101 Object java = tbl.rawGet("java");
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
102 if( java instanceof IoLuan.LuanIn ) {
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
103 if( luanIn != null )
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
104 throw new LuanException("can't have multiple IO params");
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
105 luanIn = (IoLuan.LuanIn)java;
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
106 out.write(IO);
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
107 continue;
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
108 }
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
109 }
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
110 writeObj(out,luan,obj);
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
111 }
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
112 if( luanIn != null ) {
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
113 InputStream in = luanIn.inputStream();
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
114 Utils.copyAll(in,out);
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
115 }
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
116 }
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
117
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
118 private static Object[] readObjs(InputStream in,LuanState luan,Close close) throws IOException, LuanException {
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
119 int n = readInt(in);
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
120 Object[] rtn = new Object[n];
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
121 for( int i=0; i<n; i++ ) {
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
122 rtn[i] = readObj(in,luan,close);
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
123 }
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
124 return rtn;
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
125 }
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
126
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
127 private static void writeObj(OutputStream out,LuanState luan,Object obj) throws IOException, LuanException {
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
128 if( obj == null ) {
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
129 out.write(NIL);
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
130 }
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
131 else if( obj instanceof String ) {
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
132 out.write(STRING);
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
133 writeString(out,(String)obj);
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
134 }
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
135 else if( obj instanceof Boolean ) {
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
136 out.write(BOOLEAN);
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
137 writeBoolean(out,(Boolean)obj);
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
138 }
759
ae612dfc57cb better handling of longs in rpc and json
Franklin Schmidt <fschmidt@gmail.com>
parents: 758
diff changeset
139 else if( obj instanceof Long ) {
ae612dfc57cb better handling of longs in rpc and json
Franklin Schmidt <fschmidt@gmail.com>
parents: 758
diff changeset
140 out.write(LONG);
ae612dfc57cb better handling of longs in rpc and json
Franklin Schmidt <fschmidt@gmail.com>
parents: 758
diff changeset
141 writeString(out,obj.toString());
ae612dfc57cb better handling of longs in rpc and json
Franklin Schmidt <fschmidt@gmail.com>
parents: 758
diff changeset
142 }
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
143 else if( obj instanceof Number ) {
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
144 out.write(NUMBER);
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
145 writeString(out,obj.toString());
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
146 }
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
147 else if( obj instanceof byte[] ) {
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
148 byte[] a = (byte[])obj;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
149 out.write(BINARY);
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
150 writeInt(out,a.length);
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
151 out.write(a);
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
152 }
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
153 else if( obj instanceof LuanTable ) {
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
154 out.write(TABLE);
758
c29d11d675fd added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents: 754
diff changeset
155 // String s = pickle( luan, obj, Collections.newSetFromMap(new IdentityHashMap<LuanTable,Boolean>()) );
c29d11d675fd added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents: 754
diff changeset
156 String s = Json.toString(obj);
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
157 writeString(out,s);
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
158 }
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
159 else
646
cdc70de628b5 simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents: 610
diff changeset
160 throw new LuanException( "invalid type: " + obj.getClass() );
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
161 }
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
162
744
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
163 private static Object readObj(InputStream in,LuanState luan,Close close) throws IOException, LuanException {
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
164 int type = in.read();
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
165 switch(type) {
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
166 case NIL:
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
167 return null;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
168 case STRING:
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
169 return readString(in);
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
170 case BOOLEAN:
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
171 return readBoolean(in);
759
ae612dfc57cb better handling of longs in rpc and json
Franklin Schmidt <fschmidt@gmail.com>
parents: 758
diff changeset
172 case LONG:
ae612dfc57cb better handling of longs in rpc and json
Franklin Schmidt <fschmidt@gmail.com>
parents: 758
diff changeset
173 return Long.valueOf(readString(in));
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
174 case NUMBER:
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
175 return Double.valueOf(readString(in));
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
176 case BINARY:
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
177 return readBinary(in,readInt(in));
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
178 case TABLE:
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
179 String s = readString(in);
758
c29d11d675fd added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents: 754
diff changeset
180 /*
694
b620b8e1010f remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents: 646
diff changeset
181 LuanFunction fn = Luan.load("return "+s,"rpc-reader");
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
182 return fn.call(luan);
758
c29d11d675fd added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents: 754
diff changeset
183 */
c29d11d675fd added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents: 754
diff changeset
184 try {
1112
490f77bb2ad1 add JsonParser
Franklin Schmidt <fschmidt@gmail.com>
parents: 1111
diff changeset
185 return BasicLuan.to_luan(JsonParser.parse(s));
758
c29d11d675fd added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents: 754
diff changeset
186 } catch(ParseException e) {
c29d11d675fd added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents: 754
diff changeset
187 throw new LuanException(e);
c29d11d675fd added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents: 754
diff changeset
188 }
744
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
189 case IO:
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
190 return new LuanInputStream(in,close).table();
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
191 default:
646
cdc70de628b5 simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents: 610
diff changeset
192 throw new LuanException( "invalid type: " + type );
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
193 }
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
194 }
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
195
744
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
196 private static Boolean readBoolean(InputStream in) throws IOException {
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
197 return Boolean.valueOf(readString(in));
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
198 }
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
199
744
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
200 private static String readString(InputStream in) throws IOException {
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
201 int len = readInt(in);
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
202 byte[] a = readBinary(in,len);
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
203 return new String(a,StandardCharsets.UTF_8);
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
204 }
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
205
744
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
206 private static int readInt(InputStream in) throws IOException {
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
207 int ch1 = in.read();
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
208 int ch2 = in.read();
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
209 int ch3 = in.read();
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
210 int ch4 = in.read();
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
211 if ((ch1 | ch2 | ch3 | ch4) < 0)
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
212 throw new EOFException();
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
213 return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0));
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
214 }
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
215
744
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
216 private static byte[] readBinary(InputStream in,int size) throws IOException {
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
217 byte[] a = new byte[size];
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
218 int i = 0;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
219 while( i < size ) {
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
220 int n = in.read(a,i,size-i);
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
221 if( n == -1 )
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
222 throw new EOFException();
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
223 i += n;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
224 }
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
225 return a;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
226 }
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
227
744
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
228 private static void writeBoolean(OutputStream out,Boolean b) throws IOException {
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
229 writeString(out,b.toString());
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
230 }
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
231
744
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
232 private static void writeString(OutputStream out,String s) throws IOException {
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
233 byte[] a = s.getBytes(StandardCharsets.UTF_8);
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
234 writeInt(out,a.length);
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
235 out.write(a);
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
236 }
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
237
744
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
238 private static void writeInt(OutputStream out,int v) throws IOException {
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
239 out.write((v >>> 24) & 0xFF);
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
240 out.write((v >>> 16) & 0xFF);
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
241 out.write((v >>> 8) & 0xFF);
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
242 out.write((v >>> 0) & 0xFF);
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
243 }
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
244
758
c29d11d675fd added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents: 754
diff changeset
245 /*
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
246 private static String pickle(LuanState luan,Object obj,Set<LuanTable> set) throws LuanException {
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
247 if( obj == null )
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
248 return "nil";
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
249 if( obj instanceof Boolean )
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
250 return obj.toString();
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
251 if( obj instanceof Number )
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
252 return Luan.toString((Number)obj);
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
253 if( obj instanceof String )
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
254 return "\"" + Luan.stringEncode((String)obj) + "\"";
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
255 if( obj instanceof LuanTable ) {
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
256 LuanTable tbl = (LuanTable)obj;
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
257 if( !set.add(tbl) ) {
646
cdc70de628b5 simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents: 610
diff changeset
258 throw new LuanException( "circular reference in table" );
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
259 }
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
260 StringBuilder sb = new StringBuilder();
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
261 sb.append( "{" );
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
262 for( Map.Entry<Object,Object> entry : tbl.iterable(luan) ) {
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
263 sb.append( "[" );
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
264 sb.append( pickle(luan,entry.getKey(),set) );
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
265 sb.append( "]=" );
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
266 sb.append( pickle(luan,entry.getValue(),set) );
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
267 sb.append( ", " );
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
268 }
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
269 sb.append( "}" );
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
270 return sb.toString();
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
271 }
646
cdc70de628b5 simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents: 610
diff changeset
272 throw new LuanException( "invalid type: " + obj.getClass() );
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
273 }
758
c29d11d675fd added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents: 754
diff changeset
274 */
744
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
275
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
276 private static class Close {
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
277 boolean b = true;
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
278 }
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
279
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
280 private static class LuanInputStream extends IoLuan.LuanIn {
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
281 private final InputStream in;
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
282 private final boolean close;
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
283
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
284 public LuanInputStream(InputStream in,Close close) {
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
285 this.in = in;
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
286 this.close = close!=null && close.b;
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
287 if(this.close) close.b = false;
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
288 }
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
289
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
290 @Override public InputStream inputStream() {
754
1a101ac9ea46 add lucene restore
Franklin Schmidt <fschmidt@gmail.com>
parents: 744
diff changeset
291 return new FilterInputStream(in) {
1a101ac9ea46 add lucene restore
Franklin Schmidt <fschmidt@gmail.com>
parents: 744
diff changeset
292 @Override public void close() throws IOException {
1a101ac9ea46 add lucene restore
Franklin Schmidt <fschmidt@gmail.com>
parents: 744
diff changeset
293 if(close) super.close();
1a101ac9ea46 add lucene restore
Franklin Schmidt <fschmidt@gmail.com>
parents: 744
diff changeset
294 }
1a101ac9ea46 add lucene restore
Franklin Schmidt <fschmidt@gmail.com>
parents: 744
diff changeset
295 };
744
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
296 }
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
297
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
298 @Override public String to_string() {
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
299 return "<input_stream>";
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
300 }
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
301
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
302 @Override public String to_uri_string() {
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
303 throw new UnsupportedOperationException();
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
304 }
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
305
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
306 @Override public boolean exists() {
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
307 return true;
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
308 }
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
309 };
4b8695f1cfc4 add rpc IO type
Franklin Schmidt <fschmidt@gmail.com>
parents: 742
diff changeset
310
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
311 }