Commit Graph
71 Commits
Author SHA1 Message Date
Antonio ScandurraandNathan Sobo 2352725c58 💄
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
2021-09-23 17:32:37 +02:00
Antonio Scandurra 511cbaa2bd Version the zrpc protocol using a X-ZRPC-VERSION header 2021-09-23 15:35:35 +02:00
Max Brunsfeld 9352c4e076 Ignore empty ZED_IMPERSONATE env var 2021-09-21 13:29:06 -07:00
Antonio Scandurra 4a723a1fb9 Merge branch 'main' into people-panel 2021-09-21 17:29:07 +02:00
Max BrunsfeldandNathan Sobo a068019d94 Add ZED_IMPERSONATE env var, for testing
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
2021-09-20 15:44:28 -07:00
Antonio Scandurra 3d4dbf3140 Maintain collaborators in UserStore 2021-09-20 15:05:41 +02:00
Antonio Scandurra 6f2c8ffb00 Introduce a Client::subscribe method that doesn't need an entity 2021-09-20 14:14:07 +02:00
Nathan Sobo 9a9c8aec3f Fix deadlock when handling incoming RPC messages
We need to drop the lock on the rpc::ClientState when handling an incoming messages in case those message handlers attempt to interact with the client and grab the lock.
2021-09-17 16:12:03 -07:00
Nathan SoboandAntonio Scandurra ec7c6f3f91 Always assign credentials on rpc::Client after connecting
Co-Authored-By: Antonio Scandurra <me@as-cii.com>
2021-09-15 05:13:05 -06:00
Antonio ScandurraandNathan Sobo 603f1d820d Authenticate via the browser if keychain credentials are invalid
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
2021-09-15 11:45:08 +02:00
Nathan Sobo 7e4d5b7d04 Clear cached credentials when establishing a websocket connection with an invalid token 2021-09-14 20:36:03 -06:00
Nathan SoboandMax Brunsfeld 4a9918979e WIP: Clear cached credentials if authentication fails
Still need to actually handle an HTTP response from the server indicating there was an invalid token.

Co-Authored-By: Max Brunsfeld <maxbrunsfeld@gmail.com>
2021-09-14 19:19:11 -06:00
Nathan SoboandMax Brunsfeld 77a4a36eb3 Test that we reuse credentials when reconnecting
Co-Authored-By: Max Brunsfeld <maxbrunsfeld@gmail.com>
2021-09-14 18:30:17 -06:00
Nathan SoboandMax Brunsfeld 44a457e8b6 Cache credentials in memory separately from connection status
This prevents us from re-prompting for keychain access when we retry connections after the connection is lost.

Co-Authored-By: Max Brunsfeld <maxbrunsfeld@gmail.com>
2021-09-14 18:21:46 -06:00
Nathan Sobo f0019e3725 WIP 2021-09-14 12:29:56 -06:00
Antonio ScandurraandMax Brunsfeld 201b923248 Don't panic if heartbeat messages can't be sent
Co-Authored-By: Max Brunsfeld <max@zed.dev>
2021-09-14 10:56:09 +02:00
Max Brunsfeld 38bfaba135 Add a generic Ack message, use it instead of Pong
Remove the `id` field from `Ping`, because it isn't used.
There is already an id on the message envelope.
2021-09-09 11:24:16 -07:00
Antonio ScandurraandNathan Sobo d08ec8bd53 Reduce backoff and add some jitter to avoid thundering herd issues
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
2021-09-09 17:00:18 +02:00
Antonio ScandurraandNathan Sobo 8de18b5a84 Re-join channel when reconnecting
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
2021-09-09 15:34:46 +02:00
Antonio Scandurra ad7631de9f Refactor and write a simple unit test to verify reconnection logic 2021-09-09 11:00:43 +02:00
Max Brunsfeld 6baa9fe37b WIP - Start work on reconnect logic 2021-09-08 18:20:32 -07:00
Max Brunsfeld edbd424b75 Introduce test-only APIs for configuring how Client reconnects 2021-09-08 18:19:59 -07:00
Max Brunsfeld b6eac57f63 Introduce a concrete Conn type for peer's websocket connection
This is mostly to set us up to test the rpc::Client's reconnect
logic.

There are multiple ways that the `rpc::Client` may establish
its websocket connection: (SSL in production, plain TCP during
local development, and using an in-memory connection for tests).
Now we can represent all of those connections using a common type.

Also, several long methods no longer need to be generic, which
is good for compile time.
2021-09-08 18:14:47 -07:00
Max Brunsfeld c3e29e0a2d Finish implementing DeterministicExecutor::advance_clock
* Start by running all non-timer futures to completion, to ensure that
  timers have a chance to be registered.
* Release executor's state lock before waking any timers
2021-09-08 11:27:30 -07:00
Antonio ScandurraandMax Brunsfeld 900010160f WIP
Co-Authored-By: Max Brunsfeld <max@zed.dev>
2021-09-08 18:58:59 +02:00
Antonio Scandurra a3bbf71390 🎨 2021-09-08 17:10:48 +02:00
Antonio ScandurraandNathan Sobo 6c3551bff1 Use watch::Sender::borrow_mut instead of send
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
2021-09-08 17:09:58 +02:00
Antonio Scandurra af6e931da7 Start on a Client::status method that can be observed 2021-09-08 15:58:16 +02:00
Antonio Scandurra 058691d2b2 Focus chat input editor after signing in 2021-09-07 13:57:30 +02:00
Antonio Scandurra cb62d53b49 Return errors instead of panicking when interacting with the keychain
Closes #134
2021-09-06 10:40:19 +02:00
Max Brunsfeld d9d52b8aa5 When loggin in, send user id instead of creating a new watch channel 2021-08-24 13:11:37 -07:00
Nathan SoboandAntonio Scandurra 39ad7f6a60 Make RPC client's current user_id observable
Co-Authored-By: Antonio Scandurra <me@as-cii.com>
2021-08-24 08:37:32 -06:00
Nathan SoboandAntonio Scandurra 9b636fb81e Add "Zed > Sign" In menu item
Co-Authored-By: Antonio Scandurra <me@as-cii.com>
2021-08-24 08:29:36 -06:00
Max Brunsfeld 10868cf0ea Start work on sending channel messages 2021-08-19 18:04:49 -07:00
Max Brunsfeld 620b988e22 WIP 2021-08-19 13:07:28 -07:00
Max BrunsfeldandNathan Sobo 86c819757d Move Arc outside of rpc::Client
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
2021-08-19 12:56:50 -07:00
5338b30c00 Remove remaining instances of router
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
Co-Authored-By: Max Brunsfeld <max@zed.dev>
2021-08-19 19:38:17 +02:00
Antonio Scandurra d6412fdbde Delete old Peer implementation and adapt previous code paths
This still doesn't compile but should be close.
2021-08-19 15:02:30 +02:00
Nathan Sobo 3f5db7284d Remove shared_worktrees map from ClientState
Each worktree instance now handles its own messages.
2021-08-18 19:16:40 -06:00
Nathan SoboandMax Brunsfeld 37f24d10ec Subscribe to worktree messages at the entity level
Co-Authored-By: Max Brunsfeld <maxbrunsfeld@gmail.com>
2021-08-18 19:06:46 -06:00
541f58e12c Start on subscribing to messages in channel entity instances
Co-Authored-By: Max Brunsfeld <maxbrunsfeld@gmail.com>
Co-Authored-By: Antonio Scandurra <me@as-cii.com>
2021-08-18 11:45:29 -06:00
Max Brunsfeld ff822c9158 wip 2021-08-06 14:47:18 -07:00
391ad489ff Rename zed-rpc to zrpc
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
Co-Authored-By: Max Brunsfeld <max@zed.dev>
2021-07-13 18:22:00 +02:00
Antonio Scandurra ccff27a157 Ignore whitespaces surrounding a shared worktree's URL 2021-07-12 14:16:36 +02:00
Nathan Sobo 4aab70d7fb Remove authentication at the RPC layer
This means we can remove IOHandler and return a simple future that is Send
2021-07-09 21:57:10 -06:00
Nathan Sobo 89ef4d760d Send an Authorization HTTP header when connecting web sockets 2021-07-09 21:27:33 -06:00
Max Brunsfeld eeebc761b6 Restructure Peer to handle connections' messages in order 2021-07-09 16:27:34 -07:00
Max BrunsfeldandNathan Sobo b2aa961b4f Allow rpc client to connect to an in-memory stream
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
2021-07-08 17:38:54 -07:00
Antonio ScandurraandMax Brunsfeld 7335e70eb7 Use async-tungstenite's built-in TLS connector
Co-Authored-By: Max Brunsfeld <max@zed.dev>
2021-07-07 19:55:26 +02:00
Antonio ScandurraandMax Brunsfeld 024684e46c Improve logging when there is an error in the RPC layer
Co-Authored-By: Max Brunsfeld <max@zed.dev>
2021-07-07 19:36:53 +02:00