From efb5ad9f5fe48a77b6cd14e7bd2b25e3b13ecb1f Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 3 Jun 2014 16:44:56 +0200 Subject: Initial commit --- .../openslx/taskmanager/network/RequestParser.java | 66 ++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 daemon/src/main/java/org/openslx/taskmanager/network/RequestParser.java (limited to 'daemon/src/main/java/org/openslx/taskmanager/network/RequestParser.java') diff --git a/daemon/src/main/java/org/openslx/taskmanager/network/RequestParser.java b/daemon/src/main/java/org/openslx/taskmanager/network/RequestParser.java new file mode 100644 index 0000000..d2cfb21 --- /dev/null +++ b/daemon/src/main/java/org/openslx/taskmanager/network/RequestParser.java @@ -0,0 +1,66 @@ +package org.openslx.taskmanager.network; + +import java.nio.charset.StandardCharsets; + +import org.apache.log4j.Logger; +import org.openslx.taskmanager.api.TaskStatus; +import org.openslx.taskmanager.main.Taskmanager; + +import com.google.gson.Gson; + +public class RequestParser +{ + private static final Logger log = Logger.getLogger( RequestParser.class ); + + /** + * Our very own gson instance (for serializing replies) + */ + private static final Gson sendGson = new Gson(); + + /** + * Handle the given unparsed request. + * + * @param source source of the request, where the reply will be send to (if any) + * @param payload Packet data received from network, already converted to a string + */ + public static byte[] handle( String payload ) + { + String[] parts = payload.split( " *, *", 3 ); + // Message format is ", , " + if ( parts.length != 3 ) { + log.debug( "Could not split message" ); + return null; + } + // Look at parts[1], if it's "status" it's a request for the task + // with the ID given in parts[2] + if ( parts[1].equals( "status" ) ) { + TaskStatus status = Taskmanager.getTaskStatus( parts[2] ); + return serialize( parts[0], status ); + } + // Now check if parts[1] is "release" + if ( parts[1].equals( "release" ) ) { + Taskmanager.releaseTask( parts[2] ); + return null; + } + // Anything else in parts[0] will be treated as a fresh task invocation, so let's + // pass it on to the task manager. + TaskStatus status = Taskmanager.submitTask( parts[1], parts[2] ); + return serialize( parts[0], status ); + } + + private static byte[] serialize( String messageId, TaskStatus status ) + { + String data; + try { + synchronized ( sendGson ) { + data = sendGson.toJson( status ); + } + } catch ( Throwable e ) { + log.warn( "Could not serialize reply with TaskStatus " + status.getStatusObjectClassName() ); + log.warn( e.toString() ); + return null; + } + return ( messageId + ',' + data ).getBytes( StandardCharsets.UTF_8 ); + } + +} -- cgit v1.2.3-55-g7522