public static Action <byte[]> ReceiveActionHelper()
        {
            return(new Action <byte[]>((message) => {
                Serilog.Log.Debug("{0} {1}: Message Received Handler, Message is {2}", "PluginVAGameAOE", "ReceiveMessage", System.Text.Encoding.UTF8.GetString(message, 0, message.Length));
                // Convert byte[] to an Game AOE message
                VoiceAttackActionWithDelay voiceAttackActionWithDelay = ((ATAP.Utilities.VoiceAttack.Game.AOE.Data)Data).FromByteArray(message);
                switch (voiceAttackActionWithDelay.VoiceAttackAction.VoiceAttackActionKind)
                {
                case VoiceAttackActionKind.Say:
                    Serilog.Log.Debug("{0} {1}: VoiceAttackAction Say {2}", "PluginVAGameAOE", "ReceiveMessage", ((VoiceAttackActionSay)voiceAttackActionWithDelay.VoiceAttackAction).Phrase);
                    // toDo: PreDelay
                    Data.SpeechSynthesizer.Speak(((VoiceAttackActionSay)voiceAttackActionWithDelay.VoiceAttackAction).Phrase);
                    // toDo: PostDelay
                    break;

                case VoiceAttackActionKind.Command:
                    Serilog.Log.Debug("{0} {1}: VoiceAttackAction Command {2}", "PluginVAGameAOE", "ReceiveMessage", ((VoiceAttackActionCommand)voiceAttackActionWithDelay.VoiceAttackAction).Command);
                    // toDo: PreDelay
                    Data.StoredVAProxy.Command.Execute(((VoiceAttackActionCommand)voiceAttackActionWithDelay.VoiceAttackAction).Command);
                    // toDo: PostDelay
                    break;

                case VoiceAttackActionKind.Delay:
                    break;

                // ToDo: Delay command
                default:
                    throw new InvalidDataException($"Invalid VoiceAttackActionKind {voiceAttackActionWithDelay.VoiceAttackAction.VoiceAttackActionKind.ToString()}");
                }
                ;
            }));
        }
 public byte[] ToByteArray(VoiceAttackActionWithDelay voiceAttackActionWithDelay)
 {
     // Serialize to JSON using specified Serializer
     return(System.Text.Encoding.UTF8.GetBytes(Serializer.Serialize(voiceAttackActionWithDelay)));
 }
 public string ToJson(VoiceAttackActionWithDelay voiceAttackActionWithDelay)
 {
     // Serialize to JSON using specified Serializer
     return(Serializer.Serialize(voiceAttackActionWithDelay));
 }