examples/chat: Make chat example compile
This commit is contained in:
@@ -20,6 +20,15 @@ type Message interface {
|
||||
Method() uint16
|
||||
}
|
||||
|
||||
// Send encodes a message and sends it along a transaction.
|
||||
func Send(trans hopp.Trans, message Message) (n int, err error) {
|
||||
writer, err := trans.SendWriter(message.Method())
|
||||
if err != nil { return n, err }
|
||||
defer writer.Close()
|
||||
encoder := tape.NewEncoder(writer)
|
||||
return message.Encode(encoder)
|
||||
}
|
||||
|
||||
// canAssign determines if data from the given source tag can be assigned to
|
||||
// a Go type represented by destination. It is designed to receive destination
|
||||
// values from [generate.Generator.generateCanAssign]. The eventual Go type and
|
||||
@@ -225,7 +234,7 @@ func(this *MessageJoin) Decode(decoder *tape.Decoder) (n int, err error) {
|
||||
// must be sent within a room transaction.
|
||||
type MessageChat struct {
|
||||
Content string
|
||||
Nickname hopp.Option[string]
|
||||
Nickname string
|
||||
}
|
||||
|
||||
// Method returns the message's method number.
|
||||
@@ -242,36 +251,34 @@ func(this *MessageChat) Encode(encoder *tape.Encoder) (n int, err error) {
|
||||
nn, err = encoder.WriteUintN(2, tag_8.CN() + 1)
|
||||
n += nn; if err != nil { return n, err }
|
||||
{
|
||||
nn, err = encoder.WriteUint16(0x0001)
|
||||
n += nn; if err != nil { return n, err }
|
||||
tag_9 := tape.StringTag(string((*this).Nickname))
|
||||
nn, err = encoder.WriteUint8(uint8(tag_9))
|
||||
n += nn; if err != nil { return n, err }
|
||||
if len((*this).Nickname) > tape.MaxStructureLength {
|
||||
return n, tape.ErrTooLong
|
||||
}
|
||||
if tag_9.Is(tape.LBA) {
|
||||
nn, err = encoder.WriteUintN(uint64(len((*this).Nickname)), tag_9.CN())
|
||||
n += nn; if err != nil { return n, err }
|
||||
}
|
||||
nn, err = encoder.Write([]byte((*this).Nickname))
|
||||
n += nn; if err != nil { return n, err }
|
||||
nn, err = encoder.WriteUint16(0x0000)
|
||||
n += nn; if err != nil { return n, err }
|
||||
tag_9 := tape.StringTag(string((*this).Content))
|
||||
nn, err = encoder.WriteUint8(uint8(tag_9))
|
||||
tag_10 := tape.StringTag(string((*this).Content))
|
||||
nn, err = encoder.WriteUint8(uint8(tag_10))
|
||||
n += nn; if err != nil { return n, err }
|
||||
if len((*this).Content) > tape.MaxStructureLength {
|
||||
return n, tape.ErrTooLong
|
||||
}
|
||||
if tag_9.Is(tape.LBA) {
|
||||
nn, err = encoder.WriteUintN(uint64(len((*this).Content)), tag_9.CN())
|
||||
if tag_10.Is(tape.LBA) {
|
||||
nn, err = encoder.WriteUintN(uint64(len((*this).Content)), tag_10.CN())
|
||||
n += nn; if err != nil { return n, err }
|
||||
}
|
||||
nn, err = encoder.Write([]byte((*this).Content))
|
||||
n += nn; if err != nil { return n, err }
|
||||
if value, ok := (*this).Nickname.Value(); ok {
|
||||
nn, err = encoder.WriteUint16(0x0001)
|
||||
n += nn; if err != nil { return n, err }
|
||||
tag_10 := tape.StringTag(string(value))
|
||||
nn, err = encoder.WriteUint8(uint8(tag_10))
|
||||
n += nn; if err != nil { return n, err }
|
||||
if len(value) > tape.MaxStructureLength {
|
||||
return n, tape.ErrTooLong
|
||||
}
|
||||
if tag_10.Is(tape.LBA) {
|
||||
nn, err = encoder.WriteUintN(uint64(len(value)), tag_10.CN())
|
||||
n += nn; if err != nil { return n, err }
|
||||
}
|
||||
nn, err = encoder.Write([]byte(value))
|
||||
n += nn; if err != nil { return n, err }
|
||||
}
|
||||
}
|
||||
return n, nil
|
||||
}
|
||||
@@ -573,22 +580,20 @@ func decodeBranch_5c1cf9347bb6d9f41cee64b186392d24_MessageChat(this *MessageChat
|
||||
tape.Skim(decoder, fieldTag_31)
|
||||
continue
|
||||
}
|
||||
var destination_33 string
|
||||
var length_34 uint64
|
||||
var length_33 uint64
|
||||
if fieldTag_31.Is(tape.LBA) {
|
||||
length_34, nn, err = decoder.ReadUintN(int(fieldTag_31.CN()))
|
||||
length_33, nn, err = decoder.ReadUintN(int(fieldTag_31.CN()))
|
||||
n += nn; if err != nil { return n, err }
|
||||
} else {
|
||||
length_34 = uint64(fieldTag_31.CN())
|
||||
length_33 = uint64(fieldTag_31.CN())
|
||||
}
|
||||
if length_34 > uint64(tape.MaxStructureLength) {
|
||||
if length_33 > uint64(tape.MaxStructureLength) {
|
||||
return n, tape.ErrTooLong
|
||||
}
|
||||
buffer := make([]byte, length_34)
|
||||
buffer := make([]byte, length_33)
|
||||
nn, err = decoder.Read(buffer)
|
||||
n += nn; if err != nil { return n, err }
|
||||
*(&destination_33) = string(buffer)
|
||||
this.Nickname = hopp.O(destination_33)
|
||||
*(&(this.Nickname)) = string(buffer)
|
||||
default:
|
||||
tape.Skim(decoder, fieldTag_31)
|
||||
continue
|
||||
@@ -599,41 +604,41 @@ func decodeBranch_5c1cf9347bb6d9f41cee64b186392d24_MessageChat(this *MessageChat
|
||||
|
||||
func decodeBranch_68c536511e6d598462efc482144438e9_MessageJoinNotify(this *MessageJoinNotify, decoder *tape.Decoder, tag tape.Tag) (n int, err error) {
|
||||
var nn int
|
||||
var length_35 uint64
|
||||
if length_35 > uint64(tape.MaxStructureLength) {
|
||||
var length_34 uint64
|
||||
if length_34 > uint64(tape.MaxStructureLength) {
|
||||
return n, tape.ErrTooLong
|
||||
}
|
||||
length_35, nn, err = decoder.ReadUintN(int(tag.CN()) + 1)
|
||||
length_34, nn, err = decoder.ReadUintN(int(tag.CN()) + 1)
|
||||
n += nn; if err != nil { return n, err }
|
||||
for _ = range length_35 {
|
||||
var fieldKey_36 uint16
|
||||
fieldKey_36, nn, err = decoder.ReadUint16()
|
||||
for _ = range length_34 {
|
||||
var fieldKey_35 uint16
|
||||
fieldKey_35, nn, err = decoder.ReadUint16()
|
||||
n += nn; if err != nil { return n, err }
|
||||
var fieldTag_37 tape.Tag
|
||||
fieldTag_37, nn, err = decoder.ReadTag()
|
||||
var fieldTag_36 tape.Tag
|
||||
fieldTag_36, nn, err = decoder.ReadTag()
|
||||
n += nn; if err != nil { return n, err }
|
||||
switch fieldKey_36 {
|
||||
switch fieldKey_35 {
|
||||
case 0x0000:
|
||||
if !(canAssign(tape.LBA, fieldTag_37)) {
|
||||
tape.Skim(decoder, fieldTag_37)
|
||||
if !(canAssign(tape.LBA, fieldTag_36)) {
|
||||
tape.Skim(decoder, fieldTag_36)
|
||||
continue
|
||||
}
|
||||
var length_38 uint64
|
||||
if fieldTag_37.Is(tape.LBA) {
|
||||
length_38, nn, err = decoder.ReadUintN(int(fieldTag_37.CN()))
|
||||
var length_37 uint64
|
||||
if fieldTag_36.Is(tape.LBA) {
|
||||
length_37, nn, err = decoder.ReadUintN(int(fieldTag_36.CN()))
|
||||
n += nn; if err != nil { return n, err }
|
||||
} else {
|
||||
length_38 = uint64(fieldTag_37.CN())
|
||||
length_37 = uint64(fieldTag_36.CN())
|
||||
}
|
||||
if length_38 > uint64(tape.MaxStructureLength) {
|
||||
if length_37 > uint64(tape.MaxStructureLength) {
|
||||
return n, tape.ErrTooLong
|
||||
}
|
||||
buffer := make([]byte, length_38)
|
||||
buffer := make([]byte, length_37)
|
||||
nn, err = decoder.Read(buffer)
|
||||
n += nn; if err != nil { return n, err }
|
||||
*(&(this.Nickname)) = string(buffer)
|
||||
default:
|
||||
tape.Skim(decoder, fieldTag_37)
|
||||
tape.Skim(decoder, fieldTag_36)
|
||||
continue
|
||||
}
|
||||
}
|
||||
@@ -642,43 +647,84 @@ func decodeBranch_68c536511e6d598462efc482144438e9_MessageJoinNotify(this *Messa
|
||||
|
||||
func decodeBranch_68c536511e6d598462efc482144438e9_MessageLeaveNotify(this *MessageLeaveNotify, decoder *tape.Decoder, tag tape.Tag) (n int, err error) {
|
||||
var nn int
|
||||
var length_39 uint64
|
||||
if length_39 > uint64(tape.MaxStructureLength) {
|
||||
var length_38 uint64
|
||||
if length_38 > uint64(tape.MaxStructureLength) {
|
||||
return n, tape.ErrTooLong
|
||||
}
|
||||
length_39, nn, err = decoder.ReadUintN(int(tag.CN()) + 1)
|
||||
length_38, nn, err = decoder.ReadUintN(int(tag.CN()) + 1)
|
||||
n += nn; if err != nil { return n, err }
|
||||
for _ = range length_39 {
|
||||
var fieldKey_40 uint16
|
||||
fieldKey_40, nn, err = decoder.ReadUint16()
|
||||
for _ = range length_38 {
|
||||
var fieldKey_39 uint16
|
||||
fieldKey_39, nn, err = decoder.ReadUint16()
|
||||
n += nn; if err != nil { return n, err }
|
||||
var fieldTag_41 tape.Tag
|
||||
fieldTag_41, nn, err = decoder.ReadTag()
|
||||
var fieldTag_40 tape.Tag
|
||||
fieldTag_40, nn, err = decoder.ReadTag()
|
||||
n += nn; if err != nil { return n, err }
|
||||
switch fieldKey_40 {
|
||||
switch fieldKey_39 {
|
||||
case 0x0000:
|
||||
if !(canAssign(tape.LBA, fieldTag_41)) {
|
||||
tape.Skim(decoder, fieldTag_41)
|
||||
if !(canAssign(tape.LBA, fieldTag_40)) {
|
||||
tape.Skim(decoder, fieldTag_40)
|
||||
continue
|
||||
}
|
||||
var length_42 uint64
|
||||
if fieldTag_41.Is(tape.LBA) {
|
||||
length_42, nn, err = decoder.ReadUintN(int(fieldTag_41.CN()))
|
||||
var length_41 uint64
|
||||
if fieldTag_40.Is(tape.LBA) {
|
||||
length_41, nn, err = decoder.ReadUintN(int(fieldTag_40.CN()))
|
||||
n += nn; if err != nil { return n, err }
|
||||
} else {
|
||||
length_42 = uint64(fieldTag_41.CN())
|
||||
length_41 = uint64(fieldTag_40.CN())
|
||||
}
|
||||
if length_42 > uint64(tape.MaxStructureLength) {
|
||||
if length_41 > uint64(tape.MaxStructureLength) {
|
||||
return n, tape.ErrTooLong
|
||||
}
|
||||
buffer := make([]byte, length_42)
|
||||
buffer := make([]byte, length_41)
|
||||
nn, err = decoder.Read(buffer)
|
||||
n += nn; if err != nil { return n, err }
|
||||
*(&(this.Nickname)) = string(buffer)
|
||||
default:
|
||||
tape.Skim(decoder, fieldTag_41)
|
||||
tape.Skim(decoder, fieldTag_40)
|
||||
continue
|
||||
}
|
||||
}
|
||||
return n, nil
|
||||
}
|
||||
|
||||
// Receive decodes a message from a transaction and returns it as a value.
|
||||
// Use a type switch to determine what type of message it is.
|
||||
func Receive(trans hopp.Trans) (message any, n int, err error) {
|
||||
method, reader, err := trans.ReceiveReader()
|
||||
decoder := tape.NewDecoder(reader)
|
||||
if err != nil { return nil, n, err }
|
||||
switch method {
|
||||
case 0001:
|
||||
var message MessageSuccess
|
||||
nn, err := message.Decode(decoder)
|
||||
n += nn; if err != nil { return nil, n, err }
|
||||
return message, n, nil
|
||||
case 0200:
|
||||
var message MessageJoin
|
||||
nn, err := message.Decode(decoder)
|
||||
n += nn; if err != nil { return nil, n, err }
|
||||
return message, n, nil
|
||||
case 0300:
|
||||
var message MessageChat
|
||||
nn, err := message.Decode(decoder)
|
||||
n += nn; if err != nil { return nil, n, err }
|
||||
return message, n, nil
|
||||
case 0400:
|
||||
var message MessageJoinNotify
|
||||
nn, err := message.Decode(decoder)
|
||||
n += nn; if err != nil { return nil, n, err }
|
||||
return message, n, nil
|
||||
case 0401:
|
||||
var message MessageLeaveNotify
|
||||
nn, err := message.Decode(decoder)
|
||||
n += nn; if err != nil { return nil, n, err }
|
||||
return message, n, nil
|
||||
case 0000:
|
||||
var message MessageError
|
||||
nn, err := message.Decode(decoder)
|
||||
n += nn; if err != nil { return nil, n, err }
|
||||
return message, n, nil
|
||||
}
|
||||
return nil, n, hopp.ErrUnknownMethod
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user