Exemple #1
0
        /// <summary>
        /// Creates a new <see cref="ChatRoom"/> from a received <see cref="ByteStream"/>
        /// </summary>
        public ChatRoom(ByteStream stream)
        {
            exchangeNumber = stream.ReadUshort();
            fullName       = stream.ReadString(stream.ReadByte(), Encoding.ASCII);
            instance       = stream.ReadUshort();

            // A small chat room info block will only contain the bare essentials:
            // exchange number, chat room name, and instance number.
            // The chat room class really wants a display name, so parse one here.
            if (stream.HasMoreData)
            {
                detailLevel = stream.ReadByte();
                unknownCode = stream.ReadUshort(); // No idea what this is

                using (TlvBlock block = new TlvBlock(stream.ReadByteArrayToEnd()))
                {
                    flags = block.ReadUshort(CHATROOM_FLAGS);
                    if (block.HasTlv(CHATROOM_CREATION_TIME))
                    {
                        creationTime = block.ReadDateTime(CHATROOM_CREATION_TIME);
                    }
                    maxMessageLength    = block.ReadUshort(CHATROOM_MESSAGE_LENGTH);
                    maxOccupants        = block.ReadUshort(CHATROOM_MAX_OCCUPANTS);
                    displayName         = block.ReadString(CHATROOM_DISPLAYNAME, Encoding.ASCII);
                    creationPermissions = block.ReadByte(CHATROOM_PERMISSIONS);

                    string charset = block.ReadString(CHATROOM_CHARSET1, Encoding.ASCII);
                    if (!String.IsNullOrEmpty(charset))
                    {
                        charSet1 = Encoding.GetEncoding(charset);
                    }
                    language1 = block.ReadString(CHATROOM_LANGUAGE1, Encoding.ASCII);

                    charset = block.ReadString(CHATROOM_CHARSET2, Encoding.ASCII);
                    if (!String.IsNullOrEmpty(charset))
                    {
                        charSet2 = Encoding.GetEncoding(charset);
                    }
                    language2 = block.ReadString(CHATROOM_LANGUAGE2, Encoding.ASCII);

                    contentType = block.ReadString(CHATROOM_CONTENTTYPE, Encoding.ASCII);
                }
            }

            // Make sure there's a display name to show
            if (String.IsNullOrEmpty(displayName))
            {
                Match match = AolUriParser.Match(fullName);
                if (match.Success)
                {
                    //displayName = UtilityMethods.DeHexUri(match.Groups["roomname"].Value);
                    int lastDashBeforeName = fullName.IndexOf('-', 16);
                    displayName = fullName.Substring(lastDashBeforeName + 1);
                }
                else
                {
                    displayName = fullName;
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// Processes an update to the chat room information -- SNAC(0E,02)
        /// </summary>
        /// <param name="dp">A <see cref="DataPacket"/> object containing SNAC(0E,02)</param>
        internal void ProcessRoomUpdate(DataPacket dp)
        {
            exchangeNumber = dp.Data.ReadUshort();
            fullName       = dp.Data.ReadString(dp.Data.ReadByte(), Encoding.ASCII);
            instance       = dp.Data.ReadUshort();
            detailLevel    = dp.Data.ReadByte();


            ushort tlvcount = dp.Data.ReadUshort();

            using (TlvBlock tlvs = new TlvBlock(dp.Data.ReadByteArrayToEnd()))
            {
                displayName      = tlvs.ReadString(CHATROOM_DISPLAYNAME, Encoding.ASCII);
                flags            = tlvs.ReadUshort(CHATROOM_FLAGS);
                creationTime     = tlvs.ReadDateTime(CHATROOM_CREATION_TIME);
                maxMessageLength = tlvs.ReadUshort(CHATROOM_MESSAGE_LENGTH);

                string charset = tlvs.ReadString(CHATROOM_CHARSET1, Encoding.ASCII);
                if (!String.IsNullOrEmpty(charset))
                {
                    charSet1 = Encoding.GetEncoding(charset);
                }
                language1 = tlvs.ReadString(CHATROOM_LANGUAGE1, Encoding.ASCII);

                charset = tlvs.ReadString(CHATROOM_CHARSET2, Encoding.ASCII);
                if (!String.IsNullOrEmpty(charset))
                {
                    charSet2 = Encoding.GetEncoding(charset);
                }
                language2 = tlvs.ReadString(CHATROOM_LANGUAGE2, Encoding.ASCII);

                contentType = tlvs.ReadString(CHATROOM_CONTENTTYPE, Encoding.ASCII);

                ushort maxvisiblemessagelength = tlvs.ReadUshort(0x00DA);
                string description             = tlvs.ReadString(0x00D3, Encoding.ASCII);
            }
        }
Exemple #3
0
        /// <summary>
        /// Processes an update to the chat room information -- SNAC(0E,02)
        /// </summary>
        /// <param name="dp">A <see cref="DataPacket"/> object containing SNAC(0E,02)</param>
        internal void ProcessRoomUpdate(DataPacket dp)
        {
            exchangeNumber = dp.Data.ReadUshort();
            fullName = dp.Data.ReadString(dp.Data.ReadByte(), Encoding.ASCII);
            instance = dp.Data.ReadUshort();
            detailLevel = dp.Data.ReadByte();

            ushort tlvcount = dp.Data.ReadUshort();
            using (TlvBlock tlvs = new TlvBlock(dp.Data.ReadByteArrayToEnd()))
            {
                displayName = tlvs.ReadString(CHATROOM_DISPLAYNAME, Encoding.ASCII);
                flags = tlvs.ReadUshort(CHATROOM_FLAGS);
                creationTime = tlvs.ReadDateTime(CHATROOM_CREATION_TIME);
                maxMessageLength = tlvs.ReadUshort(CHATROOM_MESSAGE_LENGTH);

                string charset = tlvs.ReadString(CHATROOM_CHARSET1, Encoding.ASCII);
                if (!String.IsNullOrEmpty(charset))
                {
                    charSet1 = Encoding.GetEncoding(charset);
                }
                language1 = tlvs.ReadString(CHATROOM_LANGUAGE1, Encoding.ASCII);

                charset = tlvs.ReadString(CHATROOM_CHARSET2, Encoding.ASCII);
                if (!String.IsNullOrEmpty(charset))
                {
                    charSet2 = Encoding.GetEncoding(charset);
                }
                language2 = tlvs.ReadString(CHATROOM_LANGUAGE2, Encoding.ASCII);

                contentType = tlvs.ReadString(CHATROOM_CONTENTTYPE, Encoding.ASCII);

                ushort maxvisiblemessagelength = tlvs.ReadUshort(0x00DA);
                string description = tlvs.ReadString(0x00D3, Encoding.ASCII);
            }
        }
Exemple #4
0
        /// <summary>
        /// Creates a new <see cref="ChatRoom"/> from a received <see cref="ByteStream"/>
        /// </summary>
        public ChatRoom(ByteStream stream)
        {
            exchangeNumber = stream.ReadUshort();
            fullName = stream.ReadString(stream.ReadByte(), Encoding.ASCII);
            instance = stream.ReadUshort();

            // A small chat room info block will only contain the bare essentials:
            // exchange number, chat room name, and instance number.
            // The chat room class really wants a display name, so parse one here.
            if (stream.HasMoreData)
            {
                detailLevel = stream.ReadByte();
                unknownCode = stream.ReadUshort(); // No idea what this is

                using (TlvBlock block = new TlvBlock(stream.ReadByteArrayToEnd()))
                {
                    flags = block.ReadUshort(CHATROOM_FLAGS);
                    if (block.HasTlv(CHATROOM_CREATION_TIME))
                    {
                        creationTime = block.ReadDateTime(CHATROOM_CREATION_TIME);
                    }
                    maxMessageLength = block.ReadUshort(CHATROOM_MESSAGE_LENGTH);
                    maxOccupants = block.ReadUshort(CHATROOM_MAX_OCCUPANTS);
                    displayName = block.ReadString(CHATROOM_DISPLAYNAME, Encoding.ASCII);
                    creationPermissions = block.ReadByte(CHATROOM_PERMISSIONS);

                    string charset = block.ReadString(CHATROOM_CHARSET1, Encoding.ASCII);
                    if (!String.IsNullOrEmpty(charset))
                    {
                        charSet1 = Encoding.GetEncoding(charset);
                    }
                    language1 = block.ReadString(CHATROOM_LANGUAGE1, Encoding.ASCII);

                    charset = block.ReadString(CHATROOM_CHARSET2, Encoding.ASCII);
                    if (!String.IsNullOrEmpty(charset))
                    {
                        charSet2 = Encoding.GetEncoding(charset);
                    }
                    language2 = block.ReadString(CHATROOM_LANGUAGE2, Encoding.ASCII);

                    contentType = block.ReadString(CHATROOM_CONTENTTYPE, Encoding.ASCII);
                }
            }

            // Make sure there's a display name to show
            if (String.IsNullOrEmpty(displayName))
            {
                Match match = AolUriParser.Match(fullName);
                if (match.Success)
                {
                    //displayName = UtilityMethods.DeHexUri(match.Groups["roomname"].Value);
                    int lastDashBeforeName = fullName.IndexOf('-', 16);
                    displayName = fullName.Substring(lastDashBeforeName + 1);
                }
                else
                {
                    displayName = fullName;
                }
            }
        }