summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxengineering <me@xengineering.eu>2023-06-03 20:20:30 +0200
committerxengineering <me@xengineering.eu>2023-06-03 20:21:11 +0200
commit30d99c706e3a75948c49289fc6b0317258957819 (patch)
tree76d63751700e6946655e08cb71553b2f4a19c816
parentf1633a2ab8cb10cb49642c16700379270fb9dc99 (diff)
downloadlimox-30d99c706e3a75948c49289fc6b0317258957819.tar
limox-30d99c706e3a75948c49289fc6b0317258957819.tar.zst
limox-30d99c706e3a75948c49289fc6b0317258957819.zip
Implement dummy session
Minimal step towards session-based XMPP architecture.
-rw-r--r--limox.go9
-rw-r--r--xmpp/session.go46
2 files changed, 52 insertions, 3 deletions
diff --git a/limox.go b/limox.go
index 6c8afa3..320765f 100644
--- a/limox.go
+++ b/limox.go
@@ -26,6 +26,7 @@ type Limox struct {
JidEditor widget.Editor
PwdEditor widget.Editor
MainButton widget.Clickable
+ session *xmpp.Session
XmppConn chan xmpp.Event
State LimoxState
Window *app.Window
@@ -85,13 +86,15 @@ func (l *Limox) buttonCallback() {
pwd := l.PwdEditor.Text()
setLastJid(jid)
setLastPwd(pwd)
- c := xmpp.NewConn(l.XmppConn, jid, pwd)
- go c.Run()
+ l.session = xmpp.NewSession(jid, pwd)
+ l.XmppConn = l.session.Out
+ go l.session.Run()
l.State = Connecting
case Connecting:
+ l.session.Close()
l.State = Disconnected
case Connected:
- l.XmppConn <- xmpp.ShouldDisconnectEvent
+ l.session.Close()
l.State = Disconnected
}
}
diff --git a/xmpp/session.go b/xmpp/session.go
new file mode 100644
index 0000000..80c07a1
--- /dev/null
+++ b/xmpp/session.go
@@ -0,0 +1,46 @@
+package xmpp
+
+import (
+ "time"
+ "log"
+)
+
+type Session struct {
+ in, Out chan Event
+}
+
+func NewSession(jid string, pwd string) *Session {
+ s := Session{}
+
+ s.in = make(chan Event)
+ s.Out = make(chan Event)
+
+ return &s
+}
+
+func (s *Session) Run() {
+ defer func() { s.Out <- DisconnectEvent }()
+
+ s.init()
+
+ for {
+ select {
+ case ev := <-s.in:
+ switch ev {
+ case ShouldDisconnectEvent:
+ return
+ default:
+ log.Printf("Unknown Event '%d'!\n", ev)
+ }
+ }
+ }
+}
+
+func (s *Session) init() {
+ time.Sleep(time.Second)
+ s.Out <- ConnectEvent
+}
+
+func (s *Session) Close() {
+ go func(){ s.in <- ShouldDisconnectEvent }()
+}