/// <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"); } } }
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); }
private static bool SendInjectionComplete(IMessageWriter writer, int processId) { return(writer.TryWrite(InjectionCompleteNotification.CreateMessage(processId, true))); }