78 lines
2.9 KiB
Swift
78 lines
2.9 KiB
Swift
//
|
|
// SDLSuperCodec.swift
|
|
// punchnet
|
|
//
|
|
// Created by 安礼成 on 2026/5/22.
|
|
//
|
|
import Foundation
|
|
import NIOCore
|
|
|
|
enum SDLSuperCodec {
|
|
public static func decode(frame: ByteBuffer) -> SDLSuperMessage? {
|
|
var buffer = frame
|
|
guard let type = buffer.readInteger(as: UInt8.self),
|
|
let packetType = SDLPacketType(rawValue: type) else {
|
|
return nil
|
|
}
|
|
|
|
switch packetType {
|
|
case .welcome:
|
|
guard let bytes = buffer.readBytes(length: buffer.readableBytes),
|
|
let welcome = try? SDLWelcome(serializedBytes: bytes) else {
|
|
return nil
|
|
}
|
|
return .welcome(welcome)
|
|
|
|
case .registerSuperAck:
|
|
guard let bytes = buffer.readBytes(length: buffer.readableBytes),
|
|
let registerSuperAck = try? SDLRegisterSuperAck(serializedBytes: bytes) else {
|
|
return nil
|
|
}
|
|
return .registerSuperAck(registerSuperAck)
|
|
case .registerSuperNak:
|
|
guard let bytes = buffer.readBytes(length: buffer.readableBytes),
|
|
let registerSuperNak = try? SDLRegisterSuperNak(serializedBytes: bytes) else {
|
|
return nil
|
|
}
|
|
return .registerSuperNak(registerSuperNak)
|
|
case .peerInfo:
|
|
guard let bytes = buffer.readBytes(length: buffer.readableBytes),
|
|
let peerInfo = try? SDLPeerInfo(serializedBytes: bytes) else {
|
|
return nil
|
|
}
|
|
return .peerInfo(peerInfo)
|
|
case .policyResponse:
|
|
guard let bytes = buffer.readBytes(length: buffer.readableBytes),
|
|
let policyResponse = try? SDLPolicyResponse(serializedBytes: bytes) else {
|
|
return nil
|
|
}
|
|
return .policyReponse(policyResponse)
|
|
case .exposedServiceResponse:
|
|
guard let bytes = buffer.readBytes(length: buffer.readableBytes),
|
|
let response = try? SDLExposedServiceResponse(serializedBytes: bytes) else {
|
|
return nil
|
|
}
|
|
return .exposedServiceResponse(response)
|
|
case .arpResponse:
|
|
guard let bytes = buffer.readBytes(length: buffer.readableBytes),
|
|
let arpResponse = try? SDLArpResponse(serializedBytes: bytes) else {
|
|
return nil
|
|
}
|
|
return .arpResponse(arpResponse)
|
|
case .event:
|
|
guard let bytes = buffer.readBytes(length: buffer.readableBytes),
|
|
let event = try? SDLEvent(serializedBytes: bytes) else {
|
|
SDLLogger.log("SDLSuperClient decode Event Error", category: .super)
|
|
return nil
|
|
}
|
|
return .event(event)
|
|
case .pong:
|
|
return .pong
|
|
default:
|
|
SDLLogger.log("SDLSuperClient decode miss type: \(type)", category: .super)
|
|
|
|
return nil
|
|
}
|
|
}
|
|
}
|