Commit Graph

59 Commits

Author SHA1 Message Date
BrennanConroy 345190e6a9 Add timeout to Negotiate (#736) 2017-08-18 15:51:01 -07:00
BrennanConroy b12451025f Exit OnConnected early if Negotiate fails (#733) 2017-08-17 23:34:45 -07:00
Pawel Kadluczka 9eabce1b02 Enabling tests which would have prevented a bug 2017-08-11 11:22:45 -07:00
Pawel Kadluczka 3a1d4c5dd6 Introducing HubProtocolReaderWriter 2017-08-08 12:11:55 -07:00
Pawel Kadluczka ad4784dbd2 Centralizing serializing hub messages 2017-08-08 12:11:55 -07:00
Pawel Kadluczka a0e490e549 Enabling binary protocols over text transports 2017-08-08 12:11:55 -07:00
Pawel Kadluczka 2854e868ec Adding tests for SSE transport #413 2017-07-13 09:14:03 -07:00
David Fowler 595f783857 Features everywhere (#639)
* Features everywhere
- The goal here is to move things closer to the final design where
ConnectionContext represents a very low level primitive that represents
any connection like transport. As part of that change, we remove unnecessary
properties like User and move those into features. They temporarily live in the same
assembly but they are not required by ConnectionContext.
- Used features for Hubs instead of Metadata
- Metadata is no longer thread safe
2017-07-06 11:27:16 -07:00
David Fowler de21ce1637 Expose IGroupManager on IHubContext (#638)
- Adding groups is no longer coupled to the incoming connection
so we should expose it outside of the hub itself.
2017-07-05 23:50:54 -07:00
Mikael Mengistu cfaa4b69d7 Dynamic Hub Work Part 1 (#636)
Getting rid of TClient
2017-07-05 22:55:16 -07:00
David Fowler f21f5039b2 Replace ConnectionContext with HubConnectionContext (#629)
* Replace ConnectionContext with HubConnectionContext
- The SocketDelegate implementation owns the transport pipe,
it's a single producer single consumer model. SignalR needs to support
multiple producers so that broadcast, return values and sending to individual
connections works. This change introduces a multi producer channel that is used
by all producers to copy data to the transport safely. This will make the move
to pipelines easier.
2017-07-03 17:44:28 -07:00
David Fowler 6332e98d03 Remove Try from Write methods (#614)
- We write to a Stream so it should never fail (it could throw
but that's not new).
2017-06-28 21:53:23 -07:00
David Fowler d6f5e16f38 Support non blocking send on client (#603)
* Added support for non blocking sends on HubConnection
- Renamed Invoke to InvokeAsync
- Add support for non blocking send to TS client
- Add tests to make sure that non blocking sends don't send responses
2017-06-28 21:00:13 -07:00
Pawel Kadluczka f8d91b54d4 MsgPack end-to-end
Plugging in MsgPack protocol
Adding negotiation message to hub protocol
2017-06-27 18:40:55 -07:00
BrennanConroy ef273b4796 Add authorization per hub method (#577) 2017-06-23 10:22:05 -07:00
David Fowler a84ba8820f Use Channel<byte[]> as the abstraction (#579)
* Use Channel<byte[]> as the abstraction
2017-06-23 09:52:35 -07:00
David Fowler 41f54d001b Remove dependencies on a bunch of corefxlab things (#576)
* Remove dependencies on a bunch of corefxlab things
- Used Stream instead of IOutput
- Removed pipelines dependency in most places.
2017-06-22 09:23:52 -07:00
BrennanConroy 3cabb6aeb1 Don't over-discover Hub methods (#511) 2017-06-12 14:26:33 -07:00
Mikael Mengistu 27979d835f Clean up GroupManager (#542) 2017-06-08 17:06:41 -07:00
Pawel Kadluczka a14a0ab039 Adding structured negotiate 2017-06-06 15:53:21 -07:00
David Fowler 38efde7b50 Merge transport and hub protocols (#517)
* Merge transport and hub protocols
- This change merges the transport and hub protocols into a single protocol. The
idea being that sockets in a purely streaming layer that sends frames from the underlying
transport. This makes things like TCP possible and doesn't impose a framing layer at the lowest
level. This will make it possible to build servers like kestrel on top of the TCP layer.
- The Message was removed from the lowest layer of the stack and pushed into the hubs layer. Hub invocations
are framed with what was before the transport protocol. Connections also need to state upfront if they support
binary or not. This will determine how data will be serialized to the specific connection.
- Changed the SSE parser and writer to be strictly SSE without any of the transport protocol specific
information.
- To ensure we aren't using types in the wrong layers
- Moved protocol logic into SignalR
- Socket.Abstractions is now the root of the universe, Sockets.Common will likely be removed
or turned into Sockets.Common.Http.
- Move SSE parser to Sockets.Client and SSE writer into Sockets.Http
- Moved tests into the appropriate test projects
- Updated the spec
2017-06-05 09:45:40 -10:00
David Fowler 42e2715a95 Removed EndOfMessage from Message (#513)
* Removed EndOfMessage from Message
- The webSockets transport no longer supports partial payloads so
this feature is now gone.
2017-06-03 08:32:28 -10:00
Andrew Stanton-Nurse 263dd0e4fe Fix #324 by adding streaming support to the server (#461) 2017-05-31 09:10:20 -07:00
David Fowler d55ebfeee0 Split http and non-http layers (#487)
* Split http and non-http layers
- This change introduces Microsoft.AspNetCore.SignalR.Http
and Microsoft.AspNetCore.Sockets.Http which expose extension methods
on IAppBuilder for wiring up a sockets and signalr pipeline.
2017-05-24 07:09:46 -07:00
David Fowler 9d9a52119e Progress towards splitting the layers (#473)
* Progress towards splitting the layers
- This is based on the work anurse did in anurse/endpoint-middleware-spike to
introduce a connection middleware pipeline that mimics much of our http
pipeline. The intent is that this layer will be generic enough to build both
SignalR and Kestrel on top of but we're not there yet. This change makes incremental
progress towards splitting apart sockets and http so that we can add the tcp transport
without breaking everything all at once.
- Created Microsoft.AspNetCore.Sockets.Abstractions where the primitives for
sockets live. That includes, ConnectionContext (formerly Connection), EndPoint,
ISocketBuilder, SocketDelegate, etc.
- ConnectionContext isn't in it's final form as yet, it still very closely mirrors
the original Connection object we had so that tests continue to pass.
- The HttpConnectionDispatcher doesn't know about EndPoint anymore, it just cares
about invoking the SocketDelegate.
- EndPointOptions has been removed as part of this change as it coupled http specific configuration
to the end point type. There's a new HttpSocketOptions that needs to be passed into MapSocket calls.
- Updated the tests to deal with the API changes.
2017-05-23 02:43:32 -07:00
Andrew Stanton-Nurse 991c1d8517 Implement new Hub Protocol (Part Deux) (#390)
* convert to new protocol
* removed InvocationDescriptorRegistry because we're not yet sure about custom protocols
* update SocialWeather sample
* Moving ts client to using new protocol
* make the functional tests a little easier to run on ctrl-f5
2017-05-09 12:24:58 -07:00
BrennanConroy 1da4e07fff Use common ObjectMethodExecutor (#440) 2017-05-07 10:05:21 -07:00
BrennanConroy 14d3f2bc9b Allow overridden methods on hubs (#334)
Allow overridden methods on hubs
2017-03-23 14:38:31 -07:00
BrennanConroy 8f9f6bcb6f Adding Auth to endpoints 2017-03-21 10:13:56 -07:00
BrennanConroy 485f9595e2 EndPoint options and injection 2017-03-01 14:38:50 -08:00
Andrew Stanton-Nurse 9767dbd5c1 fix #209 by converting to byte[] (#229)
* fix #209 by converting to byte[]
2017-02-22 11:50:37 -08:00
BrennanConroy 6f33ebc1f5 ObjectMethodExecutor 2017-02-17 10:19:32 -08:00
Andrew Stanton-Nurse a728e1da41 Text Protocol Formatter (#187) 2017-02-14 16:00:51 -08:00
David Fowler eafbe74160 Fixed parameter count mismatch when invoking methods with wrong case (#162)
* Fixed parameter count mismatch when invoking methods with wrong case
- Hub methods were being tracked with 2 dictionaries, one for parameter names
the other for callbacks. This change introduces a single dictionary that stores
the hub name to a HubMethodDescriptor. That descriptor stores the parameter types
and method info for the bound hub method.
- The callback is now just an invoke method on the HubEndPoint itself.
- Added tests for case sensitivity in hub method names
2017-01-26 18:25:49 +00:00
David Fowler 162cd1fc06 Handle misbehaving user code (#159)
* Handle misbehaving user code
- Execute EndPoint logic on a threadpool thread
- Turn synchronous exceptions into async ones to unify the
error handling
- Added tests
2017-01-25 23:45:43 +00:00
David Fowler 1e957a9e5a Allow processing of incoming invocations in parallel (#143)
* Allow processing of other incoming invocations in parallel
- Don't wait on the response of an invocation to pick up
the next message from the channel.
- Unhandled exceptions should continue bubbling up correctly
2017-01-24 20:46:17 +00:00
BrennanConroy 3d5fc9493a Remove format from connect and only use it in /send 2017-01-17 11:32:27 -08:00
David Fowler 8dc68cb798 Use TryRead and TryWrite (#113)
* Use TryRead and TryWrite
- Use TryWrite to avoid errors on channel close for /send requests
- Use TryRead until it returns false for all transports but long polling
2017-01-11 12:27:18 -08:00
BrennanConroy b3df10b638 Use connections format 2017-01-11 10:07:15 -08:00
David Fowler cd9ed9228a Remove streaming transport as a top level API (#110)
- Remove Streaming* classes from Sockets. The main
API will be channels based and streaming transports
will use the PipelineChannel (formerly FramingChannel) to
access messages.
- Added WriteAsync and ReadAsync to Connection and hid
the IChannelConnection from public API.
- Also fixed the fact that unknown methods caused server side
exceptions.
- Changed the consumption pattern to WaitToReadAsync/TryRead to avoid
exceptions.
- React to API changes
2017-01-11 04:01:49 -08:00
BrennanConroy 9dbb3742c8 Adding more tests 2017-01-10 16:27:23 -08:00
Andrew Stanton-Nurse 0af0318f43 fix rebase error
re-removed error handling from HubEndpoint, since HttpConnectionDispatcher handles it
2017-01-10 13:49:41 -08:00
Andrew Stanton-Nurse d281cb72ea add "messaging" endpoints and transports
* Need a separate set of primitives to handle messaging
* Using Channels (not Pipelines!) to provide the data flow for messaging
* All transports are now "message" based transports
* Added an adaptor to convert message-based transports to serve
streaming endpoints
2017-01-09 16:01:08 -08:00
moozzyk 217f707456 Sorting out exceptions
Making sure that OnConnected/OnDisconnected events are invoked correctly (e.g. if invoking OnDisconnectedAsync on hub threw we would not call OnDisconnectedAsync on lifetime manager and therefore we would continue to use/track connections that were already closed)
2017-01-09 08:29:44 -08:00
Pawel Kadluczka dbf27c30c3 Introducing HubActivator (#83)
Fixes #60
2016-12-30 11:42:02 -08:00
moozzyk 8022afd3a2 Handling exceptions thrown on the server side
Addresses: #62
2016-12-26 22:39:48 -08:00
Mikael Mengistu e1d9aa2dd4 Early version of the .NET Client 2016-12-14 10:04:48 -08:00
Pawel Kadluczka 2b918b8fe2 Removing type name from hub method name (#63) 2016-12-06 11:17:00 -08:00
BrennanConroy 28e3c8331b Dispose Hubs from ActivatorUtilities 2016-12-05 15:40:01 -08:00
David Fowler 4aa65cf0bf Updated to new System.IO.Pipelines package instead of Channels 2016-11-15 21:46:18 -08:00