Merge branch 'tapir-peer' of cwtch.im/cwtch into master

This commit is contained in:
Dan Ballard 2019-07-29 14:50:22 -07:00 committed by Gogs
commit c43ec5497b
3 changed files with 25 additions and 11 deletions

View File

@ -44,6 +44,7 @@ const (
// Peer acknowledges a previously sent message
// attributes
// EventID: The original event id that the peer is responding too.
// RemotePeer: The peer associated with the acknowledgement
PeerAcknowledgement = Type("PeerAcknowledgement")
// attributes:

View File

@ -135,10 +135,10 @@ func (e *engine) eventHandler() {
func (e *engine) createPeerTemplate() *PeerApp {
peerAppTemplate := new(PeerApp)
peerAppTemplate.MessageHandler = e.handlePeerMessage
peerAppTemplate.OnAcknowledgement = e.ignoreOnShutdown(e.peerAck)
peerAppTemplate.OnAuth = e.ignoreOnShutdown(e.peerAuthed)
peerAppTemplate.OnConnecting = e.ignoreOnShutdown(e.peerConnecting)
peerAppTemplate.OnClose = e.ignoreOnShutdown(e.peerDisconnected)
peerAppTemplate.OnAcknowledgement = e.ignoreOnShutdown2(e.peerAck)
peerAppTemplate.OnAuth = e.ignoreOnShutdown(e.peerAuthed)
peerAppTemplate.OnConnecting = e.ignoreOnShutdown(e.peerConnecting)
peerAppTemplate.OnClose = e.ignoreOnShutdown(e.peerDisconnected)
return peerAppTemplate
}
@ -163,14 +163,26 @@ func (e *engine) Shutdown() {
// needs to be run in a goroutine as will block on Open.
func (e *engine) peerWithOnion(onion string) {
e.ignoreOnShutdown(e.peerConnecting)(onion)
_,err := e.service.Connect(onion, e.createPeerTemplate())
_, err := e.service.Connect(onion, e.createPeerTemplate())
if err != nil {
e.ignoreOnShutdown(e.peerDisconnected)(onion)
}
}
func (e * engine) ignoreOnShutdown(f func(string)) func(string){
return func (x string) {if !e.shuttingDown{f(x)} }
func (e *engine) ignoreOnShutdown(f func(string)) func(string) {
return func(x string) {
if !e.shuttingDown {
f(x)
}
}
}
func (e *engine) ignoreOnShutdown2(f func(string, string)) func(string, string) {
return func(x, y string) {
if !e.shuttingDown {
f(x, y)
}
}
}
func (e *engine) peerAuthed(onion string) {
@ -187,9 +199,10 @@ func (e *engine) peerConnecting(onion string) {
}))
}
func (e *engine) peerAck(eventID string) {
func (e *engine) peerAck(onion string, eventID string) {
e.eventManager.Publish(event.NewEvent(event.PeerAcknowledgement, map[event.Field]string{
event.EventID: eventID,
event.EventID: eventID,
event.RemotePeer: onion,
}))
}

View File

@ -13,7 +13,7 @@ type PeerApp struct {
applications.AuthApp
connection *tapir.Connection
MessageHandler func(string, []byte)
OnAcknowledgement func(string)
OnAcknowledgement func(string, string)
OnAuth func(string)
OnClose func(string)
OnConnecting func(string)
@ -64,7 +64,7 @@ func (pa PeerApp) listen() {
err := json.Unmarshal(message, &peerMessage)
if err == nil {
if peerMessage.Context == event.ContextAck {
pa.OnAcknowledgement(peerMessage.ID)
pa.OnAcknowledgement(pa.connection.Hostname, peerMessage.ID)
} else {
pa.MessageHandler(pa.connection.Hostname, peerMessage.Data)
}