Mission Control is the name of ACI's distributed enterprise application for managing installations, users, and training sessions. Mission Control was responsible for keeping machines up to date with the latest builds and synchronizing all realtime data across machines. Finally, Mission Control acted as our statistical processor pre and post SQL insertion. When I originally arrived at ACI, Mission Control was a proof of concept built in Delphi. This implementation relied on a proprietary TCP messaging protocol for all connectivity to its clients. Its architecture was primarily server-client. After reviewing the goals of the project, I scrapped the Delphi prototype and built the first .NET Framework version of Mission Control. In this first iteration of Mission Control, we simply ported everything to .NET and WinForms, while retaining the TCP messaging protocol previously in place. This technology refactor allowed ACI to continue using its current UnrealEngine 2.5 prototype as well as shift from a static statistics output system to a direct SQL database. After our delivery to DRDC and the initial phase of the EAI completed, the next evolution of Mission Control was to make use of .NET Remoting, mixed code wrappers, and a homebrew object relational mapper. Mission Control still retained the server-client paradigm, but had its protocol replaced entirely with .NET Remoting procedures. For the database interactions, I wrote a down and dirty ORM through .NET reflection that allowed our developers to use a more object oriented approach with the codebase and the database interactions. Mixed code posed a new and challenging shift for our team as we learned the ups and downs of how the CLR really works. This included marshaling data and properly loading and unloading Application Domains versus native memory spaces. Mission Control was evolving into a very complex application. Once we completed our second phase delivery to HIARNG, Mission Control was scheduled to take another step in its metamorphosis. This time around we shifted the entire paradigm to a Service Oriented Architecture with Windows Communication Foundation. This paradigm shift greatly increased the reliability and flexibility of the product overall. The UI was also overhauled into Windows Presentation Foundation. Finally, our homebrew ORM was superseded by NHibernate. Once all these pieces were in place, Mission Control became a very reliable enterprise application that our customers now use to connect multiple installation sites and run exercises. Over the course of Mission Control's development, we shifted around many web based technologies. We initially has a statistics system from the old Delphi prototype which simply created static HTML pages for the end user. That then evolved into generating ASP.NET pages from an SQL database. Which finally evolved into live statistics which could be monitored by the use of AJAX. We are currently updating this system to an Apache/Python/Django framework as ASP.NET became too unwieldy for our development speeds. Almost all of the Mission Control core was written by me. This is where I honed my C# skills covering areas such as remoting, WCF, generics, reflection, and CLR enabled native assemblies. |