Merge pull request 'stale process detection on android' (#63) from rrgtj into trunk
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
Reviewed-on: #63
This commit is contained in:
commit
c864bccbb9
36
lib.go
36
lib.go
|
@ -68,9 +68,10 @@ func c_StartCwtch(dir_c *C.char, len C.int, tor_c *C.char, torLen C.int) int8 {
|
||||||
// message: CwtchStarted when start up is complete and app is safe to use
|
// message: CwtchStarted when start up is complete and app is safe to use
|
||||||
// CwtchStartError message when start up fails (includes event.Error data field)
|
// CwtchStartError message when start up fails (includes event.Error data field)
|
||||||
func StartCwtch(appDir string, torPath string) int {
|
func StartCwtch(appDir string, torPath string) int {
|
||||||
eventHandler = utils.NewEventHandler()
|
|
||||||
log.SetLevel(log.LevelInfo)
|
log.SetLevel(log.LevelInfo)
|
||||||
|
|
||||||
|
|
||||||
|
log.Infof("StartCwtch(...)")
|
||||||
// Quick hack check that we're being called with the correct params
|
// Quick hack check that we're being called with the correct params
|
||||||
// On android a stale worker could be calling us with "last apps" directory. Best to abort fast so the app can make a new worker
|
// On android a stale worker could be calling us with "last apps" directory. Best to abort fast so the app can make a new worker
|
||||||
if runtime.GOOS == "android" {
|
if runtime.GOOS == "android" {
|
||||||
|
@ -87,7 +88,16 @@ func StartCwtch(appDir string, torPath string) int {
|
||||||
}
|
}
|
||||||
|
|
||||||
func _startCwtch(appDir string, torPath string) {
|
func _startCwtch(appDir string, torPath string) {
|
||||||
// Exclude Tapir wire Messages (We need a TRACE level)
|
log.Infof("application: %v eventHandler: %v acn: %v", application, eventHandler, globalACN)
|
||||||
|
|
||||||
|
if application != nil {
|
||||||
|
log.Infof("_startCwtch detected existing application; resuming instead of relaunching")
|
||||||
|
ReconnectCwtchForeground()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exclude Tapir wire Messages
|
||||||
|
//(We need a TRACE level)
|
||||||
log.ExcludeFromPattern("service.go")
|
log.ExcludeFromPattern("service.go")
|
||||||
|
|
||||||
// Ensure that the application directory exists...and then initialize settings..
|
// Ensure that the application directory exists...and then initialize settings..
|
||||||
|
@ -107,6 +117,9 @@ func _startCwtch(appDir string, torPath string) {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Infof("Creating new EventHandler()")
|
||||||
|
eventHandler = utils.NewEventHandler()
|
||||||
|
|
||||||
log.Infof("making directory %v", appDir)
|
log.Infof("making directory %v", appDir)
|
||||||
os.MkdirAll(path.Join(appDir, "/.tor", "tor"), 0700)
|
os.MkdirAll(path.Join(appDir, "/.tor", "tor"), 0700)
|
||||||
tor.NewTorrc().WithSocksPort(port).WithOnionTrafficOnly().WithControlPort(controlPort).WithHashedPassword(base64.StdEncoding.EncodeToString(key)).Build(filepath.Join(appDir, ".tor", "tor", "torrc"))
|
tor.NewTorrc().WithSocksPort(port).WithOnionTrafficOnly().WithControlPort(controlPort).WithHashedPassword(base64.StdEncoding.EncodeToString(key)).Build(filepath.Join(appDir, ".tor", "tor", "torrc"))
|
||||||
|
@ -162,6 +175,7 @@ func c_ReconnectCwtchForeground() {
|
||||||
// Like StartCwtch, but StartCwtch has already been called so we don't need to restart Tor etc (probably)
|
// Like StartCwtch, but StartCwtch has already been called so we don't need to restart Tor etc (probably)
|
||||||
// Do need to re-send initial state tho, eg profiles that are already loaded
|
// Do need to re-send initial state tho, eg profiles that are already loaded
|
||||||
func ReconnectCwtchForeground() {
|
func ReconnectCwtchForeground() {
|
||||||
|
log.Infof("Reconnecting cwtchforeground")
|
||||||
if application == nil {
|
if application == nil {
|
||||||
log.Errorf("ReconnectCwtchForeground: Application is nil, presuming stale thread, EXITING Reconnect\n")
|
log.Errorf("ReconnectCwtchForeground: Application is nil, presuming stale thread, EXITING Reconnect\n")
|
||||||
return
|
return
|
||||||
|
@ -333,10 +347,18 @@ func c_GetAppBusEvent() *C.char {
|
||||||
|
|
||||||
// GetAppBusEvent blocks until an event
|
// GetAppBusEvent blocks until an event
|
||||||
func GetAppBusEvent() string {
|
func GetAppBusEvent() string {
|
||||||
|
log.Infof("appbusevent called")
|
||||||
|
for eventHandler == nil {
|
||||||
|
log.Infof("waiting for eventHandler != nil")
|
||||||
|
time.Sleep(time.Second)
|
||||||
|
}
|
||||||
|
|
||||||
var json = ""
|
var json = ""
|
||||||
for json == "" {
|
for json == "" {
|
||||||
|
log.Infof("waiting for json != ''")
|
||||||
json = eventHandler.GetNextEvent()
|
json = eventHandler.GetNextEvent()
|
||||||
}
|
}
|
||||||
|
log.Infof("appbusevent: %v", json)
|
||||||
return json
|
return json
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -700,11 +722,15 @@ func ShutdownCwtch() {
|
||||||
eventHandler.Push(event.NewEvent(event.Shutdown, map[event.Field]string{}))
|
eventHandler.Push(event.NewEvent(event.Shutdown, map[event.Field]string{}))
|
||||||
|
|
||||||
// Allow for the shutdown events to go through and then purge everything else...
|
// Allow for the shutdown events to go through and then purge everything else...
|
||||||
log.Debugf("Shutting Down Application...")
|
log.Infof("Shutting Down Application...")
|
||||||
application.Shutdown()
|
application.Shutdown()
|
||||||
log.Debugf("Shutting Down ACN...")
|
log.Infof("Shutting Down ACN...")
|
||||||
globalACN.Close()
|
globalACN.Close()
|
||||||
log.Debugf("Library Shutdown Complete!")
|
log.Infof("Library Shutdown Complete!")
|
||||||
|
// do not remove - important for state checks elsewhere
|
||||||
|
application = nil
|
||||||
|
globalACN = nil
|
||||||
|
eventHandler = nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -65,6 +65,7 @@ func (eh *EventHandler) GetNextEvent() string {
|
||||||
// handleAppBusEvent enriches AppBus events so they are usable with out further data fetches
|
// handleAppBusEvent enriches AppBus events so they are usable with out further data fetches
|
||||||
func (eh *EventHandler) handleAppBusEvent(e *event.Event) string {
|
func (eh *EventHandler) handleAppBusEvent(e *event.Event) string {
|
||||||
log.Debugf("New AppBus Event to Handle: %v", e)
|
log.Debugf("New AppBus Event to Handle: %v", e)
|
||||||
|
if eh.app != nil {
|
||||||
switch e.EventType {
|
switch e.EventType {
|
||||||
case event.ACNStatus:
|
case event.ACNStatus:
|
||||||
if e.Data[event.Progress] == "100" {
|
if e.Data[event.Progress] == "100" {
|
||||||
|
@ -209,6 +210,7 @@ func (eh *EventHandler) handleAppBusEvent(e *event.Event) string {
|
||||||
|
|
||||||
log.Infof("contactsJson %v", e.Data["ContactsJson"])
|
log.Infof("contactsJson %v", e.Data["ContactsJson"])
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
json, _ := json.Marshal(e)
|
json, _ := json.Marshal(e)
|
||||||
return string(json)
|
return string(json)
|
||||||
|
@ -216,7 +218,9 @@ func (eh *EventHandler) handleAppBusEvent(e *event.Event) string {
|
||||||
|
|
||||||
// handleProfileEvent enriches Profile events so they are usable with out further data fetches
|
// handleProfileEvent enriches Profile events so they are usable with out further data fetches
|
||||||
func (eh *EventHandler) handleProfileEvent(ev *EventProfileEnvelope) string {
|
func (eh *EventHandler) handleProfileEvent(ev *EventProfileEnvelope) string {
|
||||||
|
if eh.app == nil {
|
||||||
|
log.Errorf("eh.app == nil in handleProfileEvent... this shouldnt happen?")
|
||||||
|
} else {
|
||||||
peer := eh.app.GetPeer(ev.Profile)
|
peer := eh.app.GetPeer(ev.Profile)
|
||||||
ph := NewPeerHelper(peer)
|
ph := NewPeerHelper(peer)
|
||||||
log.Debugf("New Profile Event to Handle: %v", ev)
|
log.Debugf("New Profile Event to Handle: %v", ev)
|
||||||
|
@ -304,6 +308,7 @@ func (eh *EventHandler) handleProfileEvent(ev *EventProfileEnvelope) string {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
json, _ := json.Marshal(unwrap(ev))
|
json, _ := json.Marshal(unwrap(ev))
|
||||||
return string(json)
|
return string(json)
|
||||||
|
|
Loading…
Reference in New Issue