- Timestamp:
- 07/10/13 22:41:02 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
java/main/src/main/java/com/framsticks/hosting/ClientAtServer.java
r98 r99 8 8 import com.framsticks.communication.queries.GetRequest; 9 9 import com.framsticks.communication.queries.InfoRequest; 10 import com.framsticks.communication.queries.RegisterRequest; 10 11 import com.framsticks.communication.queries.SetRequest; 12 import com.framsticks.core.LocalTree; 11 13 import com.framsticks.core.Tree; 12 14 import com.framsticks.core.Path; 13 15 import com.framsticks.params.*; 16 import com.framsticks.params.types.EventParam; 14 17 import com.framsticks.params.types.ProcedureParam; 15 18 import com.framsticks.parsers.Savers; 16 19 import com.framsticks.util.FramsticksException; 20 import com.framsticks.util.Misc; 17 21 import com.framsticks.util.dispatching.AbstractJoinable; 18 22 import com.framsticks.util.dispatching.Dispatching; … … 22 26 import com.framsticks.util.dispatching.JoinableParent; 23 27 import com.framsticks.util.dispatching.JoinableState; 28 import com.framsticks.util.lang.FlagsUtil; 29 import com.framsticks.util.lang.Strings; 30 24 31 import static com.framsticks.core.TreeOperations.*; 25 32 26 33 import java.net.Socket; 27 import java.util.LinkedList;28 import java.util.List;29 34 30 35 /** … … 34 39 35 40 protected final Server server; 36 protected final Tree tree; 41 protected final Tree contentTree; 42 protected final Object treeRootObject; 37 43 protected final ServerSideManagedConnection connection; 44 45 protected final Cli cliObject; 46 protected final LocalTree rootTree; 47 48 49 protected final FramsClass rootFramsClass; 50 protected final Object root; 51 protected final String contentPrefix; 38 52 39 53 public ClientAtServer(Server server, Socket socket) { 40 54 this.server = server; 41 this. tree = server.hosted;55 this.contentTree = server.hosted; 42 56 this.connection = new ServerSideManagedConnection(socket, this); 57 58 treeRootObject = contentTree.getAssignedRoot().getObject(); 59 Misc.throwIfNull(treeRootObject); 60 61 cliObject = new Cli(this); 62 rootTree = new LocalTree(); 63 // rootTree.setDispatcher(new AtOnceDispatcher<Tree>()); 64 rootTree.setDispatcher(server.getHosted().getDispatcher()); 65 assert rootTree.getDispatcher() != null; 66 67 final FramsClass framsClass = bindAccess(contentTree.getAssignedRoot()).getFramsClass(); 68 final String id = Strings.uncapitalize(framsClass.getName()); 69 contentPrefix = "/" + id; 70 final String rootFramsClassId = id + "Root"; 71 72 rootFramsClass = FramsClass.build() 73 .idAndName(rootFramsClassId) 74 .param(Param.build().id(id).name(framsClass.getName()).type("o " + framsClass.getId())) 75 .param(Param.build().id("cli").name("CLI").type("o Cli")) 76 .finish(); 77 78 // rootTree.putInfoIntoCache(rootFramsClass); 79 rootTree.getRegistry().putFramsClass(rootFramsClass); 80 rootTree.getRegistry().registerAndBuild(Cli.class); 81 rootTree.getRegistry().registerAndBuild(CliEvent.class); 82 83 AccessInterface access = new PropertiesAccess(rootFramsClass); 84 85 root = access.createAccessee(); 86 access.select(root); 87 access.set(id, treeRootObject); 88 access.set("cli", cliObject); 89 90 rootTree.assignRootParam(access.buildParam(new ParamBuilder()).name(rootFramsClassId).finish(CompositeParam.class)); 91 rootTree.assignRootObject(root); 92 43 93 } 44 94 … … 52 102 assureNotEmpty(request.getPath()); 53 103 54 tryGet(tree, request.getPath(), new FutureHandler<Path>(responseCallback) { 104 if (request.getPath().startsWith(contentPrefix)) { 105 String p = request.getPath().substring(contentPrefix.length()); 106 request.path(p.equals("") ? "/" : p); 107 handleInTree(contentTree, request, responseCallback, contentPrefix); 108 return; 109 } 110 111 handleInTree(rootTree, request, responseCallback, ""); 112 } 113 114 public static File printToFile(String path, AccessInterface access) { 115 ListSink sink = new ListSink(); 116 access.save(sink); 117 return new File(path, new ListSource(sink.getOut())); 118 } 119 120 protected void handleInTree(final Tree tree, final ApplicationRequest request, final ServerSideResponseFuture responseCallback, final String usedPrefix) { 121 122 tryGet(tree, request.getActualPath(), new FutureHandler<Path>(responseCallback) { 55 123 @Override 56 124 protected void result(final Path path) { 57 125 58 if (!path.getTextual().equals(request.get Path())) {59 throw new FramsticksException().msg("invalid path").arg("path", request.get Path());126 if (!path.getTextual().equals(request.getActualPath())) { 127 throw new FramsticksException().msg("invalid path").arg("path", request.getActualPath()); 60 128 } 61 129 62 130 // final AccessInterface access = tree.prepareAccess(path); 63 131 final AccessInterface access = bindAccess(path); 132 133 if (request instanceof GetRequest) { 134 Object result = path.getTopObject(); 135 if (result != access.getSelected()) { 136 throw new FramsticksException().msg("mismatch objects during fetch").arg("path", path); 137 } 138 responseCallback.pass(new Response(true, "", File.single(printToFile(path.getTextual(), access)))); 139 140 return; 141 } 64 142 65 143 if (request instanceof SetRequest) { … … 69 147 @Override 70 148 protected void result(Integer flag) { 71 responseCallback.pass(new Response(true, Flags .write(flag, null), null));149 responseCallback.pass(new Response(true, FlagsUtil.write(SetStateFlags.class, flag, null), null)); 72 150 73 151 } … … 76 154 } 77 155 78 if (request instanceof GetRequest) {79 Object result = path.getTopObject();80 if (result != access.getSelected()) {81 throw new FramsticksException().msg("mismatch objects during fetch").arg("path", path);82 }83 List<File> files = new LinkedList<File>();84 ListSink sink = new ListSink();85 access.save(sink);86 files.add(new File(path.getTextual(), new ListSource(sink.getOut())));87 responseCallback.pass(new Response(true, "", files));88 89 return;90 }91 156 if (request instanceof CallRequest) { 92 157 final CallRequest callRequest = (CallRequest) request; … … 107 172 return; 108 173 } 174 109 175 if (request instanceof InfoRequest) { 110 176 FramsClass framsClass = getInfo(path); … … 116 182 } 117 183 184 if (request instanceof RegisterRequest) { 185 RegisterRequest register = (RegisterRequest) request; 186 187 cliObject.addListener(path, access.getFramsClass().getParamEntry(register.getEventName(), EventParam.class), usedPrefix, responseCallback); 188 return; 189 } 190 118 191 throw new FramsticksException().msg("invalid request type: " + request.getCommand()); 119 192 } … … 148 221 @Override 149 222 public void handle(FramsticksException exception) { 150 tree.handle(exception); 223 contentTree.handle(exception); 224 } 225 226 /** 227 * @return the tree 228 */ 229 public Tree getTree() { 230 return contentTree; 151 231 } 152 232
Note: See TracChangeset
for help on using the changeset viewer.