views:

295

answers:

7

It has become apparent that where I work needs, internally, a "notification system". The issue being that we are very spread out throughout multiple buildings and the bulk of the work force regularly keeps there email closed for hours at a time.

I need to create a simple way to be able to push out a message and have it "pop up" on everyones computer(or a single computer).

My first thought was to write a windows service that calls a winform/wpf app that resides on each computer that simply pops up with the message. Not sure how viable an idea that is but this is just brain-storming.

A different route, I thought, could be an app that resides in the systray on each computer that polls a db table and using the Query Notifications could pop up a message each time a new row is added. Then simply create an insanely basic app for writing a row to that table.

So, what I am asking is if any one else has walked this path. If so, how?

  • What things did you take into consideration?

  • Are either of my ideas valid starting points or are "egg and my face in perfect alignment"?

  • Is there a different way that is even simpler?

Thanks


Some simple requirements --> Must be "One Way" as I cannot give our user base a "chat" system. Must be, somewhat, hidden so as to discourage users shutting it off. A la system tray or service.

A: 

I did something like this a long time ago to coordinate smoke breaks. I simply sent a broadcast packet out on the LAN at a specific port. Worked relatively well, although since anybody could broadcast and everybody would get a popup, it got abused a lot.

Will
+1  A: 

I've never done this but I've worked in a call-centre that did use something similar and they're insanely useful. I remember once when everyone got a message saying "does anyone know Mandarin? HELP ME!!" Brilliant. (Luckily someone did.)

Anyway your ideas are perfectly fine. Personally I'd do this as a client/server application. A windows forms or WPF application that sits in the systray could link to a server using a TCP/IP duplex connection using WCF. Perhaps get the client to register to certain groups depending on the department of the PC it's sitting on.

Then when someone wants to send a message they select which group it needs to go to (or all groups), the message hits the server which sends out to all connected clients, and the WPF app on the computer receives the message and pops it up. You don't even need a database except to store the users/groups, and the message history if you need to.

Andy Shellam
A: 

This might be a ridiculous answer but have you considered implementing a chat system? It's simple to implement and well tested.

Here are some possibilities:

http://messenger.softros.com/

http://en.wikipedia.org/wiki/Instant_messaging#User_base

Article on building your own: http://www.computerworld.com/s/article/9002059/How_to_build_your_own_corporate_IM_system_

Dan Williams
Not ridiculus except that it will never get approved. :) I can't even imagine how much I would get laughed at if I suggested giving 300 Nurses and Social Workers a chat system....scary. For a different environment I would probably go this direction but here it needs to be One Way with NO (or close to No) ability for the user to shut it off. Thanks though for the response.
Refracted Paladin
+1  A: 

Wouldn't net send save you reinventing the wheel?

ZombieSheep
possibly except for our IT Manager is a security nut and when I tried this is failed repeatedly. I am assuming he has it blocked somehow....http://www.petri.co.il/msg-exe-net-send-vista.htm
Refracted Paladin
A: 

I would recommend you SPARK. We have same problem in my firm and finally decided to save time and do not reinventing the wheel and use existing (freeware) solution. SPARK does the job for us.

"Spark is an Open Source, cross-platform IM client optimized for businesses and organizations. It features built-in support for group chat, telephony integration, and strong security. It also offers a great end-user experience with features like in-line spell checking, group chat room bookmarks, and tabbed conversations."

Maciej
I implemented Spark at the last place I worked with great success. Unfortunately, in this scenario, it is not an option. I simply cannot give 300 Nurses and Social Workers IM capabilities. Also, as an aside, as nice as Spark is remember that it is written in JAVA and comes with a fairly large footprint for an IM client. When we used it, around 80 mbs per client. Compare that to 20 for Office Communicator.
Refracted Paladin
A: 

If you cannot use / install existing IMs you might thing about implementing simple "chat" protocol in your app.

It is quite easy do that base on sockets and many articles available.
For example:
http://www.codeproject.com/KB/IP/TCPIPChat.aspx
http://www.codeproject.com/KB/miscctrl/SimpleMessenger.aspx?display=Print

If you need something advanced (eg. receive historical notification, users status management etc) you can consider using openSource Jabber API:
Eg http://www.codeproject.com/KB/gadgets/googletalk.aspx

Maciej
+1  A: 

The easiest way to do this is to have a simple client on each machine polling a central service for alerts. Each alert should have a unique id so each client can deal with idempotency (you don't want the central service keeping tabs on which clients have "popped up").

I also recommend having a reasonably short lifespan for each alert, so the client only needs to know a very short list of alerts it has displayed and so if a machine was re-started, only a small history of alerts would be displayed.

With 300 subscribers, you'll want the polling to involve a nice long gap too - you don't really want 300 checks every 10 seconds - so you'll have to balance the technical desire for long gaps between checks with the business requirement to get an alert within a certain timeframe.

You could easily achieve this with a NET/TCP WCF service being polled by either a WINFORM / WPF application that is added as a start up program, or a windows service that then spawns a UI to display the notification.

Sohnee