Monthly Archives: January 2013

SignalR Online Counter Sample


SignalR is a web technology for building real time ASP.NET web applications. SignalR is an open source project which simplifies the complicated tasks of creating bidirectional communication between clients and server. SignalR is founded on top of WebSockets, as well as other similar technologies.

As you probably know WebSockets introduced a new way to communicate between server and clients, and it is specified by the HTML5 API specification. When it is available SignalR will use this technology, otherwise it will use what is supported by your system. SignalR also provides a high-level API for server communication to client RPC (call JavaScript functions in clients’ browsers from server-side .NET code) in ASP.NET applications, as well as adds useful hooks for connection management, e.g., connect/disconnect events, grouping connections, authorization. More information about SignalR can be found on the official web site for .

For this post I have implemented a very simple SignalR Web Application which counts how many users are online, so it is called Online Counter. Online Counters are a very popular component for the web.

So let’s start with the implementation.

  1. Open Visual Studio 2012, and create new Empty Web Application called OnlineCounter.

The first thing we will do is adding SignalR reference for the clients (JavaScript files) and the Server (.NET Components).

2. So open NuGet Manager console and input the following command: Install-Package Microsoft.AspNet.SignalR –Pre

After we added SignalR references, we are implementing Server side of the SignalR HitCounter Web Application.

3. Add a new class named HitCounter.

The HitCounter class must be derived from the Hub. More info about Hub and other SignalR components you can find on the .

The implementation for the HitCounter class is shown below:

public class HitCounter : Hub
{

 private static int clientCounter = 0;

 public void Send()
 {
 string message = "";
 // Call the recalculateOnlineUsers method to update clients
 if(clientCounter<2)
 message = string.Format("Currently {0} user is online.",clientCounter);
 else
 message = string.Format("Currently {0} users are online.", clientCounter);

 Clients.All.recalculateOnlineUsers(message);
 }

 ///
/// register online user
 ///
 ///
 public override System.Threading.Tasks.Task OnConnected()
 {
 clientCounter++;
 return base.OnConnected();
 }

 ///
/// unregister disconected user
 ///
 ///
 public override System.Threading.Tasks.Task OnDisconnected()
 {
 clientCounter--;
 return base.OnDisconnected();
 }
}

As you can see from the source code, we have override two virtual methods when user is reach the page, and also when the user live the page. The Send method is responsible to send message to all available clients.

We need also to implement Global Application Class to register this hub.

4. Add Global Application Class in to your project, and register MapHubs, as picture shows below.

The following code implementation shows how to register Hub in Global App Class.

public class Global : System.Web.HttpApplication
{

    protected void Application_Start(object sender, EventArgs e)
    {
        // Register the default hubs route: ~/signalr/hubs
        RouteTable.Routes.MapHubs();
    }
//rest of the implememtation.....

After we implemented Services side of SignalR, we need to implement client side.

5. Add new html web page in to project.

6. Include standard set of JavaScript files necessary for SignalR client to run.

<!--Script references. -->
<!--Reference the jQuery library. -->
<script type="text/javascript" src="Scripts/jquery-1.6.4.min.js"></script><!--Reference the SignalR library. --><script type="text/javascript" src="Scripts/jquery.signalR-1.0.0-rc2.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script type="text/javascript" src="/signalr/hubs"></script>

7. Send Notification to Server that the new User is reached the page.
8. Implemet JavaScript code to receive recalculateOnlineUser event sent from server.

    $(function () {

        // Declare a proxy to reference the hub.
        var counter = $.connection.hitCounter;

        // register online user at the very begining of the page
        $.connection.hub.start().done(function () {
            // Call the Send method on the hub.
            counter.server.send();
        });

        // Create a function that the hub can call to recalculate online users.
        counter.client.recalculateOnlineUsers = function (message) {

            // Add the message to the page.
            $('paragraph').text(message);
        };

    });

9. Compile and run the code. Open two Browser Windows. You can see that SignalR has counted two online users.

Source code for this blog post demo you can find below.

Matrakci Calculator – my new Windows Phone app


Find this application on Windows Phone Marketplace at this location: 

If you want to play online this calculator right now, check this . It is described all you want to know about Matrakci and Lattice multiplication as well.

about_matrakci

During holidays I was working on a small Windows Phone app. The application simulates how people performed multiplication more than 500 years ago. Before 500 years, people didn’t have devices we have today, so it was pretty complicated to calculate how much is e.g. 2345*6542. Those days, one of the discovered devices was Napier Bones, which could perform multiplication of pretty big numbers (with 2 or more digits). The device uses very clever method for multiplication, discovered 50 years before Napier constructed his Abacus. A recent study of  the book, “Support of arithmetic in propositions of all magnitudes” (org. “Umdet-ul Hisab”) revealed an unknown fact that Matrakci had invented this genuine multiplication method. Nasuh Maktrakci was 16th century Ottoman mathematician, teacher, historian, geographer, cartographer, swordmaster, and miniaturist of Bosniak origin.
Currently application is preparing for sumbiting to marketplace, but there is a web silvelright version of the application which you can taste now. Just go to and taste this very clever method for multiplication.

Get every new post delivered to your Inbox.

Join 672 other followers