mirror of https://github.com/anoshenko/rui.git
107 lines
3.3 KiB
Go
107 lines
3.3 KiB
Go
package rui
|
|
|
|
import "time"
|
|
|
|
// SessionStartListener is the listener interface of a session start event
|
|
type SessionStartListener interface {
|
|
// OnStart is a function that is called by the library after the creation of the root view of the application
|
|
OnStart(session Session)
|
|
}
|
|
|
|
// SessionFinishListener is the listener interface of a session start event
|
|
type SessionFinishListener interface {
|
|
// OnFinish is a function that is called by the library when the user closes the application page in the browser
|
|
OnFinish(session Session)
|
|
}
|
|
|
|
// SessionResumeListener is the listener interface of a session resume event
|
|
type SessionResumeListener interface {
|
|
// OnResume is a function that is called by the library when the application page in the client's browser becomes
|
|
// active and is also called immediately after OnStart
|
|
OnResume(session Session)
|
|
}
|
|
|
|
// SessionPauseListener is the listener interface of a session pause event
|
|
type SessionPauseListener interface {
|
|
// OnPause is a function that is called by the library when the application page in the client's browser becomes
|
|
// inactive and is also called when the user switches to a different browser tab/window, minimizes the browser,
|
|
// or switches to another application
|
|
OnPause(session Session)
|
|
}
|
|
|
|
// SessionPauseListener is the listener interface of a session disconnect event
|
|
type SessionDisconnectListener interface {
|
|
// OnDisconnect is a function that is called by the library if the server loses connection with the client and
|
|
// this happens when the connection is broken
|
|
OnDisconnect(session Session)
|
|
}
|
|
|
|
// SessionPauseListener is the listener interface of a session reconnect event
|
|
type SessionReconnectListener interface {
|
|
// OnReconnect is a function that is called by the library after the server reconnects with the client
|
|
// and this happens when the connection is restored
|
|
OnReconnect(session Session)
|
|
}
|
|
|
|
func (session *sessionData) onStart() {
|
|
if session.content != nil {
|
|
if listener, ok := session.content.(SessionStartListener); ok {
|
|
listener.OnStart(session)
|
|
}
|
|
session.onResume()
|
|
}
|
|
}
|
|
|
|
func (session *sessionData) onFinish() {
|
|
if session.content != nil {
|
|
session.onPause()
|
|
if listener, ok := session.content.(SessionFinishListener); ok {
|
|
listener.OnFinish(session)
|
|
}
|
|
}
|
|
}
|
|
|
|
func (session *sessionData) onPause() {
|
|
if session.content != nil {
|
|
session.pauseTime = time.Now().Unix()
|
|
if listener, ok := session.content.(SessionPauseListener); ok {
|
|
listener.OnPause(session)
|
|
}
|
|
if timeout := session.app.Params().SocketAutoClose; timeout > 0 {
|
|
go session.autoClose(session.pauseTime, timeout)
|
|
}
|
|
}
|
|
}
|
|
|
|
func (session *sessionData) autoClose(start int64, timeout int) {
|
|
time.Sleep(time.Second * time.Duration(timeout))
|
|
if session.pauseTime == start {
|
|
session.bridge.callFunc("closeSocket")
|
|
}
|
|
}
|
|
|
|
func (session *sessionData) onResume() {
|
|
session.pauseTime = 0
|
|
if session.content != nil {
|
|
if listener, ok := session.content.(SessionResumeListener); ok {
|
|
listener.OnResume(session)
|
|
}
|
|
}
|
|
}
|
|
|
|
func (session *sessionData) onDisconnect() {
|
|
if session.content != nil {
|
|
if listener, ok := session.content.(SessionDisconnectListener); ok {
|
|
listener.OnDisconnect(session)
|
|
}
|
|
}
|
|
}
|
|
|
|
func (session *sessionData) onReconnect() {
|
|
if session.content != nil {
|
|
if listener, ok := session.content.(SessionReconnectListener); ok {
|
|
listener.OnReconnect(session)
|
|
}
|
|
}
|
|
}
|