| author | Stephen Paul Weber
<singpolyma@singpolyma.net> 2024-09-24 03:37:30 UTC |
| committer | Stephen Paul Weber
<singpolyma@singpolyma.net> 2024-09-24 03:53:14 UTC |
| parent | 6bd4e8bc555e1f981545feba48c0d03b3abb9786 |
| snikket/Client.hx | +4 | -4 |
| snikket/GenericStream.hx | +2 | -1 |
| snikket/Persistence.hx | +2 | -2 |
| snikket/persistence/Dummy.hx | +3 | -3 |
| snikket/persistence/Sqlite.hx | +3 | -3 |
| snikket/persistence/browser.js | +8 | -4 |
| snikket/streams/XmppJsStream.hx | +16 | -11 |
| snikket/streams/XmppStropheStream.hx | +3 | -1 |
diff --git a/snikket/Client.hx b/snikket/Client.hx index 4519de3..6f7b0c7 100644 --- a/snikket/Client.hx +++ b/snikket/Client.hx @@ -98,7 +98,7 @@ class Client extends EventEmitter { }); stream.on("sm/update", (data) -> { - persistence.storeStreamManagement(accountId(), data.id, data.outbound, data.inbound, data.outbound_q); + persistence.storeStreamManagement(accountId(), data.sm); return EventHandled; }); @@ -457,7 +457,7 @@ class Client extends EventEmitter { public function start() { persistence.getLogin(accountId(), (clientId, loadedToken, fastCount, displayName) -> { token = loadedToken; - persistence.getStreamManagement(accountId(), (smId, smOut, smIn, smOutQ) -> { + persistence.getStreamManagement(accountId(), (sm) -> { stream.clientId = clientId ?? ID.long(); jid = jid.withResource(stream.clientId); if (!updateDisplayName(displayName) && clientId == null) { @@ -490,13 +490,13 @@ class Client extends EventEmitter { stream.on("auth/fail", (data) -> { if (token != null) { token = null; - stream.connect(jid.asString(), smId == null || smId == "" ? null : { id: smId, outbound: smOut, inbound: smIn, outbound_q: smOutQ }); + stream.connect(jid.asString(), sm); } else { this.trigger("auth/fail", data); } return EventHandled; }); - stream.connect(jid.asString(), smId == null || smId == "" ? null : { id: smId, outbound: smOut, inbound: smIn, outbound_q: smOutQ }); + stream.connect(jid.asString(), sm); }); }); }); diff --git a/snikket/GenericStream.hx b/snikket/GenericStream.hx index c21a17e..5fe7b63 100644 --- a/snikket/GenericStream.hx +++ b/snikket/GenericStream.hx @@ -1,5 +1,6 @@ package snikket; +import haxe.io.BytesData; import snikket.Stanza; import snikket.EventEmitter; @@ -19,7 +20,7 @@ abstract class GenericStream extends EventEmitter { /* Connections and streams */ - abstract public function connect(jid:String, sm:Null<{id:String,outbound:Int,inbound:Int,outbound_q:Array<String>}>):Void; + abstract public function connect(jid:String, sm:Null<BytesData>):Void; abstract public function sendStanza(stanza:Stanza):Void; abstract public function newId():String; abstract public function onIq(type:IqRequestType, tag:String, xmlns:String, handler:(Stanza)->IqResult):Void; diff --git a/snikket/Persistence.hx b/snikket/Persistence.hx index 8f945e3..66edb53 100644 --- a/snikket/Persistence.hx +++ b/snikket/Persistence.hx @@ -24,8 +24,8 @@ interface Persistence { public function getCaps(ver:String, callback: (Null<Caps>)->Void):Void; public function storeLogin(login:String, clientId:String, displayName:String, token:Null<String>):Void; public function getLogin(login:String, callback:(clientId:Null<String>, token:Null<String>, fastCount: Int, displayName:Null<String>)->Void):Void; - public function storeStreamManagement(accountId:String, smId:String, outboundCount:Int, inboundCount:Int, outboundQueue:Array<String>):Void; - public function getStreamManagement(accountId:String, callback: (smId:Null<String>, outboundCount:Int, inboundCount:Int, outboundQueue:Array<String>)->Void):Void; + public function storeStreamManagement(accountId:String, data:BytesData):Void; + public function getStreamManagement(accountId:String, callback: (Null<BytesData>)->Void):Void; public function storeService(accountId:String, serviceId:String, name:Null<String>, node:Null<String>, caps:Caps):Void; @HaxeCBridge.noemit public function findServicesWithFeature(accountId:String, feature:String, callback:(Array<{serviceId:String, name:Null<String>, node:Null<String>, caps: Caps}>)->Void):Void; diff --git a/snikket/persistence/Dummy.hx b/snikket/persistence/Dummy.hx index 19147ea..6d91ffa 100644 --- a/snikket/persistence/Dummy.hx +++ b/snikket/persistence/Dummy.hx @@ -88,11 +88,11 @@ class Dummy implements Persistence { } @HaxeCBridge.noemit - public function storeStreamManagement(accountId:String, smId:String, outboundCount:Int, inboundCount:Int, outboundQueue:Array<String>) { } + public function storeStreamManagement(accountId:String, sm:BytesData) { } @HaxeCBridge.noemit - public function getStreamManagement(accountId:String, callback: (Null<String>, Int, Int, Array<String>)->Void) { - callback(null, -1, -1, []); + public function getStreamManagement(accountId:String, callback: (Null<BytesData>)->Void) { + callback(null); } @HaxeCBridge.noemit diff --git a/snikket/persistence/Sqlite.hx b/snikket/persistence/Sqlite.hx index e3b01ed..bd70b66 100644 --- a/snikket/persistence/Sqlite.hx +++ b/snikket/persistence/Sqlite.hx @@ -395,13 +395,13 @@ class Sqlite implements Persistence { } @HaxeCBridge.noemit - public function storeStreamManagement(accountId:String, smId:String, outboundCount:Int, inboundCount:Int, outboundQueue:Array<String>) { + public function storeStreamManagement(accountId:String, sm:BytesData) { // TODO } @HaxeCBridge.noemit - public function getStreamManagement(accountId:String, callback: (Null<String>, Int, Int, Array<String>)->Void) { - callback(null, -1, -1, []); // TODO + public function getStreamManagement(accountId:String, callback: (Null<BytesData>)->Void) { + callback(null); // TODO } @HaxeCBridge.noemit diff --git a/snikket/persistence/browser.js b/snikket/persistence/browser.js index acea1f3..35936c0 100644 --- a/snikket/persistence/browser.js +++ b/snikket/persistence/browser.js @@ -508,10 +508,10 @@ const browser = (dbname, tokenize, stemmer) => { } }, - storeStreamManagement: function(account, id, outbound, inbound, outbound_q) { + storeStreamManagement: function(account, sm) { const tx = db.transaction(["keyvaluepairs"], "readwrite"); const store = tx.objectStore("keyvaluepairs"); - store.put({ id: id, outbound: outbound, inbound: inbound, outbound_q }, "sm:" + account).onerror = console.error; + store.put(sm, "sm:" + account).onerror = console.error; }, getStreamManagement: function(account, callback) { @@ -519,11 +519,15 @@ const browser = (dbname, tokenize, stemmer) => { const store = tx.objectStore("keyvaluepairs"); promisifyRequest(store.get("sm:" + account)).then( (v) => { - callback(v?.id, v?.outbound, v?.inbound, v?.outbound_q || []); + if (v instanceof ArrayBuffer) { + callback(v); + } else { + new Blob([JSON.stringify(v)], {type: "text/plain; charset=utf-8"}).arrayBuffer().then(callback); + } }, (e) => { console.error(e); - callback(null, -1, -1, []); + callback(null); } ); }, diff --git a/snikket/streams/XmppJsStream.hx b/snikket/streams/XmppJsStream.hx index 1364128..e1f08c5 100644 --- a/snikket/streams/XmppJsStream.hx +++ b/snikket/streams/XmppJsStream.hx @@ -1,8 +1,10 @@ package snikket.streams; -import js.lib.Promise; import haxe.Http; import haxe.Json; +import haxe.io.Bytes; +import haxe.io.BytesData; +import js.lib.Promise; using Lambda; import snikket.FSM; @@ -101,7 +103,7 @@ class XmppJsStream extends GenericStream { private var state:FSM; private var pending:Array<XmppJsXml> = []; private var pendingOnIq:Array<{type:IqRequestType,tag:String,xmlns:String,handler:(Stanza)->IqResult}> = []; - private var initialSM: Null<{id:String,outbound:Int,inbound:Int,outbound_q:Array<String>}> = null; + private var initialSM: Null<BytesData> = null; private var resumed = false; override public function new() { @@ -187,10 +189,11 @@ class XmppJsStream extends GenericStream { } if (initialSM != null) { - xmpp.streamManagement.id = initialSM.id; - xmpp.streamManagement.outbound = initialSM.outbound; - xmpp.streamManagement.inbound = initialSM.inbound; - xmpp.streamManagement.outbound_q = (initialSM.outbound_q ?? []).map(XmppJsLtx.parse); + final parsedSM = haxe.Json.parse(Bytes.ofData(initialSM).toString()); + xmpp.streamManagement.id = parsedSM.id; + xmpp.streamManagement.outbound = parsedSM.outbound; + xmpp.streamManagement.inbound = parsedSM.inbound; + xmpp.streamManagement.outbound_q = (parsedSM.outbound_q ?? []).map(XmppJsLtx.parse); initialSM = null; } @@ -255,7 +258,7 @@ class XmppJsStream extends GenericStream { }); } - public function connect(jid:String, sm:Null<{id:String,outbound:Int,inbound:Int,outbound_q:Array<String>}>) { + public function connect(jid:String, sm:Null<BytesData>) { this.state.event("connect-requested"); this.jid = new XmppJsJID(jid); this.initialSM = sm; @@ -311,10 +314,12 @@ class XmppJsStream extends GenericStream { this.trigger( "sm/update", { - id: client.streamManagement.id, - outbound: client.streamManagement.outbound, - inbound: client.streamManagement.inbound, - outbound_q: (client.streamManagement.outbound_q ?? []).map((stanza) -> stanza.toString()), + sm: Bytes.ofString(haxe.Json.stringify({ + id: client.streamManagement.id, + outbound: client.streamManagement.outbound, + inbound: client.streamManagement.inbound, + outbound_q: (client.streamManagement.outbound_q ?? []).map((stanza) -> stanza.toString()), + })).getData() } ); } diff --git a/snikket/streams/XmppStropheStream.hx b/snikket/streams/XmppStropheStream.hx index e6aa44f..0c9fe85 100644 --- a/snikket/streams/XmppStropheStream.hx +++ b/snikket/streams/XmppStropheStream.hx @@ -1,6 +1,8 @@ package snikket.streams; import haxe.DynamicAccess; +import haxe.io.Bytes; +import haxe.io.BytesData; import cpp.Char; import cpp.ConstPointer; @@ -246,7 +248,7 @@ class XmppStropheStream extends GenericStream { } } - public function connect(jid:String, sm:Null<{id:String,outbound:Int,inbound:Int,outbound_q:Array<String>}>) { + public function connect(jid:String, sm:Null<BytesData>) { StropheConn.set_jid(conn, NativeString.c_str(jid)); this.on("auth/password", function (event) { var o = this;