1
0
Fork 0
mirror of https://github.com/diamondburned/cchat-mock.git synced 2025-05-06 13:44:22 +00:00

fixed segfault completion bug

This commit is contained in:
diamondburned 2020-11-14 19:36:44 -08:00
parent 4f6dfbfc24
commit df8d1b10f9
4 changed files with 26 additions and 15 deletions

2
go.mod
View file

@ -4,7 +4,7 @@ go 1.14
require (
github.com/Pallinder/go-randomdata v1.2.0
github.com/diamondburned/aqs v0.0.0-20200704043812-99b676ee44eb
github.com/diamondburned/aqs v0.0.0-20201115033607-76f603ff676a
github.com/diamondburned/cchat v0.3.11
github.com/lucasb-eyer/go-colorful v1.0.3
github.com/pkg/errors v0.9.1

2
go.sum
View file

@ -3,6 +3,8 @@ github.com/Pallinder/go-randomdata v1.2.0/go.mod h1:yHmJgulpD2Nfrm0cR9tI/+oAgRqC
github.com/dave/jennifer v1.4.1/go.mod h1:7jEdnm+qBcxl8PC0zyp7vxcpSRnzXSt9r39tpTVGlwA=
github.com/diamondburned/aqs v0.0.0-20200704043812-99b676ee44eb h1:Ja/niwykeFoSkYxdRRzM8QUAuCswfLmaiBTd2UIU+54=
github.com/diamondburned/aqs v0.0.0-20200704043812-99b676ee44eb/go.mod h1:q1MbMBfZrv7xqV8n7LgMwhHs3oBbNwWJes8exs2AmDs=
github.com/diamondburned/aqs v0.0.0-20201115033607-76f603ff676a h1:XqKaACqS5vdKzbt0jaTcKfRgpjyjZ7xAXniAALUjElw=
github.com/diamondburned/aqs v0.0.0-20201115033607-76f603ff676a/go.mod h1:q1MbMBfZrv7xqV8n7LgMwhHs3oBbNwWJes8exs2AmDs=
github.com/diamondburned/cchat v0.2.11 h1:w4c/6t02htGtVj6yIjznecOGMlkcj0TmmLy+K48gHeM=
github.com/diamondburned/cchat v0.2.11/go.mod h1:IlMtF+XIvAJh0GL/2yFdf0/34w+Hdy5A1GgvSwAXtQI=
github.com/diamondburned/cchat v0.2.12 h1:R4wrBdhELMfhv2Kn3xL/H3ci8UcLXzFRPq1IrY4+js4=

View file

@ -17,7 +17,7 @@ type Channel struct {
name string
user Username
messenger Messenger
messenger *Messenger
}
var _ cchat.Server = (*Channel)(nil)
@ -40,7 +40,7 @@ func AsCChatServers(channels []*Channel) []cchat.Server {
// NewChannel creates a new random channel.
func NewChannel(state *shared.State) *Channel {
return &Channel{
ch := &Channel{
id: state.NextID(),
name: "#" + randomdata.Noun(),
user: Username{
@ -51,6 +51,10 @@ func NewChannel(state *shared.State) *Channel {
},
},
}
ch.messenger = NewMessenger(ch)
return ch
}
func (ch *Channel) ID() string {
@ -66,6 +70,5 @@ func (ch *Channel) AsNicknamer() cchat.Nicknamer {
}
func (ch *Channel) AsMessenger() cchat.Messenger {
ch.messenger.channel = ch
return &ch.messenger
return ch.messenger
}

View file

@ -44,6 +44,22 @@ type Messenger struct {
var _ cchat.Messenger = (*Messenger)(nil)
func NewMessenger(ch *Channel) *Messenger {
msgr := Messenger{}
msgr.channel = ch
// Initialize.
msgr.messages = make(map[uint32]message.Message, FetchBacklog)
msgr.messageids = make([]uint32, 0, FetchBacklog)
// Allocate 3 channels that we won't clean up, because we're lazy.
msgr.send = NewMessageSender(&msgr)
msgr.edit = make(chan message.Message)
msgr.del = make(chan message.Header)
msgr.typ = typing.NewSubscriber(message.NewAuthor(msgr.channel.user.Rich()))
return &msgr
}
func (msgr *Messenger) JoinServer(ctx context.Context, ct cchat.MessagesContainer) (func(), error) {
// Is this a fresh channel? If yes, generate messages with some IO latency.
if len(msgr.messageids) == 0 || msgr.messages == nil {
@ -52,16 +68,6 @@ func (msgr *Messenger) JoinServer(ctx context.Context, ct cchat.MessagesContaine
return nil, err
}
// Initialize.
msgr.messages = make(map[uint32]message.Message, FetchBacklog)
msgr.messageids = make([]uint32, 0, FetchBacklog)
// Allocate 3 channels that we won't clean up, because we're lazy.
msgr.send = NewMessageSender(msgr)
msgr.edit = make(chan message.Message)
msgr.del = make(chan message.Header)
msgr.typ = typing.NewSubscriber(message.NewAuthor(msgr.channel.user.Rich()))
// Generate the backlog.
for i := 0; i < FetchBacklog; i++ {
msgr.addMessage(msgr.randomMsg(), ct)