internal static void OnKnubotAnswerList(N3Message n3Msg) { KnuBotAnswerListMessage knubotMsg = (KnuBotAnswerListMessage)n3Msg; Dictionary <int, string> options = new Dictionary <int, string>(); for (int i = 0; i < knubotMsg.DialogOptions.Length; i++) { options.Add(i, knubotMsg.DialogOptions[i].Text); } AnswerListChanged?.Invoke(knubotMsg.Target, options); }
static void savePacket(int srcPort, Message message, Stream data) { if (message != null) { Console.WriteLine(srcPort + " " + message.Body.GetType().Name + " size=" + message.Header.Size); //What packet do you get when you literally walk away from a conversation? Change playfield? //Can you have multiple conversations simultaneously? //You still need to fix your TCP parser to reassemble packets (erp) //What about timing information (for animations and reponses)? (probably also requires refactoring) if (message.Body is KnuBotOpenChatWindowMessage) { KnuBotOpenChatWindowMessage body = (KnuBotOpenChatWindowMessage)message.Body; string conversationIdentity = body.Identity.Instance.ToString(); Console.WriteLine(" Begin conversation with " + conversationIdentity); } else if (message.Body is KnuBotAnswerListMessage) { KnuBotAnswerListMessage body = (KnuBotAnswerListMessage)message.Body; Console.WriteLine(" Dialog Options: "); foreach (var option in body.DialogOptions) { Console.WriteLine(" - " + option.Text); } } else if (message.Body is KnuBotAnswerMessage) { KnuBotAnswerMessage body = (KnuBotAnswerMessage)message.Body; string conversationIdentity = body.Identity.Instance.ToString(); Console.WriteLine("Answered with option: " + body.Answer); Console.WriteLine("ok?"); } else if (message.Body is KnuBotAppendTextMessage) { KnuBotAppendTextMessage body = (KnuBotAppendTextMessage)message.Body; string conversationIdentity = body.Identity.Instance.ToString(); Console.WriteLine(conversationIdentity + " says: " + body.Text); Console.WriteLine("ok?"); } else if (message.Body is CharacterActionMessage) { CharacterActionMessage body = (CharacterActionMessage)message.Body; string identity = body.Identity.Instance.ToString(); Console.WriteLine(" Character " + identity + " performs action " + body.Action.ToString()); } } else { data.Position = 0; byte[] buffer = new byte[20]; int countRead = data.Read(buffer, 0, buffer.Length); bool allZero = true; foreach (byte b in buffer) { if (b != 0) { allZero = false; break; } } if (countRead <= 0) { Console.WriteLine(srcPort + " Could not deserialize: EMPTY PACKET"); } else if (allZero) { Console.WriteLine(srcPort + " Could not deserialize: ZEROES EVERYWHERE"); } else if (countRead > 0) { Console.WriteLine(srcPort + " Could not deserialize, unknown packet: " + BitConverter.ToString(buffer)); } else { Console.WriteLine(srcPort + " Could not deserialize, empty packet"); } } }