Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

integrate new protocol #24

Merged
merged 6 commits into from Apr 23, 2018
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
36 changes: 18 additions & 18 deletions src/Microsoft.Azure.SignalR.Protocols/ServiceProtocol.cs
Expand Up @@ -137,7 +137,7 @@ public ReadOnlyMemory<byte> GetMessageBytes(ServiceMessage message)
}
}

private void WriteMessageCore(ServiceMessage message, Stream packer)
private static void WriteMessageCore(ServiceMessage message, Stream packer)
{
switch (message)
{
Expand Down Expand Up @@ -188,27 +188,27 @@ private void WriteMessageCore(ServiceMessage message, Stream packer)
}
}

private void WriteHandshakeRequestMessage(HandshakeRequestMessage message, Stream packer)
private static void WriteHandshakeRequestMessage(HandshakeRequestMessage message, Stream packer)
{
MessagePackBinary.WriteArrayHeader(packer, 2);
MessagePackBinary.WriteInt32(packer, ServiceProtocolConstants.HandshakeRequestType);
MessagePackBinary.WriteInt32(packer, message.Version);
}

private void WriteHandshakeResponseMessage(HandshakeResponseMessage message, Stream packer)
private static void WriteHandshakeResponseMessage(HandshakeResponseMessage message, Stream packer)
{
MessagePackBinary.WriteArrayHeader(packer, 2);
MessagePackBinary.WriteInt32(packer, ServiceProtocolConstants.HandshakeResponseType);
MessagePackBinary.WriteString(packer, message.ErrorMessage);
}

private void WritePingMessage(PingMessage message, Stream packer)
private static void WritePingMessage(PingMessage message, Stream packer)
{
MessagePackBinary.WriteArrayHeader(packer, 1);
MessagePackBinary.WriteInt32(packer, ServiceProtocolConstants.PingMessageType);
}

private void WriteOpenConnectionMessage(OpenConnectionMessage message, Stream packer)
private static void WriteOpenConnectionMessage(OpenConnectionMessage message, Stream packer)
{
MessagePackBinary.WriteArrayHeader(packer, 3);
MessagePackBinary.WriteInt32(packer, ServiceProtocolConstants.OpenConnectionMessageType);
Expand All @@ -229,71 +229,71 @@ private void WriteOpenConnectionMessage(OpenConnectionMessage message, Stream pa
}
}

private void WriteCloseConnectionMessage(CloseConnectionMessage message, Stream packer)
private static void WriteCloseConnectionMessage(CloseConnectionMessage message, Stream packer)
{
MessagePackBinary.WriteArrayHeader(packer, 3);
MessagePackBinary.WriteInt32(packer, ServiceProtocolConstants.CloseConnectionMessageType);
MessagePackBinary.WriteString(packer, message.ConnectionId);
MessagePackBinary.WriteString(packer, message.ErrorMessage);
}

private void WriteConnectionDataMessage(ConnectionDataMessage message, Stream packer)
private static void WriteConnectionDataMessage(ConnectionDataMessage message, Stream packer)
{
MessagePackBinary.WriteArrayHeader(packer, 3);
MessagePackBinary.WriteInt32(packer, ServiceProtocolConstants.ConnectionDataMessageType);
MessagePackBinary.WriteString(packer, message.ConnectionId);
MessagePackBinary.WriteBytes(packer, message.Payload);
}

private void WriteMultiConnectionDataMessage(MultiConnectionDataMessage message, Stream packer)
private static void WriteMultiConnectionDataMessage(MultiConnectionDataMessage message, Stream packer)
{
MessagePackBinary.WriteArrayHeader(packer, 3);
MessagePackBinary.WriteInt32(packer, ServiceProtocolConstants.MultiConnectionDataMessageType);
WriteStringArray(message.ConnectionList, packer);
WritePayloads(message.Payloads, packer);
}

private void WriteUserDataMessage(UserDataMessage message, Stream packer)
private static void WriteUserDataMessage(UserDataMessage message, Stream packer)
{
MessagePackBinary.WriteArrayHeader(packer, 3);
MessagePackBinary.WriteInt32(packer, ServiceProtocolConstants.UserDataMessageType);
MessagePackBinary.WriteString(packer, message.UserId);
WritePayloads(message.Payloads, packer);
}

private void WriteMultiUserDataMessage(MultiUserDataMessage message, Stream packer)
private static void WriteMultiUserDataMessage(MultiUserDataMessage message, Stream packer)
{
MessagePackBinary.WriteArrayHeader(packer, 3);
MessagePackBinary.WriteInt32(packer, ServiceProtocolConstants.UserDataMessageType);
WriteStringArray(message.UserList, packer);
WritePayloads(message.Payloads, packer);
}

private void WriteBroadcastDataMessage(BroadcastDataMessage message, Stream packer)
private static void WriteBroadcastDataMessage(BroadcastDataMessage message, Stream packer)
{
MessagePackBinary.WriteArrayHeader(packer, 3);
MessagePackBinary.WriteInt32(packer, ServiceProtocolConstants.BroadcastDataMessageType);
WriteStringArray(message.ExcludedList, packer);
WritePayloads(message.Payloads, packer);
}

private void WriteJoinGroupMessage(JoinGroupMessage message, Stream packer)
private static void WriteJoinGroupMessage(JoinGroupMessage message, Stream packer)
{
MessagePackBinary.WriteArrayHeader(packer, 3);
MessagePackBinary.WriteInt32(packer, ServiceProtocolConstants.JoinGroupMessageType);
MessagePackBinary.WriteString(packer, message.ConnectionId);
MessagePackBinary.WriteString(packer, message.GroupName);
}

private void WriteLeaveGroupMessage(LeaveGroupMessage message, Stream packer)
private static void WriteLeaveGroupMessage(LeaveGroupMessage message, Stream packer)
{
MessagePackBinary.WriteArrayHeader(packer, 3);
MessagePackBinary.WriteInt32(packer, ServiceProtocolConstants.LeaveGroupMessageType);
MessagePackBinary.WriteString(packer, message.ConnectionId);
MessagePackBinary.WriteString(packer, message.GroupName);
}

private void WriteGroupBroadcastDataMessage(GroupBroadcastDataMessage message, Stream packer)
private static void WriteGroupBroadcastDataMessage(GroupBroadcastDataMessage message, Stream packer)
{
MessagePackBinary.WriteArrayHeader(packer, 4);
MessagePackBinary.WriteInt32(packer, ServiceProtocolConstants.GroupBroadcastDataMessageType);
Expand All @@ -302,15 +302,15 @@ private void WriteGroupBroadcastDataMessage(GroupBroadcastDataMessage message, S
WritePayloads(message.Payloads, packer);
}

private void WriteMultiGroupBroadcastDataMessage(MultiGroupBroadcastDataMessage message, Stream packer)
private static void WriteMultiGroupBroadcastDataMessage(MultiGroupBroadcastDataMessage message, Stream packer)
{
MessagePackBinary.WriteArrayHeader(packer, 3);
MessagePackBinary.WriteInt32(packer, ServiceProtocolConstants.MultiGroupBroadcastDataMessageType);
WriteStringArray(message.GroupList, packer);
WritePayloads(message.Payloads, packer);
}

private void WriteStringArray(string[] array, Stream packer)
private static void WriteStringArray(string[] array, Stream packer)
{
if (array?.Any() == true)
{
Expand All @@ -326,9 +326,9 @@ private void WriteStringArray(string[] array, Stream packer)
}
}

private void WritePayloads(IDictionary<string, byte[]> payloads, Stream packer)
private static void WritePayloads(IDictionary<string, byte[]> payloads, Stream packer)
{
if (payloads?.Any() == true)
if (payloads?.Count() > 0)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, not the method, the property Count. Don't use LINQ 😄

payloads?.Count > 0

{
MessagePackBinary.WriteMapHeader(packer, payloads.Count);
foreach (var payload in payloads)
Expand Down
2 changes: 2 additions & 0 deletions src/Microsoft.Azure.SignalR/DependencyInjectionExtensions.cs
Expand Up @@ -4,6 +4,7 @@
using System;
using Microsoft.AspNetCore.SignalR;
using Microsoft.Azure.SignalR;
using Microsoft.Azure.SignalR.Protocol;

namespace Microsoft.Extensions.DependencyInjection
{
Expand All @@ -14,6 +15,7 @@ public static class AzureSignalRDependencyInjectionExtensions
{
if (configure != null) builder.Services.Configure(configure);
builder.Services.AddSingleton(typeof(HubLifetimeManager<>), typeof(HubHostLifetimeManager<>));
builder.Services.AddSingleton(typeof(IServiceProtocol), typeof(ServiceProtocol));
builder.Services.AddSingleton(typeof(IClientConnectionManager), typeof(ClientConnectionManager));
builder.Services.AddSingleton(typeof(IServiceConnectionManager), typeof(ServiceConnectionManager));
builder.Services.AddSingleton(typeof(IConnectionServiceProvider), typeof(ConnectionServiceProvider));
Expand Down
8 changes: 6 additions & 2 deletions src/Microsoft.Azure.SignalR/HubHost/HubHost.cs
Expand Up @@ -8,6 +8,7 @@
using Microsoft.AspNetCore.Http.Connections;
using Microsoft.AspNetCore.Http.Connections.Client;
using Microsoft.AspNetCore.SignalR;
using Microsoft.Azure.SignalR.Protocol;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;

Expand All @@ -23,14 +24,17 @@ internal class HubHost<THub> where THub : Hub
private IConnectionServiceProvider _connectionServiceProvider;
private IServiceConnectionManager _serviceConnectionManager;
private IClientConnectionManager _clientConnectionManager;
private IServiceProtocol _serviceProtocol;
private readonly string _name = $"HubHost<{typeof(THub).FullName}>";

public HubHost(IServiceConnectionManager serviceConnectionManager,
public HubHost(IServiceProtocol serviceProtocol,
IServiceConnectionManager serviceConnectionManager,
IClientConnectionManager clientConnectionManager,
IConnectionServiceProvider connectionServiceProvider,
IOptions<ServiceOptions> options,
ILoggerFactory loggerFactory)
{
_serviceProtocol = serviceProtocol;
_serviceConnectionManager = serviceConnectionManager;
_clientConnectionManager = clientConnectionManager;
_connectionServiceProvider = connectionServiceProvider;
Expand Down Expand Up @@ -71,7 +75,7 @@ private Uri GetServiceUrl()
private ServiceConnection CreateServiceConnection(Uri serviceUrl, HttpOptions httpOptions)
{
var httpConnection = new HttpConnection(serviceUrl, HttpTransportType.WebSockets, _loggerFactory, httpOptions);
return new ServiceConnection(_clientConnectionManager, serviceUrl, httpConnection, _loggerFactory);
return new ServiceConnection(_serviceProtocol, _clientConnectionManager, serviceUrl, httpConnection, _loggerFactory);
}
}
}