/// <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; } } }
/// <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); } }
/// <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); } }
/// <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; } } }