Swiftgram/TelegramCore/SecretChatState.swift
2016-12-16 20:32:40 +03:00

131 lines
3.6 KiB
Swift

import Foundation
#if os(macOS)
import PostboxMac
#else
import Postbox
#endif
enum SecretChatRole {
case creator
case participant
}
struct SecretChatFingerprint: Equatable {
let k0: Int64
let k1: Int64
let k2: Int64
let k3: Int64
static func ==(lhs: SecretChatFingerprint, rhs: SecretChatFingerprint) -> Bool {
if lhs.k0 != rhs.k0 {
return false
}
if lhs.k1 != rhs.k1 {
return false
}
if lhs.k2 != rhs.k2 {
return false
}
if lhs.k3 != rhs.k3 {
return false
}
return true
}
}
struct SecretChatSequenceState: Equatable {
let seqIn: Int32
let seqOut: Int32
static func ==(lhs: SecretChatSequenceState, rhs: SecretChatSequenceState) -> Bool {
if lhs.seqIn == rhs.seqIn && lhs.seqOut == rhs.seqOut {
return true
} else {
return false
}
}
}
struct SecretChatLayerState: Equatable {
let effectiveLayer: Int32
let sentLayer: Int32?
let receivedLayer: Int32?
let sequenceState: SecretChatSequenceState?
static func ==(lhs: SecretChatLayerState, rhs: SecretChatLayerState) -> Bool {
if lhs.effectiveLayer != rhs.effectiveLayer {
return false
}
if lhs.sentLayer != rhs.sentLayer {
return false
}
if lhs.receivedLayer != rhs.receivedLayer {
return false
}
if lhs.sequenceState != rhs.sequenceState {
return false
}
return true
}
}
enum SecretChatEmbeddedState: Equatable {
case requested(accessHash: Int64, gA: MemoryBuffer)
case active(accessHash: Int64, role: SecretChatRole, baseKeyFingerprint: SecretChatFingerprint, layerState: SecretChatLayerState)
case closed
static func ==(lhs: SecretChatEmbeddedState, rhs: SecretChatEmbeddedState) -> Bool {
switch lhs {
case let .requested(lhsAccessHash, lhsGA):
if case let .requested(rhsAccessHash, rhsGA) = rhs, lhsAccessHash == rhsAccessHash, lhsGA == rhsGA {
return true
} else {
return false
}
case let .active(lhsAccessHash, lhsRole, lhsBaseKeyFingerprint, lhsLayerState):
if case let .active(rhsAccessHash, rhsRole, rhsBaseKeyFingerprint, rhsLayerState) = rhs, lhsAccessHash == rhsAccessHash, lhsRole == rhsRole, lhsBaseKeyFingerprint == rhsBaseKeyFingerprint, lhsLayerState == rhsLayerState {
return true
} else {
return false
}
case .closed:
if case .closed = rhs {
return true
} else {
return false
}
}
}
}
final class SecretChatState: PeerChatState, Equatable, CustomStringConvertible {
let embeddedState: SecretChatEmbeddedState
init(embeddedState: SecretChatEmbeddedState) {
self.embeddedState = embeddedState
}
init(decoder: Decoder) {
preconditionFailure()
}
func encode(_ encoder: Encoder) {
}
func equals(_ other: PeerChatState) -> Bool {
if let other = other as? SecretChatState, other == self {
return true
}
return false
}
var description: String {
return "(embeddedState: \(self.embeddedState))"
}
static func ==(lhs: SecretChatState, rhs: SecretChatState) -> Bool {
return lhs.embeddedState == rhs.embeddedState
}
}