2026-02-20 19:41:30 +00:00
|
|
|
// Copyright (c) 2017-2026 Lethean (https://lt.hn)
|
|
|
|
|
//
|
|
|
|
|
// Licensed under the European Union Public Licence (EUPL) version 1.2.
|
|
|
|
|
// SPDX-License-Identifier: EUPL-1.2
|
|
|
|
|
|
|
|
|
|
package p2p
|
|
|
|
|
|
2026-03-22 01:49:26 +00:00
|
|
|
import "dappco.re/go/core/p2p/node/levin"
|
2026-02-20 19:41:30 +00:00
|
|
|
|
|
|
|
|
// TimedSyncRequest is a COMMAND_TIMED_SYNC request.
|
|
|
|
|
type TimedSyncRequest struct {
|
|
|
|
|
PayloadData CoreSyncData
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Encode serialises the timed sync request.
|
|
|
|
|
func (r *TimedSyncRequest) Encode() ([]byte, error) {
|
|
|
|
|
s := levin.Section{
|
|
|
|
|
"payload_data": levin.ObjectVal(r.PayloadData.MarshalSection()),
|
|
|
|
|
}
|
|
|
|
|
return levin.EncodeStorage(s)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// TimedSyncResponse is a COMMAND_TIMED_SYNC response.
|
|
|
|
|
type TimedSyncResponse struct {
|
|
|
|
|
LocalTime int64
|
|
|
|
|
PayloadData CoreSyncData
|
|
|
|
|
PeerlistBlob []byte
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Decode parses a timed sync response from a storage blob.
|
|
|
|
|
func (r *TimedSyncResponse) Decode(data []byte) error {
|
|
|
|
|
s, err := levin.DecodeStorage(data)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
if v, ok := s["local_time"]; ok {
|
|
|
|
|
r.LocalTime, _ = v.AsInt64()
|
|
|
|
|
}
|
|
|
|
|
if v, ok := s["payload_data"]; ok {
|
|
|
|
|
obj, _ := v.AsSection()
|
|
|
|
|
r.PayloadData.UnmarshalSection(obj)
|
|
|
|
|
}
|
|
|
|
|
if v, ok := s["local_peerlist"]; ok {
|
|
|
|
|
r.PeerlistBlob, _ = v.AsString()
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
}
|