When I came back to Citrix in 1999, there was a project started later that year to support an object model for the ICA Client. There was already a plug-in and ActiveX control available but there was also a need to have something more consistent with COM so the ICA Client could also be embedded inside things like Microsoft Office.
The concept was good but the end result would prove a bit elusive.
We were looking for something to help modernize the client and make it possible to control and get feedback from the client. COM was the obvious choice based on Microsoft standards. We also decided to use ATL to support the framework interally. We also decided to modularize the components interally so it would be possible to either use COM or support something like Mozilla.
The simplest way to explain it is that we were looking to give the client three basic characteristics for the interface. We wanted to support methods, properties, and events. Methods are great for scripting the client’s actions. Properties control how the connection is formed. Events are feedback about how the connection is going.
I worked on it from 1999 to mid 2003 (with some other small projects along the way). It was evolved over the four years to support far more than what most people would currently use. For example, it is possible with ICO to support writing a virtual channel driver. In a way, the ICA Client Object (ICO) is a wrapper around how the client works. Its pinnacle was supporting what was called ‘Headless’ mode which allowed for companies like Mercury Interactive to write software to be able to test the load of a Citrix server. Anil Roychoudhry was the lead of the project (I’m pretty sure about that).
I regret that I did not find a better way to promote the use of ICO in the field. It would have been more important to teach people about how to use it than to continue to add new features at the end. I suspect I felt more comfortable with adding more than discovering how to reach the developers.
I still get requests for help from time to time internally about ICO. It has been more than three years since I worked on the project. At most, the project had two developers working on ICO. It was great working with Jonathan and I learned much about a better coding standard. Thanks Jonathan (if you happen to read this!).
ICO really hasn’t progressed much since 2003. There hasn’t been much focus on it. That’s probably okay. The only area that I see coming up more commonly now is support for .net and other scripting models. Oh, and it sure would have helped to have built more examples!