First, we need some functions to determine the status of an AIM user. I do this using the http://www.imwrapper.com/ service to get the status, based on the protocol.
The first function figures out if the user is online:
1protected bool GetIMStatus(string screenName, string protocol) 2
{ 3
protocol = protocol.ToLower(); 4
5
string imStatusUrl = "http://www.imwrapper.com/" + protocol + "/" 6
+ screenName + "/standard"; 7
8
System.Net.HttpWebRequest imStatusRequest = 9
(System.Net.HttpWebRequest) 10
System.Net.WebRequest.Create(imStatusUrl); 11
12
imStatusRequest.Accept="image/*"; 13
imStatusRequest.AllowAutoRedirect = true; 14
15
System.Net.HttpWebResponse imStatusResponse = 16
(System.Net.HttpWebResponse) imStatusRequest.GetResponse(); 17
18
return imStatusResponse.Headers["Content-Disposition"]. 19
Contains("online.png"); 20
}
GetIMStatus takes the following parameters, and returns a boolean, where true indicates that the user is online.
a protocol:
Note that these values are case-insensitive.
If that’s all you want to do, then you only need that function. But I wanted a snap-in, linked status indicator.
So, we need a function to display something based on this information. A big part of this will be the link location. Most protocols support a way to launch a message window to a user via a link, so we’ll need to construct a link for each protocol.
1protected string GetIMStatusString(string screenName, string protocol) 2
{ 3
return GetIMStatusString(screenName, protocol, "standard"); 4
} 5
6
protected string GetIMStatusString(string screenName, 7
string protocol, 8
string iconSet) 9
{ 10
string html = ""; 11
12
try 13
{ 14
protocol = protocol.ToLower(); 15
iconSet = iconSet.ToLower(); 16
17
string imStatusUrl = "http://www.imwrapper.com/" 18
+ protocol + "/" 19
+ screenName + "/" 20
+ iconSet; 21
22
string statusString = 23
((GetIMStatus(screenName, protocol)) ? "Online" : "Offline"); 24
string linkStart = ""; 25
string linkEnd = ""; 26
27
// jabber : xmpp:<sn> 28
// skype : skype:<sn>?chat 29
// yahoo : ymsgr:sendIM?<sn> 30
// aim : aim:goim?screenname=<sn> 31
32
switch (protocol) 33
{ 34
case "aim": 35
linkStart = "<a href=\"aim:goim?screenname=" 36
+ screenName 37
+ "\">"; 38
linkEnd = "</a>"; 39
break; 40
case "yahoo": 41
linkStart = "<a href=\"ymsgr:sendIM?" 42
+ screenName 43
+ "\">"; 44
linkEnd = "</a>"; 45
break; 46
case "jabber": 47
linkStart = "<a href=\"xmpp:" 48
+ screenName 49
+ "\">"; 50
linkEnd = "</a>"; 51
break; 52
case "skype": 53
linkStart = "<a href=\"skype:" 54
+ screenName 55
+ "?chat\">"; 56
linkEnd = "</a>"; 57
break; 58
} 59
60
html = String.Format("<img src=\"{1}\" alt=\"{0}\" " 61
+ "align=\"absmiddle\" /> {3}{0} as {2}{4}" 62
,statusString 63
,imStatusUrl 64
,screenName 65
,linkStart 66
,linkEnd 67
); 68
} 69
catch 70
{ 71
// ... 72
} 73
74
return html; 75
}
GetIMStatusString takes the following parameters, and returns the HTML for an icon for the client and status, a string describing the screen name and status, and (where possible) a link that will launch a message window to contact the screen name.
a protocol:
Note that these values are case-insensitive.
optionally, an icon set:
The string returned will render something like this:
IM: Offline
To make this code reusable, I made a custom control that can be snapped into a page. The control will render as the above status string. The source code that turns the above functions into a custom control is below. The control can be downloaded at the bottom of the page.
1<%@ Control Language="C#" %> 2
3
<script language="C#" runat="server"> 4
private string _screenName = ""; 5
private string _protocol = "aim"; 6
private string _iconSet = "standard"; 7
8
public string ScreenName 9
{ 10
get { return _screenName; } 11
set { _screenName = value; } 12
} 13
14
public string Protocol 15
{ 16
get { return _protocol; } 17
set { _protocol = value; } 18
} 19
20
public string IconSet 21
{ 22
get { return _iconSet; } 23
set { _iconSet = value; } 24
} 25
26
// [ THREE FUNCTIONS FROM ABOVE HERE ] // 27
</script> 28
29
<%= GetIMStatusString(ScreenName, Protocol, IconSet) %>
To use the control, you need two things:
The following code needs to be at the top of your page, to register the control.
1<%@ Register tagprefix="akxl" 2
Tagname="IMStatus" 3
src="/controls/IMStatus.ascx">
The next code places the control into the page output. You can also add another attribute, IconSet="<string>" to specify the optional icon set parameter. All attributes directly map to the parameters described above.
1<akxl:IMStatus id="akxlIMStatus" 2
runat="server" 3
ScreenName="ImTooSmartForMe" 4
Protocol="AIM" />
Here’s a live example of the control:



protocol
}
}
Recent Comments