Asp.net web Chat application
Chat web application in asp.net programming :
Chat application is very popular for any web site .as we see
in social service web site the chat application is all wage present where .so the crease of chat application
is more than other application .now here we discuss how to create a chat application
or chatting web site .i think it help you .
It is very easy by .net ,there are some steps.
For creating a chat application on asp.net there are
fallowing thing you need .As fallows:-
1. Create a web site in asp.net.
2. Create a handler (that is use to handle chat flow and
data flow).
3. Create a chat room
in xml if u does not want to connect database.
4. Create .aspx from for design chat look (user end form
where user play chatting ).
5 create .aspx.cs for coding sport to .aspx from. (Code in asp.net).
Know here we create code one by one ………………………….
1.
Create Handler(XHandle.cs) in App_code folder because
it is a class file .and you know that all
class files assemble into App_Code folder in asp.net Programming.
Code of Xhandle.cs (C# code Asp.net web Chat application):
using
System;
using
System.Data;
using
System.Configuration;
using
System.Linq;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.HtmlControls;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Xml.Linq;
using
System.Collections.Generic;
public class XHandle
{
private string _path;
private string _xPageName;
private string _FullPath;
private XDocument _xDoc;
private bool _xDocCreated;
private XElement _usersRoot;
private int _onlineUsers;
public XHandle(string _path)
{
this._path
= _path;
this._xDocCreated
= false;
this._xPageName
= "Default";
this._FullPath
= this._path + @"\"
+ this._xPageName + ".xml";
this._onlineUsers
= 0;
//Check the
xml page if already exist
LoadXPage();
//or create
it if it doesnt
if
(!_xDocCreated)
{
CreateXPage();
}
}
public
XHandle(string _path, string
ChatRoomName)
{
this._path
= _path;
this._xDocCreated
= false;
this._xPageName
= ChatRoomName;
this._FullPath
= this._path + @"\"
+ this._xPageName + ".xml";
//Check the
xml page if already exist
LoadXPage();
//or create
it if it doesnt
if
(!_xDocCreated)
{
CreateXPage();
}
}
private void CreateXPage()
{
_xDoc = new
XDocument();
XDeclaration
dec = new XDeclaration("1.0", "utf-8",
"yes");
_xDoc.Declaration = dec;
_usersRoot = new
XElement("users");
_xDoc.Add(_usersRoot);
_xDoc.Save(_FullPath);
_xDocCreated = true;
}
private void LoadXPage()
{
try
{
_usersRoot = XElement.Load(_FullPath);
_xDocCreated = true;
}
catch
{
_xDocCreated = false;
}
}
public void Say(string
userName, string msg, DateTime
dateTime)
{
XElement
user = new XElement("user");
XElement
elementName = new XElement("name", userName);
XElement
elementLastMsg = new XElement("message", msg);
XElement
elementDate = new XElement("date", dateTime.ToString());
user.Add(elementName);
user.Add(elementLastMsg);
user.Add(elementDate);
_usersRoot.Add(user);
_usersRoot.Save(_FullPath);
}
public void Join(string
userName, DateTime dateTime)
{
string
systemMsg = userName + " joined chat
room.";
this.Say(userName,
systemMsg, dateTime);
}
public void Leave(string
userName, DateTime dateTime)
{
var
user = from o in
_usersRoot.Elements("user")
where
(string)o.Element("name").Value
== userName
select
o;
user.Remove();
_usersRoot.Save(_FullPath);
}
public List<string>
GetOnlineNames()
{
List<string> names = new
List<string>();
var
users = (from o in
_usersRoot.Elements("user")
select
o).Distinct();
foreach
(var user in
users)
{
if
(!names.Contains(user.Element("name").Value))
{
names.Add(user.Element("name").Value);
}
}
_onlineUsers = names.Count;
return
names;
}
public int GetNumberOfOnlines()
{
var
users = (from o in
_usersRoot.Elements("user")
select
o).Distinct();
List<string> names = new
List<string>();
foreach
(var user in
users)
{
if
(!names.Contains(user.Element("name").Value))
{
names.Add(user.Element("name").Value);
}
}
if
(names.Count > 0)
{
_onlineUsers = names.Count;
return
names.Count;
}
_onlineUsers = 0;
return
0;
}
public List<string>
GetMessagesHistory()
{
List<string> messages = new
List<string>();
var
users = (from o in
_usersRoot.Elements("user")
where
o.Element("message").Value != string.Empty
orderby
DateTime.Parse(o.Element("date").Value) ascending
select
o).Distinct();
foreach
(var user in
users)
{
string
fullString = user.Element("name").Value
+ " : " + user.Element("message").Value;
if
(!messages.Contains(fullString))
{
messages.Add(fullString);
}
}
return
messages;
}
}
2.Create Chat room in xml if you does not use data base:
ChatRoom.xml
<?xml version="1.0" encoding="utf-8"?>
<users />
3. Now create .aspx from for design (user end code )
Code of .aspx
<%@ Page Language="C#"
AutoEventWireup="true"
CodeFile="ChatRoom.aspx.cs"
Inherits="ChatRoom"
%>
<%@ Register assembly="Anthem"
namespace="Anthem"
tagprefix="anthem"
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD
XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled
Page</title>
<style type="text/css">
.style1
{
width:
62%;
}
.style2
{
width:
102px;
}
.style3
{
width:
333px;
}
.style4
{
width:
102px;
height:
357px;
}
.style5
{
width:
333px;
height:
357px;
}
.style6
{
height:
357px;
width:
280px;
}
#Text1
{
height:
36px;
width:
183px;
}
.style7
{
width:
280px;
}
</style>
</head>
<body onunload="Leave(); return false;">
<script type="text/javascript">
function
Leave()
{
Anthem_InvokePageMethod('Leave', null, null);
}
</script>
<form id="form1" runat="server" defaultbutton="ButtonSend">
<div>
<table class="style1">
<tr>
<td class="style2">
<anthem:Label ID="LabelUserName" runat="server">
</anthem:Label>
<anthem:Label ID="Label1" runat="server">
User
Name:</anthem:Label>
</td>
<td class="style3">
<anthem:TextBox ID="TextBoxName"
runat="server"
Height="37px"
Width="381px"></anthem:TextBox>
</td>
<td class="style7">
<anthem:Button ID="ButtonJoin" runat="server" Height="42px"
onclick="ButtonJoin_Click" Text="Join" Width="91px"
/>
</td>
</tr>
<tr>
<td class="style2">
</td>
<td class="style3">
<anthem:Label ID="LabelError" runat="server" AutoUpdateAfterCallBack="True"
UpdateAfterCallBack="True"></anthem:Label>
</td>
<td class="style7">
</td>
</tr>
<tr>
<td class="style4">
</td>
<td class="style5">
<anthem:ListBox ID="ListBox2" runat="server" Height="352px" Width="385px"
AutoUpdateAfterCallBack="True">
</anthem:ListBox>
</td>
<td class="style6">
<anthem:Timer ID="Timer1" runat="server">
</anthem:Timer>
<anthem:ListBox ID="ListBox1" runat="server" Height="352px" Width="191px"
AutoUpdateAfterCallBack="True" TextDuringCallBack="Loading...">
</anthem:ListBox>
</td>
</tr>
<tr>
<td class="style2">
</td>
<td class="style3">
<anthem:TextBox ID="TextBoxType2" runat="server" Height="37px" Width="390px"></anthem:TextBox>
</td>
<td class="style7">
<anthem:Button ID="ButtonSend" runat="server" Height="41px"
onclick="ButtonSend_Click" Text="Send" Width="90px"
/>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
4. Create back end code of .aspx file (.aspx.cs)
Code of .aspx.cs file
using
System;
using
System.Collections;
using
System.Configuration;
using
System.Data;
using
System.Linq;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.HtmlControls;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Xml.Linq;
using
System.Collections.Generic;
public partial class ChatRoom : System.Web.UI.Page
{
XHandle
xmll;
List<string> names;
List<string> msgs;
private delegate void AsyncCallingNames();
private delegate void AsyncCallingMessages();
AsyncCallingNames
callerNames;
AsyncCallingMessages
callerMessages;
protected void Page_Load(object
sender, EventArgs e)
{
Anthem.Manager.Register(this);
xmll = new
XHandle(Server.MapPath("App_Data"), "FirstChatRoom");
//Get chat
room name from user or chat admin
int x =
xmll.GetNumberOfOnlines();
if
(Session["userName"] != null)
{
LabelError.Text = "Online, Users Online: " + x.ToString();
}
else
{
LabelError.Text = "Offline, Users
Online: " + x.ToString();
}
Timer1.Interval = 2;
//I set it to
1 second, and it wroked very well
Timer1.Tick += new
EventHandler(Timer1_Tick);
callerNames = new
AsyncCallingNames(this.RefreshListNames);
callerMessages = new AsyncCallingMessages(this.RefreshMessages);
}
void
Timer1_Tick(object sender, EventArgs e)
{
if
(Session["userName"] != null)
{
IAsyncResult
resultN = callerNames.BeginInvoke(null, null);
if
(!resultN.IsCompleted)
{
callerNames.EndInvoke(resultN);
}
IAsyncResult
resultM = callerMessages.BeginInvoke(null, null);
if
(!resultM.IsCompleted)
{
callerMessages.EndInvoke(resultM);
}
TextBoxType2.Focus();
}
else
{
Timer1.StopTimer();
TextBoxType2.Text = "You have to join with a name first..";
}
}
private void RefreshListNames()
{
ListBox1.Items.Clear();
names = xmll.GetOnlineNames();
foreach
(var name in
names)
{
ListBox1.Items.Add(name);
}
}
private void RefreshMessages()
{
ListBox2.Items.Clear();
msgs = xmll.GetMessagesHistory();
foreach
(var msg in
msgs)
{
ListBox2.Items.Add(msg);
}
}
protected void ButtonJoin_Click(object
sender, EventArgs e)
{
if
(Session["userName"] == null)
{
Session["userName"]
= TextBoxName.Text.ToString();
xmll.Join(Session["userName"].ToString(), DateTime.Now);
TextBoxName.Enabled = false;
Timer1.StartTimer();
TextBoxType2.Focus();
}
}
protected void ButtonSend_Click(object
sender, EventArgs e)
{
if
(Session["userName"] != null)
{
string
name = (string)Session["userName"];
string
msg = TextBoxType2.Text.ToString();
xmll.Say(name, msg, DateTime.Now);
TextBoxType2.Text = "";
TextBoxType2.Focus();
}
else
{
LabelError.Text = "You have to join with a name first..";
}
}
[Anthem.Method]
public void Leave()
{
Timer1.StopTimer();
if
(Session["userName"] != null)
{
string
name = (string)Session["userName"];
xmll.Leave(name, DateTime.Now);
LabelError.Text = "Offline";
}
}
}
For this
application you need some assemblies file, you download these file form
Internet we give name here and link .
a.
Anthem.dll
Download
link..
(http://www.zhaodll.co/a/2013/0105/92480.html#.UmITv9JmB4Q,
) (http://forums.asp.net/t/1094833.aspx)
b.
Anthem.pdb
Download
link..
c.
AnthemExtensions.dll
d.
AnthemExtensions.pdb
e.
Anthem.pdb
Asp.net Related Other Post:
- Print pdf file in asp.net by C sharp
- SQL Server questions for interview
- Find datetime difference in asp.net by C#
- Add rows in GridView dynamic with Textbox
- Asp.net Watermark Text on uploaded Image
- Asp.net NullReferenceException and how fix it
- State Management and type of State Management
- Cookies,how to make Cookies in asp.net with C#.
- Jquery Change div background on mouseover in asp.net
- In asp.net by jquery change div text color on mouseover
- Upload multiple by one asp.net fileupload control using jQuery
- Adding Dynamic Rows in ASP.Net GridView Control with Textbox
- In Asp.net Difference between ""(empty string) and String.Empty
- Validation checkbox control using JavaScript
- Validate ASP.Net RadioButtonList using JavaScript Example