session-ios/SessionSnodeKit/SnodeMessage.swift

61 lines
2.1 KiB
Swift

import PromiseKit
import SessionUtilitiesKit
public final class SnodeMessage : NSObject, NSCoding { // NSObject/NSCoding conformance is needed for YapDatabase compatibility
/// The hex encoded public key of the recipient.
public let recipient: String
/// The content of the message.
public let data: LosslessStringConvertible
/// The time to live for the message in milliseconds.
public let ttl: UInt64
/// When the proof of work was calculated.
///
/// - Note: Expressed as milliseconds since 00:00:00 UTC on 1 January 1970.
public let timestamp: UInt64
/// The base 64 encoded proof of work.
public let nonce: String
// MARK: Initialization
public init(recipient: String, data: LosslessStringConvertible, ttl: UInt64, timestamp: UInt64, nonce: String) {
self.recipient = recipient
self.data = data
self.ttl = ttl
self.timestamp = timestamp
self.nonce = nonce
}
// MARK: Coding
public init?(coder: NSCoder) {
guard let recipient = coder.decodeObject(forKey: "recipient") as! String?,
let data = coder.decodeObject(forKey: "data") as! String?,
let ttl = coder.decodeObject(forKey: "ttl") as! UInt64?,
let timestamp = coder.decodeObject(forKey: "timestamp") as! UInt64?,
let nonce = coder.decodeObject(forKey: "nonce") as! String? else { return nil }
self.recipient = recipient
self.data = data
self.ttl = ttl
self.timestamp = timestamp
self.nonce = nonce
super.init()
}
public func encode(with coder: NSCoder) {
coder.encode(recipient, forKey: "recipient")
coder.encode(data, forKey: "data")
coder.encode(ttl, forKey: "ttl")
coder.encode(timestamp, forKey: "timestamp")
coder.encode(nonce, forKey: "nonce")
}
// MARK: JSON Conversion
public func toJSON() -> JSON {
return [
"pubKey" : recipient,
"data" : data.description,
"ttl" : String(ttl),
"timestamp" : String(timestamp),
"nonce" : nonce
]
}
}