OpenDiablo2/d2networking/d2netpacket/packet_ping.go

43 lines
1022 B
Go

package d2netpacket //nolint:dupl // ServerClosed and Ping just happen to be very similar packets
import (
"encoding/json"
"time"
"github.com/OpenDiablo2/OpenDiablo2/d2networking/d2netpacket/d2netpackettype"
)
// PingPacket contains the time at which it was sent. It is sent by the
// server and instructs the client to respond with a Pong packet.
type PingPacket struct {
TS time.Time `json:"ts"`
}
// CreatePingPacket returns a NetPacket which declares a GenerateMapPacket
// with the the current time.
func CreatePingPacket() (NetPacket, error) {
ping := PingPacket{
TS: time.Now(),
}
b, err := json.Marshal(ping)
if err != nil {
return NetPacket{PacketType: d2netpackettype.Ping}, err
}
return NetPacket{
PacketType: d2netpackettype.Ping,
PacketData: b,
}, nil
}
// UnmarshalPing unmarshals the given data to a PingPacket struct
func UnmarshalPing(packet []byte) (PingPacket, error) {
var p PingPacket
if err := json.Unmarshal(packet, &p); err != nil {
return p, err
}
return p, nil
}