46 Commits
Author SHA1 Message Date
selimaj-dev bc45bff9a3 Merge pull request '0.2.1: release handlers on close to fix a per-connection leak' (#2) from release-handlers-on-close into master
Reviewed-on: #2
2026-09-25 03:46:27 +00:00
selimaj-devandclaude 05d5e53788 Release handlers on close to break session reference cycles
Handlers commonly capture a clone of their own Session, and the Session
owns its handlers, so a closed session was never freed. On shutdown,
take the on_close handler instead of cloning it and clear the request
and notification handlers after it runs.

Bump to 0.2.1.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 05:45:07 +02:00
selimaj-dev c9df3b5717 Merge pull request '0.2.0: transport-agnostic protocol on tokio-tungstenite, plus axum adapter' (#1) from protocol-transport into master
Reviewed-on: #1
2026-09-25 03:37:30 +00:00
selimaj-devandclaude d11d4ea08b Make the protocol transport-agnostic and use tokio-tungstenite
Replace the hand-rolled WebSocket implementation with a transport
boundary (Frame over any Sink/Stream) plus adapters for tokio-tungstenite
(server/client features) and axum (axum feature). The JSON wire format
is unchanged, so existing peers keep working.

Fixes:
- unbounded frame lengths were allocated up front; the server now
  enforces message/frame size limits (1 MiB default)
- responses arriving before `request` subscribed were lost
- an accept() error ended `session_loop`
- requests sent right after connecting could arrive before handlers
  were registered; the receiver now starts after `on_conn` returns
- panics in the receive loop skipped `on_close` and leaked sessions;
  `on_close` now runs exactly once and handler panics fail only their
  request
- unknown methods and invalid data got no reply; they now get an
  error response
- slow handlers blocked pongs and responses

Adds `on_notification`, `request_timeout`, `closed`, `is_closed`, `id`,
`ServerConfig`, `from_transport`, `from_tungstenite` and `from_axum`,
integration tests, and an axum example. Bumps to 0.2.0 since
`Session::connect` now takes a URL and the `ws` module is removed.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 05:35:57 +02:00
selimaj-dev dd83ae219a Updated version 2026-03-30 13:41:09 +02:00
selimaj-dev 94b01ff36f Merge pull request #3 from selimaj-dev/fix-websocket-handling
fix: stabilize websocket session handling and eliminate deadlocks
2026-03-30 13:40:47 +02:00
selimaj-dev a853de031d fixed session 2026-03-30 13:39:13 +02:00
selimaj-dev ec984ffaa3 Fixed Session loop 2026-03-30 13:32:28 +02:00
selimaj-dev 1537b61709 Fixed handshake 2026-03-30 13:27:44 +02:00
selimaj-dev a785141305 v0.1.2 2026-02-23 07:41:28 +01:00
selimaj-dev 6933524cff Hash and eq for session 2026-02-23 07:41:02 +01:00
selimaj-dev a26a6b75a0 Pinging 2026-02-23 05:28:19 +01:00
selimaj-dev 5bd9dac052 Ready for publish 2026-02-19 21:14:43 +01:00
selimaj-dev 72678be9c3 Merge pull request #2 from selimaj-dev/readme-an-server
README, logo, and SessionServer
2026-02-19 04:01:53 -08:00
selimaj-dev c6184363d8 Session server 2026-02-19 12:58:07 +01:00
selimaj-dev c3dd874a87 protocol 2026-02-19 12:31:20 +01:00
selimaj-dev b6f786fcf1 Simple readme 2026-02-19 06:06:40 +01:00
selimaj-dev dad994ba80 Merge pull request #1 from selimaj-dev/fully-functional
Fully functional
2026-02-18 20:21:48 -08:00
selimaj-dev 2da9c1abed Improved examples 2026-02-19 05:17:34 +01:00
selimaj-dev d1bed32ca3 Working response 2026-02-19 05:11:36 +01:00
selimaj-dev 9af16feda6 Making progress towoards responses 2026-02-19 05:05:44 +01:00
selimaj-dev e09623e8b9 Respond awaiter 2026-02-19 04:46:08 +01:00
selimaj-dev bad32bfc36 Async handler 2026-02-19 04:15:31 +01:00
selimaj-dev 0940731bd1 Request receiver 2026-02-19 04:05:22 +01:00
selimaj-dev 095903d327 Improved json structure 2026-02-19 03:31:53 +01:00
selimaj-dev 52b77dea83 Working session structure 2026-02-19 03:28:37 +01:00
selimaj-dev 0253f15931 Session types 2026-02-19 02:26:32 +01:00
selimaj-dev f7f1e97671 Simple session 2026-02-19 01:50:37 +01:00
selimaj-dev f9b311b9b6 removed annoying base64 warning 2026-02-19 00:51:51 +01:00
selimaj-dev 60e5a54261 Refactored masking 2026-02-19 00:43:56 +01:00
selimaj-dev 8d67252800 Refactored types 2026-02-19 00:23:47 +01:00
selimaj-dev c5dd9f019d Working WebSocket 2026-02-19 00:09:55 +01:00
selimaj-dev 77c9b20e6b Refactoring to ws 2026-02-18 23:51:54 +01:00
selimaj-dev 7940867c6a Refactoring 2026-02-18 23:43:37 +01:00
selimaj-dev ce1e0a05d4 Fixed mask 2026-02-18 23:14:08 +01:00
selimaj-dev a14a989691 Fixed pinging 2026-02-18 22:55:58 +01:00
selimaj-dev 5edbe8c8a1 Fixing issues 2026-02-18 22:15:37 +01:00
selimaj-dev 9ea2978c8d Working client 2026-02-18 22:01:45 +01:00
selimaj-dev 495de7e87d Server client example 2026-02-18 21:54:16 +01:00
selimaj-dev 09c1fbc232 async Read frame 2026-02-18 21:49:11 +01:00
selimaj-dev dd1d261353 Async session 2026-02-18 21:33:48 +01:00
selimaj-dev 3c254b75ff Async handshake 2026-02-18 21:24:00 +01:00
selimaj-dev d430d30ea2 Session 2026-02-18 21:16:13 +01:00
selimaj-dev 58d38c563b Simple structure 2026-02-18 20:54:14 +01:00
selimaj-dev e325ca02ce Simple structure 2026-02-18 20:51:35 +01:00
selimaj-dev 165e269325 Initial commit 2026-02-18 20:48:18 +01:00