Inheritance: IDisposable
 public static void HandleProcessStateInfo(ProcessStateInfo processStateInfo, IPCClientBase client)
 {
     switch (processStateInfo.State)
     {
         case ProcessState.Stop:
             BnetServer.Shutdown();
             break;
         default:
             Log.Message(LogTypes.Error, $"Received unhandled process state '{processStateInfo.State}' from '{processStateInfo.Alias}'.");
             break;
     } 
 }
        public static async Task CallHandler(byte ipcMessage, Stream ipcMessageData, IPCClientBase client)
        {
            var message = (IPCMessage)ipcMessage;

            Tuple<MethodInfo, Type> data;

            if (messageHandlers.TryGetValue(message, out data))
            {
                var handlerObj = Activator.CreateInstance(data.Item2, ipcMessage, ipcMessageData) as IPCPacket;

                await Task.Run(() => data.Item1.Invoke(null, new object[] { handlerObj, client }));
            }
            else
            {
                var msgName = Enum.GetName(typeof(IPCMessage), message);

                if (msgName == null)
                    Log.Message(LogTypes.Warning, $"Received unknown ipc message '0x{message:X}'.");
                else
                    Log.Message(LogTypes.Warning, $"Handler for '{msgName} (0x{message:X}) not implemented.");
            }
        }