|  |  |  | 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 | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |