Files
2021-04-14 11:16:22 +07:00

63 lines
1.6 KiB
Swift

//
// Message.swift
// atlantis
//
// Created by Nghia Tran on 10/25/20.
// Copyright © 2020 Proxyman. All rights reserved.
//
import Foundation
struct Message: Codable {
enum MessageType: String, Codable {
case connection // First message, contains: Project, Device metadata
case traffic // Request/Response log
case websocket // for websocket send/receive/close
}
// MARK: - Variables
private let id: String
private let messageType: MessageType
private let content: Data?
private let buildVersion: String?
// MARK: - Init
private init(id: String, messageType: Message.MessageType, content: Data?) {
self.id = id
self.messageType = messageType
self.content = content
self.buildVersion = Atlantis.buildVersion
}
// MARK: - Helper Builder
static func buildConnectionMessage(id: String, item: Serializable) -> Message {
return Message(id: id, messageType: MessageType.connection, content: item.toData())
}
static func buildTrafficMessage(id: String, item: Serializable) -> Message {
return Message(id: id, messageType: MessageType.traffic, content: item.toData())
}
static func buildWebSocketMessage(id: String, item: Serializable) -> Message {
return Message(id: id, messageType: MessageType.websocket, content: item.toData())
}
}
// MARK: - Serializable
extension Message: Serializable {
func toData() -> Data? {
do {
return try JSONEncoder().encode(self)
} catch let error {
print(error)
}
return nil
}
}