示例#1
0
        /// <summary>
        /// Process a message received by the server.
        /// </summary>
        /// <param name="message">The message to process.</param>
        /// <param name="channel">The server communication channel.</param>
        private static void HandleMessage(IStringMessage message, ITransportChannel channel)
        {
            switch (message.Header)
            {
            case InjectionCompleteNotification.InjectionComplete:
                var messageData = InjectionCompleteNotification.ParseMessage(message);
                if (messageData.Completed)
                {
                    InjectionCompleted(messageData.ProcessId);
                }
                else
                {
                    throw new InjectionLoadException($"Injection into process {messageData.ProcessId} failed.");
                }
                break;

            case LogMessageNotification.Message:
                var logMessageData = LogMessageNotification.ParseMessage(message);
                Log($"{logMessageData.Level}: {logMessageData.Message}");
                break;

            default:
            {
                throw new InvalidOperationException($"Message type {message.Header} is not supported");
            }
            }
        }
示例#2
0
 private static bool SendInjectionComplete(string pipeName, int pid)
 {
     using (var pipeClient = CreateClient(pipeName))
     {
         if (pipeClient.Connect())
         {
             return(SendPipeMessage(pipeClient.MessageHandler,
                                    InjectionCompleteNotification.CreateMessage(pid, true)));
         }
     }
     return(false);
 }
示例#3
0
 private static bool SendInjectionComplete(IMessageWriter writer, int processId)
 {
     return(writer.TryWrite(InjectionCompleteNotification.CreateMessage(processId, true)));
 }