From 18dd7cc4b77307ae935b1f738d653c052b6dacc7 Mon Sep 17 00:00:00 2001 From: Sarah Jamie Lewis Date: Mon, 4 Mar 2019 14:02:11 -0800 Subject: [PATCH] Fix server init bug --- go/characters/incominglistener.go | 3 ++ go/characters/postmanpat.go | 36 ---------------------- go/gothings/gcd.go | 50 +++++++++++++++++++++---------- main.go | 5 ++-- qml/widgets/Message.qml | 1 + 5 files changed, 41 insertions(+), 54 deletions(-) delete mode 100644 go/characters/postmanpat.go diff --git a/go/characters/incominglistener.go b/go/characters/incominglistener.go index a2c0aa5b..31b61e9a 100644 --- a/go/characters/incominglistener.go +++ b/go/characters/incominglistener.go @@ -17,6 +17,7 @@ func IncomingListener(callback func(*gobjects.Message), groupErrorCallback func( the.CwtchApp.EventBus().Subscribe(event.NewMessageFromGroup, q.EventChannel) the.CwtchApp.EventBus().Subscribe(event.NewGroupInvite, q.EventChannel) the.CwtchApp.EventBus().Subscribe(event.SendMessageToGroupError, q.EventChannel) + the.CwtchApp.EventBus().Subscribe(event.SendMessageToPeerError, q.EventChannel) for { e := q.Next() @@ -68,6 +69,8 @@ func IncomingListener(callback func(*gobjects.Message), groupErrorCallback func( log.Debugf("got a group invite!") case event.SendMessageToGroupError: groupErrorCallback(e.Data[event.Signature], e.Data[event.Error]) + case event.SendMessageToPeerError: + groupErrorCallback(e.Data[event.Signature], e.Data[event.Error]) } } } \ No newline at end of file diff --git a/go/characters/postmanpat.go b/go/characters/postmanpat.go deleted file mode 100644 index 4a90eb6f..00000000 --- a/go/characters/postmanpat.go +++ /dev/null @@ -1,36 +0,0 @@ -package characters - -import ( - "cwtch.im/ui/go/gobjects" - "cwtch.im/ui/go/the" - "git.openprivacy.ca/openprivacy/libricochet-go/log" -) - -func PostmanPat(messages chan gobjects.Letter) { - postOffice := make(map[string]chan gobjects.Letter) - - for { - m := <-messages - - _, found := postOffice[m.To] - if !found { - postOffice[m.To] = make(chan gobjects.Letter, 100) - go andHisBlackAndWhiteCat(postOffice[m.To]) - } - - postOffice[m.To] <- m - } -} - -func andHisBlackAndWhiteCat(incomingMessages chan gobjects.Letter) { - for { - m := <-incomingMessages - the.Peer.PeerWithOnion(m.To) - log.Debugf("sending message!") - ackID := new(the.AckId) - ackID.ID = m.MID - ackID.Ack = false - the.AcknowledgementIDs[m.To] = append(the.AcknowledgementIDs[m.To], ackID) - the.Peer.SendMessageToPeer(m.To, m.Message) - } -} diff --git a/go/gothings/gcd.go b/go/gothings/gcd.go index a3548ed7..fdc687d6 100644 --- a/go/gothings/gcd.go +++ b/go/gothings/gcd.go @@ -88,6 +88,19 @@ func (this *GrandCentralDispatcher) sendMessage(message string, mID string) { var err error mID,err = the.Peer.SendMessageToGroupTracked(this.CurrentOpenConversation(), message) + + this.UIState.AddMessage(&gobjects.Message{ + this.CurrentOpenConversation(), + "me", + "", + message, + "", + true, + mID, + time.Now(), + false, + }) + if err != nil { this.InvokePopup("failed to send message " +err.Error()) return @@ -100,24 +113,29 @@ func (this *GrandCentralDispatcher) sendMessage(message string, mID string) { this.UIState.UpdateContact(this.CurrentOpenConversation()) } - select { // 1 weird trick to do a non-blocking send. this means the user can only send a limited number of messages - // before the channel buffer fills. TODO: stop the user from sending if the buffer is full - case this.OutgoingMessages <- gobjects.Letter{this.CurrentOpenConversation(), message, mID}: - default: - } + to := this.CurrentOpenConversation(); + the.Peer.PeerWithOnion(to) + mID = the.Peer.SendMessageToPeer(to, message) + + this.UIState.AddMessage(&gobjects.Message{ + this.CurrentOpenConversation(), + "me", + "", + message, + "", + true, + mID, + time.Now(), + false, + }) + + ackID := new(the.AckId) + ackID.ID = mID + ackID.Ack = false + the.AcknowledgementIDs[to] = append(the.AcknowledgementIDs[to], ackID) } - this.UIState.AddMessage(&gobjects.Message{ - this.CurrentOpenConversation(), - "me", - "", - message, - "", - true, - mID, - time.Now(), - false, - }) + } func (this *GrandCentralDispatcher) loadMessagesPane(handle string) { diff --git a/main.go b/main.go index 19fc163a..0b4ef326 100644 --- a/main.go +++ b/main.go @@ -112,7 +112,6 @@ func main() { // these are long-lived pollers/listeners for incoming messages and status changes loadCwtchData(gcd, acn) go characters.IncomingListener(gcd.UIState.AddMessage, gcd.UIState.AddGroupError) - go characters.PostmanPat(gcd.OutgoingMessages) go characters.TorStatusPoller(gcd.TorStatus, acn) go characters.PresencePoller(gcd.UIState.GetContact, gcd.UIState.AddContact, gcd.UIState.UpdateContact) go characters.GroupPoller(gcd.UIState.GetContact, gcd.UIState.UpdateContact) @@ -208,7 +207,9 @@ func loadCwtchData(gcd *gothings.GrandCentralDispatcher, acn connectivity.ACN) { }) } - if group.Accepted { + // Only send a join server packet if we haven't joined this server yet... + _,connecting := the.Peer.GetServers()[group.GroupServer] + if group.Accepted && !connecting { the.Peer.JoinServer(group.GroupServer) } } diff --git a/qml/widgets/Message.qml b/qml/widgets/Message.qml index e545c647..ad6d7851 100644 --- a/qml/widgets/Message.qml +++ b/qml/widgets/Message.qml @@ -35,6 +35,7 @@ RowLayout { } onGroupSendError: function(mid, error) { + console.log("Error " + mid + " " + messageID) if (mid == messageID) { root.error = error }