© Copyright 2003
This example program is provided as is with no warranties or
Please provide feedback and share ideas for improving the program to email@example.com
Please Note: This is an evolving program and I will be updating it regularly
The purpose of this project has been to explore what type of application functionality can be implemented using the current implementations of Groove Web Services. This example also explores and develops some ideas I have on how to make a more effective user interface for interacting with team members using the Groove technologies. Frankly, I wanted to build an alternative user interface that works better for me.
Building a collaborative application using Groove Web Services (GWS) is very similar to build any other windows application. The application user interface and logic is the same as any other application. The use of Groove technology to store information and share it requires some small changes to your programming approach.
First, you need to understand that the information you are working with and sharing can be updated, added to, or deleted by other users while you are still working with it. The good news is that Groove makes it easy to build multi-user applications. The bad news is you have to handle situations where other users are changing information that you may be working with. It is straightforward to do this, but it does require some planning in your projects.
The other consideration is that currently GWS supports all interactions with information items in Discussions threads, shared calendars, and shared files. This will mean that you will want to focus your application areas on things that can be represented in one of these forms. That can cover a lot, if you are creative.
When the program first starts, I check to see if Groove is already running. This is needed since GWS will throw exceptions if Groove is not already running. The approach here is to see if there is a currently running process named Groove.
Friend Function GrooveIsRunning() As Boolean
'This will test to see if Groove is running
Dim allProcesses(), thisProcess As Process
allProcesses = System.Diagnostics.Process.GetProcesses
GrooveIsRunning = False
For Each thisProcess In allProcesses
'Find a process named Groove
If thisProcess.ProcessName = "Groove" Then
Then I start the main user interface form frmGWSAccounts. This code gets all of the accounts that are currently installed on the local PC. Then for the first account it gets all of the spaces in that account. When a user clicks on a space in the tree view, it will show all the tools that GWS will recognize. Currently this is limited to 2.5 spaces and the Files, Discussion and Calendar tools.
Here is a top level view of the user interface.
When you double click on a discussion item, it brings up my alternative discussion viewer:
This reads in the contents of a discussion view and on left it shows you the thread subjects. On the right it shows you all of the thread discussion and the replies to that item. This way you can get the full sense of the give and take in a discussion thread. Also, the view is displayed as and HTML page and is printable. Just right mouse click on the view.
The support GWS today provides for threaded discussions is pretty extensive. However a few of features in Groove’s UI do not translate through GWS. First all discussion items come across as text. My experience to date is this has not been an issue or problem in real discussions. Very few people use formatting of discussion entries where that would be an issue. The next problem is that entries that have links to other items in the Groove shared space lose those links. The last issue is that GWS does not support attachments on discussion items. That last one is a frustration but it turns out the there are only a few times that people are using attachments and when that is an issue, I just open up the discussion in the Groove UI directly.
This is gotten to be the most useful way for me to work with LOTS of spaces. I will describe this more in an update later this week.
Note – The Shared Files Explorer form/viewer is not yet working. I know I have a bunch of work to do here. My goal is to have that done next week.
To get the online/offline status for your contacts is a little tricky. When you first get all of the known contacts, their awareness status will show them as offline. To get the correct status you need to subscribe to the contact events for that account. This will give you updated information on the awareness status changes for your known contacts. The application needs to keep tack of the contacts and their current online/offline status.
Awareness Changes – The user selects one of their accounts and the program will start a subscription to the contact events for this account. This is done in the event handler for tvAccounts_AfterSelect. This will start the program watching for any changes to the contact status. It also releases any existing subscription to updates of the contact status for any previous account being watched.
After the subscription is started, the program then goes through and gets all the known contacts for this account. This is done on a background thread so the rest of the UI can proceed while contacts information is being gathered. The known contact information is stored in a hash table. The program uses the contact URI as the key for entries in the hash table, since these are unique in Groove. This hash table of contacts is updated each time there is a contact event change. Currently the program polls Groove for any contact changes every 750 milliseconds. This is done in Time1_Tick event handler. Any changes are processed and the hash table is updated to reflect the changed state. From this cache, the program can then get an accurate reading of the online/offline status for each member of a space.
· Improved how the dashboard handles spaces with tools that have a problem in GWS
· Fixed how to correctly handle the online – offline awareness status for members of the space.