Commit Graph

42 Commits

Author SHA1 Message Date
Nikita Vilunov 26720a2a08 core: separate the model from the logic implementation (#66)
This separates the core in two layers – the model objects and the `LavinaCore` service. Service is responsible for implementing the application logic and exposing it as core's public API to projections, while the model objects will be independent of each other and responsible only for managing and owning in-memory data.

The model objects include:
1. `Storage` – the open connection to the SQLite DB.
2. `PlayerRegistry` – creates, stores refs to, and stops player actors.
3. `RoomRegistry` – manages active rooms.
4. `DialogRegistry` – manages active dialogs.
5. `Broadcasting` – manages subscriptions of players to rooms on remote cluster nodes.
6. `LavinaClient` – manages HTTP connections to remote cluster nodes.
7. `ClusterMetadata` – read-only configuration of the cluster metadata, i.e. allocation of entities to nodes.

As a result:
1. Model objects will be fully independent of each other, e.g. it's no longer necessary to provide a `Storage` to all registries, or to provide `PlayerRegistry` and `DialogRegistry` to each other.
2. Model objects will no longer be `Arc`-wrapped; instead the whole `Services` object will be `Arc`ed and provided to projections.
3. The public API of `lavina-core` will be properly delimited by the APIs of `LavinaCore`, `PlayerConnection` and so on.
4. `LavinaCore` and `PlayerConnection` will also contain APIs of all features, unlike it was previously with `RoomRegistry` and `DialogRegistry`. This is unfortunate, but it could be improved in future.

Reviewed-on: lavina/lavina#66
2024-05-13 14:32:45 +00:00
Nikita Vilunov 6749103726 scalability: initial support for remote rooms (#61)
Reviewed-on: lavina/lavina#61
2024-05-10 20:44:24 +00:00
Nikita Vilunov 8ac64ba8f5 get rid of storage usages in projections 2024-05-05 19:24:23 +02:00
Nikita Vilunov c69513f38b xmpp: use mutable namespace and event in parser coroutines 2024-04-28 17:19:31 +02:00
Nikita Vilunov 4ff09ea05f tracing otlp exporter and instrumentation annotations (#57)
Resolves #56

Reviewed-on: lavina/lavina#57
2024-04-26 10:16:23 +00:00
Nikita Vilunov ddb348bee9 refactor lavina core by grouping public services into a new LavinaCore struct.
this will be useful in future when additional services will be introduced and passed as dependencies
2024-04-21 19:45:50 +02:00
Nikita Vilunov 0105a5b710 persistent memberships (#49)
Reviewed-on: lavina/lavina#49
2024-04-15 09:06:10 +00:00
Nikita Vilunov 878ec33cbb apply uniform formatting 2024-03-20 19:59:15 +01:00
JustTestingV 9582160d2c xmpp: logopass auth (#19)
Reviewed-on: lavina/lavina#19
Co-authored-by: JustTestingV <JustTestingV@gmail.com>
Co-committed-by: JustTestingV <JustTestingV@gmail.com>
2023-10-08 13:53:39 +00:00
Nikita Vilunov 2f034284cf rename telemetry mod to http 2023-10-01 01:50:04 +02:00
Nikita Vilunov dc0a101fe6 split xmpp projection into a separate crate 2023-10-01 01:47:18 +02:00
Nikita Vilunov 854a244dbc split irc proejction into a separate crate (#18) 2023-09-30 23:34:35 +00:00
Nikita Vilunov a1db17c779 split core into a separate crate (#17) 2023-09-30 23:12:11 +00:00
Nikita Vilunov 444b608e96 split proto xmpp defs into its own crate (#14)
Reviewed-on: lavina/lavina#14
2023-09-30 15:43:46 +00:00
Nikita Vilunov 58f6a5d90a add management API endpoints 2023-09-24 22:59:34 +02:00
Nikita Vilunov 3d59f6aae5 read config path from cli args 2023-09-22 17:24:36 +02:00
Nikita Vilunov 3de7a131f0 add dockerfile 2023-09-15 17:11:29 +02:00
Nikita Vilunov b9724cd995 stop player fibers on shutdown 2023-08-24 14:10:31 +02:00
Nikita Vilunov f401aa786e Fix Storage closing during app shutdown.
Storage was still co-owned by the RoomRegistry, which did not allow us to shut it down gracefully. Dropping RoomRegistry explicitly helps.
2023-08-17 18:35:50 +02:00
Nikita Vilunov 1b5ac1491a persistence for rooms 2023-08-17 15:41:28 +02:00
Nikita Vilunov f8151699db implement irc auth via PASS 2023-08-16 16:30:02 +02:00
Nikita Vilunov 9f0bcb9279 storage module init 2023-08-05 00:06:48 +02:00
Nikita Vilunov 4b04696a4f fix for windows 2023-07-30 18:59:33 +02:00
Nikita Vilunov f2ab963f7b add a new nightly flag 2023-05-02 15:41:18 +02:00
Nikita Vilunov d0f807841c generator-based parsing of xmpp stanzas 2023-03-23 01:37:02 +01:00
Nikita Vilunov 494ddc7ee1 feat(xmpp): placeholder for xmpp projection and example of xml 2023-02-28 00:05:30 +01:00
Nikita Vilunov 1bc305962e endpoint with a list of rooms 2023-02-15 18:10:54 +01:00
Nikita Vilunov a8d6a98a5b produce join messages on joins from other connections 2023-02-14 18:55:09 +01:00
Nikita Vilunov ae27c04b0a add active players and rooms gauges 2023-02-12 23:23:52 +01:00
Nikita Vilunov e0135a8ea6 implement pings 2023-02-10 18:09:29 +01:00
Nikita Vilunov c18f152e25 add metrics to irc projection 2023-02-09 20:01:21 +01:00
Nikita Vilunov 08fe958d60 clean stuff, move metrics endpoint onto a separate port 2023-02-09 19:19:03 +01:00
Nikita Vilunov e0ae11c02d irc parsing and initial projection 2023-02-09 18:16:15 +01:00
Nikita Vilunov f9a6d8bdfc reorder modules a bit 2023-02-04 02:01:49 +01:00
Nikita Vilunov b7995584f0 implement multiple rooms 2023-02-03 23:43:59 +01:00
Nikita Vilunov dd8cf0fbf0 add integration tests for ws, rewrite ws handling 2023-01-31 18:32:35 +01:00
Nikita Vilunov f4dda9fb4b simple broadcast of messages 2023-01-31 13:55:47 +01:00
Nikita Vilunov d6b2289221 prometheus example usage 2023-01-28 00:43:20 +04:00
Nikita Vilunov 0b0c432bb8 add a simple router 2023-01-27 01:11:28 +04:00
Nikita Vilunov d94d03466a move tcp client into separate module 2023-01-19 18:58:56 +01:00
Nikita Vilunov 734ca6c423 http server 2023-01-19 18:18:41 +01:00
Nikita Vilunov 1950453cae initial 2023-01-19 15:25:52 +01:00