示例#1
0
        // TODO: these functions should not block the ipc thread
        /// <summary>
        /// Handles messages that are sent by clients by dispatching functions and then sending the results back
        /// </summary>
        /// <param name="connection"></param>
        /// <param name="message"></param>
        private static void OnClientMessage(NamedPipeConnection <SerializedFunction, SerializedResult> connection, SerializedFunction message)
        {
            // The pipeId that comes in from the message is the clients unique pipe id,
            // But that is not unique on the server, so we use the connections id.

            lock (client_lock)
            {
                // Log.WriteLine("Client message...");

                // Log.WriteLine("{{");
                // Log.WriteLine("\tClientId = {0}", message.ClientId);
                // Log.WriteLine("\tJobId = {0}", message.JobId);
                // Log.WriteLine("\tInterfaceId = {0}", message.InterfaceId);
                // Log.WriteLine("\tPipeId = \"{0}\"", connection.Id);
                // Log.WriteLine("\tName = \"{0}\"", message.Name);

                // if (message.Args == null)
                // {
                //     Log.WriteLine("\tArgs = {}");
                // }
                // else
                // {
                //     Log.WriteLine("\tArgs = {{{0}}}", String.Join(",", message.Args));
                // }

                // Log.WriteLine("}}");

                Log.WriteLine("[{3}] [ClientMessage c: {1} p: {2}] \"{0}\"", message.Name, message.ClientId, message.PipeId, message.JobId);

                object result = null;

                try
                {
                    result = Client.CallSerializedFunction(connection.Id, message.ClientId, message.InterfaceId, message.Name, message.Args);
                }
                catch (Exception e)
                {
                    Console.WriteLine("Error occured processing job {0}, \"{1}\"", message.JobId, e.Message);
                }

                var result_message = new SerializedResult
                {
                    PipeId      = message.PipeId,
                    ClientId    = message.ClientId,
                    InterfaceId = message.InterfaceId,
                    JobId       = message.JobId,
                    Result      = result,
                    Args        = message.Args,
                };

                connection.PushMessage(result_message);
            }
        }
示例#2
0
        /// <summary>
        /// Called on every message send from the server
        /// </summary>
        /// <param name="connection">Current connection</param>
        /// <param name="message">Message recieved from the server</param>
        private static void OnServerMessage(NamedPipeConnection <SerializedResult, SerializedFunction> connection, SerializedResult message)
        {
            var pipe = ActivePipes[message.PipeId];

            pipe.current_results.Add(message);
            var semaphore = pipe.result_semaphores[message.JobId];

            semaphore.Release();
        }
 private string serializeResult(Result x)
 {
     SerializedResult c = new SerializedResult(x, Prefix, ResultResourceTemplate, FencerResourceTemplate, CompetitionResourceTemplate);
     return JsonConvert.SerializeObject(c);
 }