You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
hexmap/server/ws/client.go

74 lines
2.1 KiB

package ws
import (
"git.reya.zone/reya/hexmap/server/action"
"go.uber.org/zap/zapcore"
)
// ClientCommandType is an enum type for the client's protocol messages.
type ClientCommandType string
// ClientCommand s are those sent by the client.
type ClientCommand interface {
zapcore.ObjectMarshaler
// ToClientPB converts the command to a client protocol buffer which will be sent on the wire.
ToClientPB() *ClientCommandPB
}
// ClientHello is the command sent by the client when it first establishes the connection.
type ClientHello struct {
// Version is the protocol version the client is running.
Version uint32 `json:"version"`
}
func (c ClientHello) MarshalLogObject(encoder zapcore.ObjectEncoder) error {
encoder.AddString("type", "Hello")
encoder.AddUint32("version", c.Version)
return nil
}
// ClientRefresh is the command sent by the client when it needs the full state re-sent.
type ClientRefresh struct {
}
func (c ClientRefresh) MarshalLogObject(encoder zapcore.ObjectEncoder) error {
encoder.AddString("type", "Refresh")
return nil
}
type IDPairs []action.IDed
func (a IDPairs) MarshalLogArray(encoder zapcore.ArrayEncoder) error {
var finalErr error = nil
for _, v := range a {
err := encoder.AppendObject(v)
if err != nil && finalErr == nil {
finalErr = err
}
}
return finalErr
}
// ClientAct is a command sent in order to deliver one or more Action actions to the server.
type ClientAct struct {
// Actions contains the actions the client wants to apply, in the order they should be applied.
Actions IDPairs `json:"actions"`
}
func (c ClientAct) MarshalLogObject(encoder zapcore.ObjectEncoder) error {
encoder.AddString("type", "Act")
return encoder.AddArray("actions", c.Actions)
}
// ClientMalformed is synthesized by the reader when it has read a command that does not appear to match the
// protocol.
type ClientMalformed struct {
// Error is the error in parse that caused the reader to be unable to read the message.
Error error
}
func (c ClientMalformed) MarshalLogObject(encoder zapcore.ObjectEncoder) error {
encoder.AddString("type", "(malformed command)")
encoder.AddString("error", c.Error.Error())
return nil
}