init()

in sdk/communication/AzureCommunicationChat/Source/Signaling/Events/ChatEvent.swift [494:526]


    init(from request: TrouterRequest) throws {
        guard let requestJsonData = request.body.data(using: .utf8) else {
            throw AzureError.client("Unable to convert request body to Data.")
        }

        let readReceiptReceivedPayload: ReadReceiptReceivedPayload = try JSONDecoder()
            .decode(ReadReceiptReceivedPayload.self, from: requestJsonData)

        guard let readReceiptMessageBodyJsonData = readReceiptReceivedPayload.messageBody.data(using: .utf8) else {
            throw AzureError.client("Unable to convert payload messageBody to Data.")
        }

        let readReceiptMessageBody: ReadReceiptMessageBody = try JSONDecoder()
            .decode(ReadReceiptMessageBody.self, from: readReceiptMessageBodyJsonData)

        // Extract readOn value from consumptionHorizon
        let consumptionHorizon = readReceiptMessageBody.consumptionhorizon.split(separator: ";")
        guard let readOnMs = Double(consumptionHorizon[1]) else {
            throw AzureError.client("Failed to construct Int from consumptionHorizon for readOn property.")
        }

        // In the payload readOn is represented as epoch time in milliseconds
        let readOnSeconds = readOnMs / 1000
        let readOnDate = Date(timeIntervalSince1970: TimeInterval(readOnSeconds))

        self.chatMessageId = readReceiptReceivedPayload.messageId
        self.readOn = Iso8601Date(readOnDate)
        super.init(
            threadId: readReceiptReceivedPayload.groupId,
            sender: createCommunicationIdentifier(fromRawId: readReceiptReceivedPayload.senderId),
            recipient: createCommunicationIdentifier(fromRawId: readReceiptReceivedPayload.recipientMri)
        )
    }