聊天室

下面是我写的聊天室的部分代码,设计器自动产生的代码我没有粘贴。  
   
  //Global.asax类里的代码  
  public   class   Global   :   System.Web.HttpApplication  
  {  
  //这里声明了一个全局的DataTable,用来保存所有用户的聊天记录  
  public   static   DataTable   m_Talks;  
  //用来保存聊天室内所有在线用户信息的DataTable  
  public   static   DataTable   m_Customers;  
   
  protected   void   Application_Start(Object   sender,   EventArgs   e)  
  {  
  //在m_Talks中创建三个列  
  m_Talks   =   new   DataTable("Talks");  
  //dcFrom保存发言者姓名  
  DataColumn   dcFrom   =   new   DataColumn("From",   System.Type.GetType("System.String"));  
  m_Talks.Columns.Add(dcFrom);  
  //dcTo保存对话者姓名  
  DataColumn   dcTo   =   new   DataColumn("To",   System.Type.GetType("System.String"));  
  m_Talks.Columns.Add(dcTo);  
  //dcSaid保存发言内容  
  DataColumn   dcSaid   =   new   DataColumn("Said",   System.Type.GetType("System.String"));  
  m_Talks.Columns.Add(dcSaid);  
   
  //在m_Customers中创建一个列  
  m_Customers   =   new   DataTable("Customers");  
  DataColumn   dcName   =   new   DataColumn("Name",   System.Type.GetType("System.String"));  
  m_Customers.Columns.Add(dcName);  
  }  
  }  
   
  //Talk.aspx页面的代码,Talk.aspx页面是位于底部框架的发言页面  
  public   class   Talk   :   System.Web.UI.Page  
  {  
  protected   System.Web.UI.WebControls.Label   Label1;  
  protected   System.Web.UI.WebControls.DropDownList   DDL_Users;  
  protected   System.Web.UI.WebControls.Label   Label2;  
  protected   System.Web.UI.WebControls.TextBox   TB_Said;  
  protected   System.Web.UI.WebControls.Button   Btn_Say;  
   
  public   static   String   m_sCustomerName;   //用来保存当前用户的姓名  
   
  //将用户发言保存到m_Talk里的私有函数  
  private   int   AddToTalks(String   From,   String   To,   String   Said)  
  {  
  if   (Global.m_Talks   !=   null)  
  {  
  //如果m_Talk里保存的发言多于20条,将最早保存的一条删去。  
  if   (Global.m_Talks.Rows.Count   >=   20)  
  {  
  Global.m_Talks.Rows.Remove(Global.m_Talks.Rows[0]);  
  }  
  DataRow   dr   =   Global.m_Talks.NewRow();  
  dr["From"]   =   From;  
  dr["To"]   =   To;  
  dr["Said"]   =   Said;  
  Global.m_Talks.Rows.Add(dr);  
  return   Global.m_Talks.Rows.Count   -   1;  
  }  
  else  
  {  
  return   -1;  
  }  
  }  
   
  private   void   Page_Load(object   sender,   System.EventArgs   e)  
  {  
  //   在此处放置用户代码以初始化页面  
  if   (!this.IsPostBack)  
  {  
  DDL_Users.Items.Clear();  
  DDL_Users.Items.Add("所有人");  
  //将m_Customers中保存的所有在线用户姓名添加到选择对话者列表框中  
  for   (int   i   =   0;   i   <=   Global.m_Customers.Rows.Count   -   1;   i++)  
  {  
  DDL_Users.Items.Add(Global.m_Customers.Rows[i]["Name"].ToString());  
  }  
  }  
  }  
   
  //发言按钮单击事件  
  private   void   Btn_Say_Click(object   sender,   System.EventArgs   e)  
  {  
  //将当前用户的发言添加到m_Talks中  
  if   (AddToTalks(m_sCustomerName,   DDL_Users.SelectedValue.ToString(),   TB_Said.Text)   >=   0)  
  {  
  TB_Said.Text   =   "";  
  }  
  }  
  }  
   
  //Show.aspx页面的代码,Show页面是位于顶部框架的显示所有用户发言的页面  
  public   class   Show   :   System.Web.UI.Page  
  {  
  private   void   Page_Load(object   sender,   System.EventArgs   e)  
  {  
  //   在此处放置用户代码以初始化页面  
  if   (!this.IsPostBack)  
  {  
  //给LoadShow.aspx页面的公共静态变量赋值,以便LoadShow页面能访问本页面的属性,方法  
  LoadShow.m_ShowPage   =   this;  
  }  
  }  
  }  
   
  //LoadShow.aspx页面的代码,LoadShow.aspx是位于一个隐藏的框架内的,用于刷新Show.aspx页面中发言内容的页面  
  public   class   LoadShow   :   System.Web.UI.Page  
  {  
  protected   System.Timers.Timer   timer1;  
  public   static   Page   m_ShowPage;  
  private   int   m_nRowNum   =   0;  
   
  //将发言者、对话者、发言合并成“XXX   对   XXX   说:。。。。。”这种形式  
  private   String   MakeWord(String   From,   String   To,   String   Said)  
  {  
  String   sWord;  
  if   (To.Equals(""))  
  {  
  sWord   =   From   +   "   说:"   +   Said;  
  }  
  else  
  {  
  sWord   =   From   +   "   对   "   +   To   +   "   说:"   +   Said;  
  }  
  return   sWord;  
  }  
   
  //Timer1组件的Elapsed事件,每隔一秒刷新一次Show.aspx页面的发言内容  
  private   void   timer1_Elapsed(object   sender,   System.Timers.ElapsedEventArgs   e)  
  {  
  if   ((Global.m_Talks.Rows.Count   >   m_nRowNum))  
  {  
  //问题出在这里,m_ShowPage.Response.IsClientConnected的值总为false。不知道该如何使Show.aspx页面的Response保持连接状态  
  if   ((m_ShowPage   !=   null)   &&   (m_ShowPage.Response   !=   null)   &&   (m_ShowPage.Response.IsClientConnected))  
  {  
  String   sFrom   =   Global.m_Talks.Rows[m_nRowNum]["From"].ToString();  
  String   sTo   =   Global.m_Talks.Rows[m_nRowNum]["To"].ToString();  
  String   sSaid   =   Global.m_Talks.Rows[m_nRowNum]["Said"].ToString();  
  String   sWord   =   MakeWord(sFrom,   sTo,   sSaid);  
   
  m_ShowPage.Response.Write(sWord   +   "<br>\n");  
  m_ShowPage.Response.Flush;  
   
  m_nRowNum   ++;  
  }  
  }  
  }  
  }

你可能感兴趣的:(聊天室)