Skip to content

Commit

Permalink
#39 Added SignalR eventing... shame I don't know AngularJS well enoug…
Browse files Browse the repository at this point in the history
…h to make it work properly.
  • Loading branch information
cdmdotnet committed Jul 15, 2017
1 parent 233937d commit 2f412f0
Show file tree
Hide file tree
Showing 24 changed files with 352 additions and 195 deletions.
3 changes: 3 additions & 0 deletions Chat/.nuget/packages.config
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,7 @@
<package id="Cqrs.Modelling" version="2.2.1373.615" />
<package id="Cqrs.Modelling" version="2.2.1374.616" />
<package id="Cqrs.Modelling" version="2.2.1375.617" />
<package id="Cqrs.Modelling" version="2.2.1376.618" />
<package id="Cqrs.Modelling" version="2.2.1378.620" />
<package id="Cqrs.Modelling" version="2.2.1379.621" />
</packages>
29 changes: 16 additions & 13 deletions Chat/Chat.Api/Chat.Api.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -56,28 +56,32 @@
<HintPath>..\packages\cdmdotnet.StateManagement.3.0.9.7\lib\net40\cdmdotnet.StateManagement.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Cqrs, Version=2.2.1375.617, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Cqrs.2.2.1375.617\lib\net40\Cqrs.dll</HintPath>
<Reference Include="Cqrs, Version=2.2.1379.621, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Cqrs.2.2.1379.621\lib\net40\Cqrs.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Cqrs.Azure.ServiceBus, Version=2.2.1375.617, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Cqrs.Azure.ServiceBus.2.2.1375.617\lib\net40\Cqrs.Azure.ServiceBus.dll</HintPath>
<Reference Include="Cqrs.Azure.ServiceBus, Version=2.2.1379.621, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Cqrs.Azure.ServiceBus.2.2.1379.621\lib\net40\Cqrs.Azure.ServiceBus.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Cqrs.Ninject, Version=2.2.1375.617, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Cqrs.Ninject.2.2.1375.617\lib\net40\Cqrs.Ninject.dll</HintPath>
<Reference Include="Cqrs.Ninject, Version=2.2.1379.621, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Cqrs.Ninject.2.2.1379.621\lib\net40\Cqrs.Ninject.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Cqrs.Ninject.Azure.ServiceBus.CommandBus, Version=2.2.1375.617, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Cqrs.Ninject.Azure.ServiceBus.CommandBus.2.2.1375.617\lib\net40\Cqrs.Ninject.Azure.ServiceBus.CommandBus.dll</HintPath>
<Reference Include="Cqrs.Ninject.Azure.ServiceBus.CommandBus, Version=2.2.1379.621, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Cqrs.Ninject.Azure.ServiceBus.CommandBus.2.2.1379.621\lib\net40\Cqrs.Ninject.Azure.ServiceBus.CommandBus.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Cqrs.Ninject.WebApi, Version=2.2.1375.617, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Cqrs.Ninject.WebApi.2.2.1375.617\lib\net45\Cqrs.Ninject.WebApi.dll</HintPath>
<Reference Include="Cqrs.Ninject.Azure.ServiceBus.EventBus, Version=2.2.1379.621, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Cqrs.Ninject.Azure.ServiceBus.EventBus.2.2.1379.621\lib\net40\Cqrs.Ninject.Azure.ServiceBus.EventBus.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Cqrs.WebApi, Version=2.2.1375.617, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Cqrs.WebApi.2.2.1375.617\lib\net45\Cqrs.WebApi.dll</HintPath>
<Reference Include="Cqrs.Ninject.WebApi, Version=2.2.1379.621, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Cqrs.Ninject.WebApi.2.2.1379.621\lib\net45\Cqrs.Ninject.WebApi.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Cqrs.WebApi, Version=2.2.1379.621, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Cqrs.WebApi.2.2.1379.621\lib\net45\Cqrs.WebApi.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.AspNet.SignalR.Core, Version=2.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
Expand Down Expand Up @@ -206,7 +210,6 @@
<Compile Include="App_Start\WebApiConfig.cs" />
<Compile Include="Code\ApiModule.cs" />
<Compile Include="Code\ChatConfiguration.cs" />
<Compile Include="Code\EventToHubProxy.cs" />
<Compile Include="Code\Startup.cs" />
<Compile Include="Controllers\ConversationsController.cs" />
<Compile Include="Controllers\AuthenticationController.cs" />
Expand Down
5 changes: 4 additions & 1 deletion Chat/Chat.Api/Code/ChatConfiguration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@ namespace Chat.Api.Code
{
using Cqrs.Configuration;
using Cqrs.Ninject.Azure.ServiceBus.CommandBus.Configuration;
using Cqrs.Ninject.Azure.ServiceBus.EventBus.Configuration;
using Cqrs.Ninject.Configuration;
// Don't remove this one
using Cqrs.Ninject.WebApi.Configuration;
using MicroServices.Configuration;
using System;
using System.Web.Http;
Expand All @@ -16,7 +19,7 @@ public static void ConfigureNinject()
{
NinjectDependencyResolver.ModulesToLoad.Add(new QueriesModule());
NinjectDependencyResolver.ModulesToLoad.Add(new AzureCommandBusPublisherModule<Guid>());
// NinjectDependencyResolver.ModulesToLoad.Add(new InProcessEventBusModule<string>());
NinjectDependencyResolver.ModulesToLoad.Add(new AzureEventBusReceiverModule<Guid>());
NinjectDependencyResolver.ModulesToLoad.Add(new ApiModule());
}

Expand Down
15 changes: 0 additions & 15 deletions Chat/Chat.Api/Code/EventToHubProxy.cs

This file was deleted.

123 changes: 14 additions & 109 deletions Chat/Chat.Api/Global.asax.cs
Original file line number Diff line number Diff line change
@@ -1,131 +1,36 @@
namespace Chat.Api
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using Code;
using Cqrs.Authentication;
using Cqrs.Configuration;
using Cqrs.Ninject.Configuration;
using Cqrs.Events;
using Cqrs.WebApi;
using MicroServices.Authentication.Entities;
using MicroServices.Authentication.Helpers;
using MicroServices.Authentication.Repositories;
using MicroServices.Conversations.Entities;
using MicroServices.Conversations.Repositories;

public class WebApiApplication : CqrsHttpApplication<string, EventToHubProxy>
public class WebApiApplication : CqrsHttpApplication<Guid>
{
protected override void ConfigureDefaultDependencyResolver()
{
DependencyResolver = NinjectDependencyResolver.Current;

bool createTestData;
if (DependencyResolver.Resolve<IConfigurationManager>().TryGetSetting("CreateTestData", out createTestData) && createTestData)
{
var authenticationHashHelper = DependencyResolver.Resolve<IAuthenticationHashHelper>();
var userRepository = DependencyResolver.Resolve<IUserRepository>();
var credentialRepository = DependencyResolver.Resolve<ICredentialRepository>();
var conversationSummaryRepository = DependencyResolver.Resolve<IConversationSummaryRepository>();
var messageRepository = DependencyResolver.Resolve<IMessageRepository>();

var john = new UserEntity {Rsn = Guid.NewGuid(), FirstName = "John", LastName = "Smith"};
var sue = new UserEntity { Rsn = Guid.NewGuid(), FirstName = "Sue", LastName = "Wallace" };
var jane = new UserEntity { Rsn = Guid.NewGuid(), FirstName = "Jane", LastName = "Doe" };
var bill = new UserEntity { Rsn = Guid.NewGuid(), FirstName = "Bill", LastName = "Hunter" };

try
{
userRepository.DeleteAll();
}
catch { /**/ }
userRepository.Create(john);
userRepository.Create(sue);
userRepository.Create(jane);
userRepository.Create(bill);

try
{
credentialRepository.DeleteAll();
}
catch { /**/ }
credentialRepository.Create(new CredentialEntity { Hash = authenticationHashHelper.GenerateCredentialHash("john@domain.com", "john123"), UserRsn = john.Rsn, Rsn = Guid.NewGuid() });
credentialRepository.Create(new CredentialEntity { Hash = authenticationHashHelper.GenerateCredentialHash("sue@domain.com", "sue123"), UserRsn = sue.Rsn, Rsn = Guid.NewGuid() });
credentialRepository.Create(new CredentialEntity { Hash = authenticationHashHelper.GenerateCredentialHash("jane@domain.com", "jane123"), UserRsn = jane.Rsn, Rsn = Guid.NewGuid() });
credentialRepository.Create(new CredentialEntity { Hash = authenticationHashHelper.GenerateCredentialHash("bill@domain.com", "bill123"), UserRsn = bill.Rsn, Rsn = Guid.NewGuid() });

try
{
messageRepository.DeleteAll();
}
catch { /**/ }

var n = new ConversationSummaryEntity { Rsn = Guid.NewGuid(), Name = "Project Nemesis", MessageCount = 3 };
var s = new ConversationSummaryEntity { Rsn = Guid.NewGuid(), Name = "Sales", MessageCount = 5 };
var m = new ConversationSummaryEntity { Rsn = Guid.NewGuid(), Name = "Marketing", MessageCount = 7 };

var nList = new List<MessageEntity>
{
new MessageEntity{ Content = "Welcome to the project.\r\nWe'll be meeting next week on Wednesday.", UserName = john.FirstName, UserRsn = john.Rsn, DatePosted = DateTime.Today.AddHours(10).AddMinutes(37), ConversationName = n.Name, ConversationRsn = n.Rsn, Rsn = Guid.NewGuid() },
new MessageEntity{ Content = "Thanks for including me. When is the project due to be delivered to the customer?", UserName = jane.FirstName, UserRsn = jane.Rsn, DatePosted = DateTime.Today.AddHours(11).AddMinutes(07), ConversationName = n.Name, ConversationRsn = n.Rsn, Rsn = Guid.NewGuid() },
new MessageEntity{ Content = "We've got 3 weeks of development and then a 2 month time-line to deploy/install it.", UserName = sue.FirstName, UserRsn = sue.Rsn, DatePosted = DateTime.Today.AddHours(11).AddMinutes(10), ConversationName = n.Name, ConversationRsn = n.Rsn, Rsn = Guid.NewGuid() }
};

foreach (MessageEntity message in nList)
messageRepository.Create(message);

var sList = new List<MessageEntity>
{
new MessageEntity{ Content = "How are the sales figures looking Jane.", UserName = sue.FirstName, UserRsn = sue.Rsn, DatePosted = DateTime.Today.AddDays(-3).AddHours(16).AddMinutes(37), ConversationName = s.Name, ConversationRsn = s.Rsn, Rsn = Guid.NewGuid() },
new MessageEntity{ Content = "I've almost got the report finished. Should be ready tomorrow", UserName = jane.FirstName, UserRsn = jane.Rsn, DatePosted = DateTime.Today.AddDays(-2).AddHours(8).AddMinutes(37), ConversationName = s.Name, ConversationRsn = s.Rsn, Rsn = Guid.NewGuid() },
new MessageEntity{ Content = "Let's book a meeting to go over the numbers for next week.", UserName = sue.FirstName, UserRsn = sue.Rsn, DatePosted = DateTime.Today.AddDays(-2).AddHours(13).AddMinutes(22), ConversationName = s.Name, ConversationRsn = s.Rsn, Rsn = Guid.NewGuid() },
new MessageEntity{ Content = "Bill can you make a meeting later today?", UserName = john.FirstName, UserRsn = john.Rsn, DatePosted = DateTime.Today.AddHours(11).AddMinutes(17), ConversationName = s.Name, ConversationRsn = s.Rsn, Rsn = Guid.NewGuid() },
new MessageEntity{ Content = "Sure.", UserName = bill.FirstName, UserRsn = bill.Rsn, DatePosted = DateTime.Today.AddHours(11).AddMinutes(18), ConversationName = s.Name, ConversationRsn = s.Rsn, Rsn = Guid.NewGuid() }
};

foreach (MessageEntity message in sList)
messageRepository.Create(message);

var mList = new List<MessageEntity>
{
new MessageEntity{ Content = "Do you like the new logo.", UserName = sue.FirstName, UserRsn = sue.Rsn, DatePosted = DateTime.Today.AddDays(-8).AddHours(14).AddMinutes(22), ConversationName = m.Name, ConversationRsn = m.Rsn, Rsn = Guid.NewGuid() },
new MessageEntity{ Content = "It needs more blue in it", UserName = jane.FirstName, UserRsn = jane.Rsn, DatePosted = DateTime.Today.AddDays(-8).AddHours(14).AddMinutes(37), ConversationName = m.Name, ConversationRsn = m.Rsn, Rsn = Guid.NewGuid() },
new MessageEntity{ Content = "It should be bigger too.", UserName = sue.FirstName, UserRsn = sue.Rsn, DatePosted = DateTime.Today.AddDays(-8).AddHours(14).AddMinutes(45), ConversationName = m.Name, ConversationRsn = m.Rsn, Rsn = Guid.NewGuid() },
new MessageEntity{ Content = "I thought it was about right size wise.", UserName = john.FirstName, UserRsn = john.Rsn, DatePosted = DateTime.Today.AddDays(-8).AddHours(15).AddMinutes(17), ConversationName = m.Name, ConversationRsn = m.Rsn, Rsn = Guid.NewGuid() },
new MessageEntity{ Content = "I've added more blue for you Jane and made it bigger as well Sue.", UserName = bill.FirstName, UserRsn = bill.Rsn, DatePosted = DateTime.Today.AddDays(-3).AddHours(11).AddMinutes(18), ConversationName = m.Name, ConversationRsn = m.Rsn, Rsn = Guid.NewGuid() },
new MessageEntity{ Content = "Thanks Bill.", UserName = sue.FirstName, UserRsn = sue.Rsn, DatePosted = DateTime.Today.AddDays(-3).AddHours(11).AddMinutes(19), ConversationName = m.Name, ConversationRsn = m.Rsn, Rsn = Guid.NewGuid() },
new MessageEntity{ Content = "Maybe a lighter shade of blue?", UserName = jane.FirstName, UserRsn = jane.Rsn, DatePosted = DateTime.Today.AddDays(-3).AddHours(11).AddMinutes(22), ConversationName = m.Name, ConversationRsn = m.Rsn, Rsn = Guid.NewGuid() }
};

foreach (MessageEntity message in mList)
messageRepository.Create(message);

try
{
conversationSummaryRepository.DeleteAll();
}
catch { /**/ }

n.MessageCount = nList.Count;
n.LastUpdatedDate = nList.OrderByDescending(x => x.DatePosted).First().DatePosted;
s.MessageCount = sList.Count;
s.LastUpdatedDate = sList.OrderByDescending(x => x.DatePosted).First().DatePosted;
m.MessageCount = mList.Count;
m.LastUpdatedDate = mList.OrderByDescending(x => x.DatePosted).First().DatePosted;

conversationSummaryRepository.Create(n);
conversationSummaryRepository.Create(s);
conversationSummaryRepository.Create(m);
}
DependencyResolver = Cqrs.Configuration.DependencyResolver.Current;
}

protected override void ConfigureMvc()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}

#region Overrides of CqrsHttpApplication<Guid>

protected override void RegisterSignalR(BusRegistrar registrar)
{
base.RegisterSignalR(registrar);
// Start the event bus receiving messages once everything is in place.
DependencyResolver.Resolve<IEventReceiver<Guid>>().Start();
}

#endregion

protected override void Application_BeginRequest(object sender, EventArgs e)
{
base.Application_BeginRequest(sender, e);
Expand Down
10 changes: 8 additions & 2 deletions Chat/Chat.Api/Web.config
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,18 @@
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />

<add key="CreateTestData" value="true" />

<add key="Cqrs.Azure.EventBus.ConnectionString" value="Endpoint=sb://cqrstesting.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=nB62vplUZuU0DvNkaZ3v1KuDSja0Fi85HQs+SvFx1IM=" />
<add key="Cqrs.Azure.CommandBus.ConnectionString" value="Endpoint=sb://cqrstesting.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=nB62vplUZuU0DvNkaZ3v1KuDSja0Fi85HQs+SvFx1IM=" />
<add key="Cqrs.Azure.EventBus.PublicEvent.TopicName" value="Cqrs.Chat.EventsBus-Local" />
<add key="Cqrs.Azure.EventBus.PrivateEvent.TopicName" value="Cqrs.Chat.EventsBus-Local.Private" />
<add key="Cqrs.Azure.CommandBus.PublicEvent.TopicName" value="Cqrs.Chat.CommandBus-Local" />
<add key="Cqrs.Azure.CommandBus.PrivateEvent.TopicName" value="Cqrs.Chat.CommandBus-Local.Private" />
<add key="Cqrs.Azure.EventBus.PublicEvent.TopicName.SubscriptionName" value="API" />

<add key="Cqrs.WebApi.AuthenticationTokenType" value="Guid" />
<add key="Cqrs.SqlDataStore.ConnectionStringName" value="DataStore" />
<add key="Cqrs.SqlEventStore.ConnectionStringName" value="EventStore" />
<add key="Cqrs.MessageBus.BlackListProcessing" value="false" />
</appSettings>
<connectionStrings>
<add name="DataStore" connectionString="Data Source=.\MSSQLSERVER2014;Initial Catalog=Chats;Integrated Security=True;Connection Timeout=30;" providerName="System.Data.SqlClient" />
Expand Down
13 changes: 7 additions & 6 deletions Chat/Chat.Api/packages.config
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,13 @@
<package id="cdmdotnet.Performance" version="1.0.5.8" targetFramework="net46" />
<package id="cdmdotnet.StateManagement" version="3.0.9.7" targetFramework="net46" />
<package id="CommonServiceLocator" version="1.0" targetFramework="net46" />
<package id="Cqrs" version="2.2.1375.617" targetFramework="net46" />
<package id="Cqrs.Azure.ServiceBus" version="2.2.1375.617" targetFramework="net46" />
<package id="Cqrs.Ninject" version="2.2.1375.617" targetFramework="net46" />
<package id="Cqrs.Ninject.Azure.ServiceBus.CommandBus" version="2.2.1375.617" targetFramework="net46" />
<package id="Cqrs.Ninject.WebApi" version="2.2.1375.617" targetFramework="net46" />
<package id="Cqrs.WebApi" version="2.2.1375.617" targetFramework="net46" />
<package id="Cqrs" version="2.2.1379.621" targetFramework="net46" />
<package id="Cqrs.Azure.ServiceBus" version="2.2.1379.621" targetFramework="net46" />
<package id="Cqrs.Ninject" version="2.2.1379.621" targetFramework="net46" />
<package id="Cqrs.Ninject.Azure.ServiceBus.CommandBus" version="2.2.1379.621" targetFramework="net46" />
<package id="Cqrs.Ninject.Azure.ServiceBus.EventBus" version="2.2.1379.621" targetFramework="net46" />
<package id="Cqrs.Ninject.WebApi" version="2.2.1379.621" targetFramework="net46" />
<package id="Cqrs.WebApi" version="2.2.1379.621" targetFramework="net46" />
<package id="EnterpriseLibrary.Common" version="5.0.505.0" targetFramework="net46" />
<package id="EnterpriseLibrary.WindowsAzure.TransientFaultHandling" version="5.1.1212.0" targetFramework="net46" />
<package id="Microsoft.AspNet.Cors" version="5.0.0" targetFramework="net46" />
Expand Down
9 changes: 5 additions & 4 deletions Chat/Chat.MicroServices/Chat.MicroServices.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,12 @@
<HintPath>..\packages\cdmdotnet.StateManagement.3.0.9.7\lib\net40\cdmdotnet.StateManagement.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Cqrs, Version=2.2.1375.617, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Cqrs.2.2.1375.617\lib\net40\Cqrs.dll</HintPath>
<Reference Include="Cqrs, Version=2.2.1379.621, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Cqrs.2.2.1379.621\lib\net40\Cqrs.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Cqrs.Ninject, Version=2.2.1375.617, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Cqrs.Ninject.2.2.1375.617\lib\net40\Cqrs.Ninject.dll</HintPath>
<Reference Include="Cqrs.Ninject, Version=2.2.1379.621, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Cqrs.Ninject.2.2.1379.621\lib\net40\Cqrs.Ninject.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
Expand Down Expand Up @@ -103,6 +103,7 @@
<Compile Include="Conversations\Entities\ConversationSummaryEntity.cs" />
<Compile Include="Conversations\Events\ConversationStarted.cs" />
<Compile Include="Conversations\Events\CommentPosted.cs" />
<Compile Include="Conversations\Events\Handlers\ConversationStartedEventHandler.cs" />
<Compile Include="Conversations\Events\Handlers\CommentPostedEventHandler.cs" />
<Compile Include="Conversations\Repositories\MessageRepository.cs" />
<Compile Include="Conversations\Repositories\IMessageRepository.cs" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
/// </summary>
[Serializable]
[DataContract]
[NotifyEveryoneEventAttribute]
public class CommentPosted : IEvent<Guid>
{
#region Implementation of IEvent
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
/// </summary>
[Serializable]
[DataContract]
[NotifyEveryoneEventAttribute]
public class ConversationStarted : IEvent<Guid>
{
#region Implementation of IEvent
Expand Down
Loading

0 comments on commit 2f412f0

Please sign in to comment.