@@ -90,12 +90,52 @@ public void addHandlersToRouter(final @NotNull Router router) {
9090
9191 log .info ("Putting chunkedFile into the local map" );
9292 map .put ("chunkedFile" , chunkedFileWrapper );
93+ map .put ("openedFilename" , filename );
9394
9495 map .put ("TileStatisticHolder" , TileStatisticHolder .newDefaultStatisticHolder (chunkedFile .getResolutions ().length ));
9596
9697 ctx .response ().end (Json .encode (generateOpenFileResponse (chunkedFile )));
9798 });
9899
100+ router .post ("/attach" ).blockingHandler (ctx -> {
101+ final @ NotNull @ NonNull LocalMap <String , Object > map = vertx .sharedData ().getLocalMap ("hict_server" );
102+ final var chunkedFileWrapper = ((ShareableWrappers .ChunkedFileWrapper ) (map .get ("chunkedFile" )));
103+ if (chunkedFileWrapper == null ) {
104+ ctx .response ()
105+ .setStatusCode (404 )
106+ .putHeader ("content-type" , "application/json" )
107+ .end (Json .encode (new io .vertx .core .json .JsonObject ().put ("error" , "No session to attach" )));
108+ return ;
109+ }
110+ final var chunkedFile = chunkedFileWrapper .getChunkedFile ();
111+ final var filename = (String ) map .getOrDefault ("openedFilename" , "" );
112+ ctx .response ()
113+ .putHeader ("content-type" , "application/json" )
114+ .end (Json .encode (
115+ new io .vertx .core .json .JsonObject ()
116+ .put ("filename" , filename )
117+ .put ("openFileResponse" , generateOpenFileResponse (chunkedFile ))
118+ ));
119+ });
120+
121+ router .post ("/close" ).blockingHandler (ctx -> {
122+ final @ NotNull @ NonNull LocalMap <String , Object > map = vertx .sharedData ().getLocalMap ("hict_server" );
123+ final var chunkedFileWrapper = ((ShareableWrappers .ChunkedFileWrapper ) (map .get ("chunkedFile" )));
124+ if (chunkedFileWrapper != null ) {
125+ try {
126+ chunkedFileWrapper .getChunkedFile ().close ();
127+ } catch (Exception e ) {
128+ log .warn ("Failed to close chunked file" , e );
129+ }
130+ }
131+ map .remove ("chunkedFile" );
132+ map .remove ("TileStatisticHolder" );
133+ map .remove ("openedFilename" );
134+ ctx .response ()
135+ .putHeader ("content-type" , "application/json" )
136+ .end (Json .encode (new io .vertx .core .json .JsonObject ().put ("status" , "closed" )));
137+ });
138+
99139 router .post ("/get_agp_for_assembly" ).blockingHandler (ctx -> {
100140 final @ NotNull @ NonNull LocalMap <String , Object > map = vertx .sharedData ().getLocalMap ("hict_server" );
101141 log .debug ("Got map" );
0 commit comments