Version 6.9.2 of The Server Framework was released today.

This release includes changes to support Visual Studio 2017 (15.9), Visual Studio 2019 (16.2), design changes to the PerfMon tools library to improve performance and some bug fixes.
The Linux port of The Server Framework is going really well and we now have investigated both libuv and epoll back ends. There's still a lot of work to do before this will be something that we're releasing generally but the client's that are working with us on this are really excited by how well it's going.

The massively modernised, and far in the future 7.0 release of The Server Framework will include the Linux changes and our 6.9.2 maintenance release is due for release in Q2; it's been a while since we last had a release but there have been no bugs reported and so there's not really much to release as most of the effort is going into the stuff that will eventually become the 7.0 release.

Our work with the large American postal company that will remain nameless is about to go into an extended pilot phase and we're working on last minute adjustments so that the new system plays nicely with the existing system that it will eventually be replacing.

The work with our Industrial Control Client in Germany is going really well. Phase 1 is complete and we've replaced the networking layer in one of their key pieces of software and refactored away the accumulated cruft from 30 years of maintenance. We have a shiny new testing system that we've written to help us compare the old message flow to the new message flow to ensure that we haven't changed anything that we shouldn't. This intercepts the network traffic and deblocks the messages for given test scenarios and then compares to the previous version of the code. Great for hassle free regression testing.

In summary, we're very busy doing what we love to do!

Busy, busy, busy...

We're going to be really busy for the rest of the year as we've just won a large contract with our Industrial Control Client in Germany. We'll be working on the systems that we've worked on for them before, adding new functionality and integrating The Server Framework into some applications that we haven't worked on before.

The Linux port of The Server Framework is going really well and we now have a server and client system running on Linux using our custom reliable UDP network layer. This integrates with the .Net Core integration we've been doing for the same client. The Linux work will definitely make its way into the main framework at some point; do get in touch if you're interested in this.
We're currently working on a proof of concept Linux port of one of our more complex server systems for a client. This is interesting stuff and surprisingly easy. Most of our framework code ported pretty quickly and now runs nicely on a test Ubuntu 16.04 box as well as on Windows. We're using CLion and CMake on Linux and this has provided a surprisingly familiar environment to work in. It's very early days but things look good and I expect we'll eventually do this work again properly and roll it out as part of The Server Framework. That's a long way off at present though.

We're also playing with .NET Core. The hosting story here isn't quite as neat as with normal CLR hosting but it's possible and this work meshes nicely with the Linux work.

We've just finished a nice new development of server software for a large American postal company that will remain nameless. This system deals with managing mail sorting hardware across America.

The WebRTC work rolls on and we're looking at doing a version in Go as a reference implementation before doing a C++ version for The Server Framework.

And finally, as always, we've also been working on several new releases of The Server Framework, a 6.9.2 maintenance release and continuing work on what could become massively modernised 7.0 release (which, of course, keeps slipping).

Latest release of The Server Framework: 6.9.1

Version 6.9.1 of The Server Framework was released today.

This release includes changes to support Visual Studio 2017 15.5 and some bug fixes. It's required if you're using Visual Studio 2017.

C++ Tools - Deleaker


I've just purchased a license for Deleaker by Softanics. I found out about the tool from Bartek's coding blog where he writes about the tool here.

I downloaded the trial edition and it found quite a few subtle issues in some of my unit test code. Nothing too serious, but stuff that other tools have missed. The run-time overhead doesn't appear to be that great, my server tests still run at a reasonable speed and nothing fails because of the instrumentation. My virus checker (Bitdefender) hates the tool, probably due to the code injection and whatever that's required. The developer is easy to talk to and interesting in dealing with any issues that you have.

The price is a little steep, but I got a decent discount for being a reader of Bartlomiej's blog and that helped. I'm not sure I would have purchased otherwise. At the discounted price it's a useful addition to my toolbox.

C++ Tools - CppDepend - 2017 update...


I've been trying various static analysis tools on the C++ code of The Server Framework. I've now been using Resharper C++ quite regularly for over a year and I still use the Gimpel PC-Lint Plus Beta on a regular basis. I haven't used CppDepend as much, mainly because once I'd fixed the issues that it raised, and that I decided I needed to fix, I pretty much left it alone. This is possibly because I run it as an external tool and I run both Resharper and PC-Lint as fully integrated Visual Studio extensions.

Full disclosure. I have been given another CppDepend license.

As I've said before, whilst CppDepend is easy to get hold of, easy to install and "just works" I don't find it that useful. I tried installing the Visual Studio add-in this time around and found that I then had problems removing the add-in. I've no idea why and it was probably just me, but I decided to stick with the stand-alone tool.

As I said last time, I can certainly remember large enterprise clients where this kind of tool would be invaluable for management level analysis of large codebases but for a small development team of competent people it's less immediately useful. It still fills some gaps so it's still useful to me; perhaps I need to try harder with the Visual Studio add-in.

There are some nice new features to this latest edition: Smart Technical Debt estimation looks like a good way of preventing a codebase degrading over time and helping you to focus on issues that can be fixed quickly, or issues that are really complex and will take ages to fix.... Being able to navigate to types with the most technical debt is useful. I also like the idea of the Quality Gates concept. The html reporting stuff also looks useful, though I'd have to get CppDepend running on my build servers as part of the build and release process to get the best benefit from it.

All in all I like the new features but I'm still not sure that I would purchase a license for this tool but I know clients that could benefit from using it.

Latest release of The Server Framework: 6.9

Version 6.9 of The Server Framework was released today.

This release includes lots of code change due to: the removal of support for Visual Studio 2012 and the results of lots of static analysis.

VMWare bridged networking intermittently failing

This is one of those 'note to self' postings...

I have a VMWare box that uses bridged networking and has a static DHCP address that I use for a specific client's testing as a db server. Every so often the virtual machine fails to connect to the network properly and ends up with a bogus ip address. I then spend ages trying to work out what's going wrong...

This link, may help. It explains about using vmnetcfg.exe to adjust the bridged networking settings on the host machine.

The reason that the automatic bridging fails sometimes on my development box is that I have several NICs on the box. One pair are teamed and provide my internet access. Another is the 10Gb test network that I have wired back-to-back with my test server. When the test server is on and the 10Gb NIC is active the automatic bridging gets confused and the virtual machine's network connection fails.

The solution, for me, is to use vmnetcfg.exe to adjust the bridge networking settings and unselect the 10Gb NIC.

WebRTC, TLS hardening and Scalable game servers

This year is proving to be yet another busy one for us. We've continued to work with Eonic Gaming on their servers for the Turf Battles Triumphus 3D MMORPG and we have done quite a bit of work with various clients regarding hardening their TLS servers. The main focus though has been digging into WebRTC data channels.

The WebRTC work is nice, though fairly complex. It's based on lots of RFCs and the initial learning curve was pretty steep. WebRTC data channels, in themselves, are pretty simple, but they're built on a huge stack of other technologies: SCTP, DTLS, ICE, STUN, etc. Getting all of that working to the point where we get a simple "hello world" message from browser into the server and back has taken some time. There's lots of open source stuff out there but much of it needs a lot of work to understand fully as documentation, comments and naming often leaves a lot to be desired.

We're looking at producing a highly scalable implementation of WebRTC data channels from the ground up for a client who wants to add this kind of connectivity to their application servers; WebRTC is often used for peer to peer connections where both peers are browsers, our system has the server as one of the peers. Right now we're doing a custom implementation specifically for this client but eventually we expect to produce an Option Pack with a slightly more general purpose WebRTC implementation.

As always we've also been working on several new releases of The Server Framework, a 6.8.1 maintenance release and continuing work on what could become massively modernised 7.0 release.

About this Blog

I usually write about C++ development on Windows platforms, but I often ramble on about other less technical stuff...

This page contains recent content. Look in the archives to find all content.

I have other blogs...

Subscribe to feed The Server Framework - high performance server development
Subscribe to feed Lock Explorer - deadlock detection and multi-threaded performance tools
Subscribe to feed l'Hexapod - embedded electronics and robotics