Already somewhere in 2008 I had the idea to create a Chat app. that I could use directly in my home network. After I joined my first project with WPF, this technology got me completely sold. Unfortunately, due to some career moves and gaining various certifications al that remained was a small design in XAML.
Until the end of 2010 I got some more time and decided to finish the app. At that time I had discovered a similar app in VB.NET that, (unfortunately very buggy) partially contained the functionality I wanted and served as a base. Only by idea/design, certainly not the code itself.
Therefore I started with the following design decisions in mind:
- The GUI had to be in WPF and easy to install, with cool looking animations and look (in my eyes) very licked all the way.
- The GUI was not be aware of the logic behind the app. Hence the choice for a MVC pattern, if I'd do it again then I had chosen a MvvM pattern, but in base they don’t differ so much from each other. But the latter better reflects WPF and Silverlight.
- With the pattern in thought it would be easy to reuse the logic created here for my upcoming projects with a WCF service and a version in WPF and Silverlight.
- The use of UDP for the network transport to not have a continuous open channel to all PCs in the network.
- Use direct binding to the properties of the object model through the Controllers that the MVC pattern supports.
- All the style related stuff needs to be separately set up and maintainable, preferable in xaml.
Looking back at the end result this is reached in reasonable extent, the controllers send the Commands and underlying domain objects to the GUI. The network logic is well separated from the domain model and the Controllers, in addition, I have the domain model instantiated in a Globals class (actually a violation of the principle of "Loose coupling"). This because there’s always just one instance running the app. I wanted to keep this central because it reads and writes to configuration settings. Some features that I myself (obviously) really appreciate are:
- It directly customizes all text if the language is adjusted.
- It directly sees or another PC in the network is active.
- It directly sees on another PC, if the Instant Chat app. is active.
- The app has a context menu in the taskbar, something that’s not (yet) supported in WPF.
Hopefully you can discover more features yourself, that you like and/or provide feedback on what you like less or extensions for the future. Moreover, be free to share or add your own insights into the original code.