public override int ReadFrom(byte[] Buffer, int StartIndex = 0)
        {
            int cursor = StartIndex;

            cursor += base.ReadFrom(Buffer, cursor);

            Message = new ServerString(ChatMessageType.ServerChatMessage, LookupList, Buffer, cursor);
            cursor += Message.ByteLength;

            return(cursor - StartIndex);
        }
Example #2
0
        /// <summary>
        /// Sends Message to IrcChannel, splitting if necessary to avoid
        /// IRC character limit. Uses a conservative split limit (280)
        /// due to color codes seeming to shorten the max length from 450
        /// on EsperNet.
        /// </summary>
        /// <param name="Message"></param>
        private void SendSplitIRCChannelServerString(ServerString Message)
        {
            // Must have somewhere to send.
            if (!IrcClient.IsRegistered || IrcChannel == null)
            {
                return;
            }

            // build a str to log
            // this has a prefix (e.g. "103: ") and a m59 message
            string chatstr =
                IRCChatStyle.GetPrefixString(Config.ChatPrefix) +
                IRCChatStyle.CreateIRCMessageFromChatMessage(Message);

            // try to log the chatmessage to IRC
            // Short path
            if (chatstr.Length < 280)
            {
                IrcClient.LocalUser.SendMessage(IrcChannel, chatstr);
                return;
            }

            try
            {
                string lastStyle = string.Empty;
                int    count     = 0;
                while (chatstr.Length > 0 && count++ < 8)
                {
                    string substr = chatstr.Truncate(IRCChatStyle.GetGoodTruncateIndex(chatstr, 280));
                    IrcClient.LocalUser.SendMessage(IrcChannel, lastStyle + substr);
                    chatstr   = chatstr.Substring(substr.Length);
                    lastStyle = IRCChatStyle.GetLastChatStyleString(substr);
                }
            }
            catch (Exception e)
            {
                Log("ERROR", "Failed string splitting: " + e.Message);
            }
        }
Example #3
0
        /// <summary>
        /// Creates a colored IRC message string from a ChatMessage instance
        /// </summary>
        /// <param name="ChatMessage"></param>
        /// <returns></returns>
        public static string CreateIRCMessageFromChatMessage(ServerString ChatMessage)
        {
            // prefix
            string s = String.Empty;

            // insert styles as IRC chatstyles
            foreach (ChatStyle style in ChatMessage.Styles)
            {
                // bold
                if (style.IsBold)
                {
                    s += IRCCOLOR_BOLD;
                }

                // italic
                if (style.IsCursive)
                {
                    s += IRCCOLOR_ITALIC;
                }

                // underline
                if (style.IsUnderline)
                {
                    s += IRCCOLOR_UNDERLINE;
                }

                // init IRC color
                s += IRCCOLOR_START;

                // add color with lightgrey background
                switch (style.Color)
                {
                case ChatColor.Black:
                    s += IRCCOLOR_BLACK + "," + IRCCOLOR_GREY;
                    break;

                case ChatColor.Blue:
                    s += IRCCOLOR_BLUE + "," + IRCCOLOR_GREY;;
                    break;

                case ChatColor.Green:
                    s += IRCCOLOR_GREEN + "," + IRCCOLOR_GREY;;
                    break;

                case ChatColor.Purple:
                case ChatColor.Violet:     // no match
                    s += IRCCOLOR_PURPLE + "," + IRCCOLOR_GREY;;
                    break;

                case ChatColor.Red:
                case ChatColor.BrightRed:     // no IRC match
                    s += IRCCOLOR_RED + "," + IRCCOLOR_GREY;;
                    break;

                case ChatColor.White:
                    s += IRCCOLOR_WHITE + "," + IRCCOLOR_GREY;;
                    break;

                case ChatColor.LightGreen:
                    s += IRCCOLOR_LIGHTGREEN + "," + IRCCOLOR_GREY;;
                    break;

                case ChatColor.Yellow:
                    s += IRCCOLOR_YELLOW + "," + IRCCOLOR_GREY;;
                    break;

                case ChatColor.Pink:
                case ChatColor.Magenta:     // no IRC match
                    s += IRCCOLOR_LIGHTPINK + "," + IRCCOLOR_GREY;;
                    break;

                case ChatColor.Orange:
                    s += IRCCOLOR_ORANGE + "," + IRCCOLOR_GREY;;
                    break;

                case ChatColor.Cyan:
                case ChatColor.Aquamarine:     // no IRC match
                    s += IRCCOLOR_LIGHTCYAN + "," + IRCCOLOR_GREY;;
                    break;

                case ChatColor.Teal:
                    s += IRCCOLOR_TEAL + "," + IRCCOLOR_GREY;;
                    break;

                case ChatColor.DarkGrey:     // no IRC match
                    s += IRCCOLOR_LIGHTGREY + "," + IRCCOLOR_GREY;;
                    break;
                }

                // now copy textchunk of this style to output
                s += ChatMessage.FullString.Substring(style.StartIndex, style.Length);

                // appendix
                s += IRCCOLOR_TERM;
            }

            // IRC does not allow \r \n and \0
            // since player messages should not contain them at all (except for shopbot)
            // we remove them here as a final step (don't do earlier!)
            // not worth the work to keeping the last chatstyle to the next irc message start
            s = s.Replace("\r", String.Empty).Replace("\n", String.Empty).Replace(Environment.NewLine, String.Empty).Replace("\0", String.Empty);

            // return
            return(s);
        }
 public MessageMessage(ServerString Message, StringDictionary LookupList)
     : base(MessageTypeGameMode.Message)
 {
     this.LookupList = LookupList;
     this.Message    = Message;
 }
        public override unsafe void ReadFrom(ref byte *Buffer)
        {
            base.ReadFrom(ref Buffer);

            Message = new ServerString(ChatMessageType.ServerChatMessage, LookupList, ref Buffer);
        }