Any Kronos client will be available to use three basic commands Insert Get Delete In future I want to add few more, like Count and GetKeys. Each of requests to the server serialized to binary form is preceded by few bytes of meta-data, including RequestType. In code its represented as a Request class, which in addition to type has two generic methods. At the beginning they might look Read more about Kronos – Creating a base request[…]
Packing and publishing nuget from standard .NET project is very simple. Create or generate nuspec file and run
The appearance of the Core framework and project.json file caused the a little change. Due to historical reason, in .NET Core we have two command line interfaces with utilities for packages.
- DNU – DNX utility, used in project < RC2
- Dotnet – the newest CLI, combined tool composed of DNX and DNU
In the third post about XGain I would like to say something about the heart of server. TcpListener is a great class to build server. It has a normal and async methods, you can choose between Socket and TcpClient. Unfortunately writing this same logic for new project might be boring. The most common steps:
- choose entry port
- create new instance of TcpListener
- start listening
- create a main loop for processing
- handle new request
Previously I’ve described the most popular ways to deal with TCP/IP connection in .NET framework. This time I want to show you one of the most important interface in the XGain server – ISocket.
Network layer is really hard to test and debug. XGain works on the Socket class level and this class doesn’t have an interface. That means testing of any component references to this type is really hard, but everything is possible. Few months ago I found a good podcast with Paweł Klimczyk and Maciej Aniserewicz about mocking frameworks. In full .NET Framework we can use TypeMock to create a fake call to the any method from any type. Unfortunately, this library does not support .NET Core platform.
Almost three months ago I’ve started working on Kronos with only one idea – make it as good as I can and have fun. In the past I had the pleasure to work only with high level networking – HTTP(S). Network layer in distributed systems is one of the most sensitive and in case of project with requirement for high performance, HTTP is not the best idea.
New plugin for Visual Studio 2015 – Microsoft ASP.NET and Web Tools (download here) provides new templates for .NET Core – Console Application and Class Library. These templates are the base structure for all multi-platform projects in .NET.
Let’s start with executable type – Console Application. By default this one contains three files – AssemblyInfo.cs, Program.cs and project.json. Program file provides an entry point for application – just like normal static Main method in .NET Framework. The last one, project.json file is more interesting – it is the successor for old app.config. In this file you can find dependencies, .NET Core frameworks and nuspec information. […]
I’ve spent some time on searching for good Continuous Integration (CI) for Kronos. My requirements were simple:
- free for Open Source project
- support for .NET Core (DNX runtimes)
- easy configuration
- good connection with github
ASP.NET team uses AppVeyor. My decision was quite fast – let’s play with this CI.
Since last year I was thinking how to increase my skills with multithreading programming and distributed systems. I really like these topics – after reading few books I still want to learn more. With current growth rate of cloud platforms these two skills could be really desirable in the labor market. Also I never had enough experience with operating system other than Windows. In next May I will be completing my Bachelors degree, so it would be great to combine these ideas with my engineer’s thesis. After quick technology research and few conversations with another programmers – I’ve decided what I want to write – distributed cache system, available on Linux – Kronos. Sounds reasonable, yes?
Except one thing – I want to do it with .NET.