mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			66 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Swift
		
	
import Foundation
 | 
						|
 | 
						|
public final class Snode : NSObject, NSCoding { // NSObject/NSCoding conformance is needed for YapDatabase compatibility
 | 
						|
    public let address: String
 | 
						|
    public let port: UInt16
 | 
						|
    public let publicKeySet: KeySet
 | 
						|
 | 
						|
    public var ip: String {
 | 
						|
        address.removingPrefix("https://")
 | 
						|
    }
 | 
						|
 | 
						|
    // MARK: Nested Types
 | 
						|
    public enum Method : String {
 | 
						|
        case getSwarm = "get_snodes_for_pubkey"
 | 
						|
        case getMessages = "retrieve"
 | 
						|
        case sendMessage = "store"
 | 
						|
        case deleteMessage = "delete"
 | 
						|
        case oxenDaemonRPCCall = "oxend_request"
 | 
						|
        case getInfo = "info"
 | 
						|
        case clearAllData = "delete_all"
 | 
						|
    }
 | 
						|
 | 
						|
    public struct KeySet {
 | 
						|
        public let ed25519Key: String
 | 
						|
        public let x25519Key: String
 | 
						|
    }
 | 
						|
 | 
						|
    // MARK: Initialization
 | 
						|
    internal init(address: String, port: UInt16, publicKeySet: KeySet) {
 | 
						|
        self.address = address
 | 
						|
        self.port = port
 | 
						|
        self.publicKeySet = publicKeySet
 | 
						|
    }
 | 
						|
 | 
						|
    // MARK: Coding
 | 
						|
    public init?(coder: NSCoder) {
 | 
						|
        address = coder.decodeObject(forKey: "address") as! String
 | 
						|
        port = coder.decodeObject(forKey: "port") as! UInt16
 | 
						|
        guard let idKey = coder.decodeObject(forKey: "idKey") as? String,
 | 
						|
            let encryptionKey = coder.decodeObject(forKey: "encryptionKey") as? String else { return nil }
 | 
						|
        publicKeySet = KeySet(ed25519Key: idKey, x25519Key: encryptionKey)
 | 
						|
        super.init()
 | 
						|
    }
 | 
						|
 | 
						|
    public func encode(with coder: NSCoder) {
 | 
						|
        coder.encode(address, forKey: "address")
 | 
						|
        coder.encode(port, forKey: "port")
 | 
						|
        coder.encode(publicKeySet.ed25519Key, forKey: "idKey")
 | 
						|
        coder.encode(publicKeySet.x25519Key, forKey: "encryptionKey")
 | 
						|
    }
 | 
						|
 | 
						|
    // MARK: Equality
 | 
						|
    override public func isEqual(_ other: Any?) -> Bool {
 | 
						|
        guard let other = other as? Snode else { return false }
 | 
						|
        return address == other.address && port == other.port
 | 
						|
    }
 | 
						|
 | 
						|
    // MARK: Hashing
 | 
						|
    override public var hash: Int { // Override NSObject.hash and not Hashable.hashValue or Hashable.hash(into:)
 | 
						|
        return address.hashValue ^ port.hashValue
 | 
						|
    }
 | 
						|
 | 
						|
    // MARK: Description
 | 
						|
    override public var description: String { return "\(address):\(port)" }
 | 
						|
}
 |