1. Introduction + WebAPI for map tiles
2. Visual Studio Online
3. Loading data to Vector Tiles
4. Rendering image tiles
5. CDN Caching for map tiles
6. Adding Units and Basic Interaction
7. Attacks and Explosions
8. Performance Checkpoint
9. Bootstraping
10. Real-time with SignalR
11. Persistence and Authentication
12. Scaling up the loader process
13. Polishing the experience
2. Visual Studio Online
3. Loading data to Vector Tiles
4. Rendering image tiles
5. CDN Caching for map tiles
6. Adding Units and Basic Interaction
7. Attacks and Explosions
8. Performance Checkpoint
9. Bootstraping
10. Real-time with SignalR
11. Persistence and Authentication
12. Scaling up the loader process
13. Polishing the experience
Work-in-progress: https://site-win.azurewebsites.net/
On this iteration I'm adding real-time notifications to the unit movement using the (awesome) SignalR library.
The idea for this will be simple: if a player moves a unit on his browser window all the others players will see that unit move in realtime on their browsers.
I've created an ultra-simple video demoing it. I've opened three separate browser windows: one with Chrome, Firefox and Safari. The movement of the units should be synchronised in real-time across the various browsers, regardless of the one that triggered the movement.
So, how was this setup? Easy as pie.
1. Add SignalR NuGet package
install-package Microsoft.AspNet.SignalR
2. Initialise SignalR on the Startup routine of ASP.NET MVC 5 (on previous versions it's slightly different)
public partial class Startup { public void Configuration(IAppBuilder app) { app.MapSignalR(); } }3. Create a Hub
My hub will be ultra simple. It will simply receive a movement notification and share it with all the other SignalR clients as is.
public class UnitHub : Hub { public void SetPosition(dynamic unitdata) { Clients.Others.unitUpdated(unitdata); } }
4. Create Javascript code both to send a SignalR message when the player moves a unit or when a notification of another player moving a unit has been received.
//code to receive notification from server unitUpdated = function (unit) { // (...) }; // Code to submit to server server.setPosition(unit);5. (Optional) If you're using Azure, you should enable WebSockets on your website.
And that's it.
Please note that I haven't yet added persistence nor support for different users. Thus, everyone will be moving the same units. Anyway, I don't have that many page views on my blog for it to be a problem :)
So, what's next?
- Adding a database to persist the units position
- Adding users, each with his own units.
- Authentication with Facebook, Twitter, Google, Windows, Email