c#即时通信程序(1)

2009年3月28日星期六

c#即时通信程序(1)

添加类 ClassForms



using System;


public class ClassForms : System.Collections.CollectionBase //继承
{
public void add(System.Windows.Forms.Form f)
{
base.InnerList.Add(f);

}
public void Romove(System.Windows.Forms.Form f)
{
base.InnerList.Remove (f);
}
}

System.Collections.CollectionBase:为强类型集合提供 abstract 基类。

abstract 修饰符以指示某个类只能是其他类的基类。

base 关键字用于从派生类中访问基类的成员:(不能在静态函数中使用)

调用基类上已被其他方法重写的方法。

指定创建派生类实例时应调用的基类构造函数

这里ClassForms继承CollectionBase类。所以base可以使用CollectionBase类的方法。

base.InnerList:获取一个 System.Collections.ArrayList,它包含 System.Collections.CollectionBase 实例中元素的列表。

add():添加一个元素到coolectionbase中

Remove():删除一个元素。



ClassMsg类 发送信息





[Serializable]
public class ClassMsg
{
public string ID="";//发送消息的用户ID
public int MsgInfoClass=0;//发送的消息类别(1为登录;2为更改在线状态;3.
public byte[] MsgContent=null;//发送消息转化成字节后的数据
public string AssemblyVersion= "1.0.0.1" ;

public ClassMsg(int msgInfoClass,string id,byte[] msgContent)
{
this.ID=id;
this.MsgInfoClass=msgInfoClass;
this.MsgContent=msgContent;

}

}



[Serializable]:属性。指定封装任何类型的 Windows 窗体对象的格式。







ClassOptionData 操作数据库类

using System;
using System.Data.OleDb ;
using System.Data;
using System.ComponentModel;

namespace LanMsg
{

public class ClassOptionData
{
private string ConStr= "Provider=SQLOLEDB;Data Source=;User id=;password=;Initial Catalog=;";



public int ExSQL(string SQLStr)//执行任何SQL语句,返回所影响的行数
{
try
{
OleDbConnection cnn = new OleDbConnection(ConStr);
OleDbCommand cmd =new OleDbCommand(SQLStr ,cnn);
cnn.Open ();
int i =0;
i=cmd.ExecuteNonQuery();
cmd.Dispose();
cnn.Close();
cnn.Dispose();
return i;
}
catch(Exception e){return 0;}

}

public int ExSQLLengData(object Data,string par,string SQLStr)//执行任何SQL语句,返回所影响的行数
{
try
{
OleDbConnection cnn = new OleDbConnection(ConStr);
OleDbCommand cmd =new OleDbCommand(SQLStr ,cnn);
cnn.Open ();
int i =0;
cmd.Parameters.Add(par, System.Data.OleDb.OleDbType.Binary);
i=cmd.ExecuteNonQuery();
cmd.Dispose();
cnn.Close();
cnn.Dispose();
return i;
}
catch(Exception e){return 0;}

}

public int ExSQLR(string SQLStr)//执行任何SQL查询语句,返回所影响的行数
{
try
{
OleDbConnection cnn = new OleDbConnection(ConStr);
OleDbCommand cmd =new OleDbCommand(SQLStr ,cnn);
cnn.Open ();
OleDbDataReader dr;
int i =0;
dr=cmd.ExecuteReader();
while(dr.Read())
{i++;}
cmd.Dispose();
cnn.Close();
cnn.Dispose();
return i;
}
catch(Exception e){return 0;}

}

public object ExSQLReField(string field ,string SQLStr)//执行任何SQL查询语句,返回一个字段值
{
try
{
OleDbConnection cnn = new OleDbConnection(ConStr);
OleDbCommand cmd =new OleDbCommand(SQLStr ,cnn);
cnn.Open ();
OleDbDataReader dr;
object fieldValue=null;
dr=cmd.ExecuteReader();
if(dr.Read())
{fieldValue=dr[field];}
cmd.Dispose();
cnn.Close();
cnn.Dispose();
return fieldValue;
}
catch(Exception e){return null;}

}

public OleDbDataReader ExSQLReDr(string SQLStr)//执行任何SQL查询语句,返回一个OleDbDataReader
{
try
{
OleDbConnection cnn = new OleDbConnection(ConStr);
OleDbCommand cmd =new OleDbCommand(SQLStr ,cnn);
cnn.Open ();
OleDbDataReader dr;
dr=cmd.ExecuteReader(CommandBehavior.CloseConnection);
return dr;
}
catch(Exception e){return null;}
}

}
}

System.ComponentModel 命名空间提供用于实现组件和控件运行时和设计时行为的类。此命名空间包括用于实现属性和类型转换器、绑定到数据源以及授权组件的基类和接口。





using System;
using System.IO ;

namespace LanMsg.Controls
{
///
/// ClassSerializers 的摘要说明。
///

public class ClassSerializers
{


#region Binary Serializers
public System.IO.MemoryStream SerializeBinary(object request)
{
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter serializer = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
System.IO.MemoryStream memStream = new System.IO.MemoryStream();
serializer.Serialize(memStream, request);
return memStream;
}

public object DeSerializeBinary(System.IO.MemoryStream memStream)
{
  memStream.Position=0;
  System.Runtime.Serialization.Formatters.Binary.BinaryFormatter deserializer = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
  object newobj = deserializer.Deserialize(memStream);
  memStream.Close();
  return newobj;
}
#endregion

#region XML Serializers

public System.IO.MemoryStream SerializeSOAP(object request)
{

  System.Runtime.Serialization.Formatters.Soap.SoapFormatter serializer = new System.Runtime.Serialization.Formatters.Soap.SoapFormatter();
  System.IO.MemoryStream memStream = new System.IO.MemoryStream();
  serializer.Serialize(memStream, request);
  return memStream;
}

public object DeSerializeSOAP(System.IO.MemoryStream memStream)
{
  object sr;
  System.Runtime.Serialization.Formatters.Soap.SoapFormatter deserializer = new System.Runtime.Serialization.Formatters.Soap.SoapFormatter();
  memStream.Position=0;
  sr = deserializer.Deserialize(memStream);
  memStream.Close();
  return sr;
}

#endregion


}
}


System.IO.MemoryStream :创建其支持存储区为内存的流。

System.Runtime.Serialization 命名空间包含可用于将对象序列化和反序列化的类。序列化是将对象或对象图形转换为线性字节序列,以存储或传输到另一个位置的过程。反序列化是接受存储的信息并利用它重新创建对象的过程。

通过 ISerializable 接口,类可以执行其自己的序列化行为。System.Runtime.Serialization.Formatters 命名空间中的类控制封装在序列化对象中的多种数据类型的实际格式。

可以在 System.Runtime.Serialization.Formatters 命名空间中找到将对象序列化为特定格式或从特定格式反序列化对象的格式化程序。

Binary.BinaryFormatter:以二进制形式进行序列化。

BinaryFormatter.Serialize(stream,object): 将obj序列化给指定流。

BinaryFormatter.Deserialize(stream):将流反序列化给对象

SOAP 是一种基于 XML 的协议,它是专门为使用 XML 来传输过程调用而设计的。

序列化是将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象。反之,反序列化根据流重新构造对象。

XML 序列化仅将对象的公共字段和属性值序列化为 XML 流。XML 序列化不包括类型信息。



XML 序列化中最主要的类是 XmlSerializer 类,它的最重要的方法是 Serialize 和 Deserialize 方法。XmlSerializer 创建 C# 文件并将文件编译为 .dll 文件,以执行此序列化。在 .NET Framework 2.0 中,XML 序列化程序生成器工具 (Sgen.exe) 用于事先生成这些序列化程序集,以便与应用程序一同部署,并提高启动性能。XmlSerializer 生成的 XML 流符合万维网联合会 (www.w3.org) XML 架构定义语言 (XSD) 1.0 的建议。另外,生成的数据类型符合标题为“XML Schema Part 2: Datatypes”(英文)的文档。





ClassUserInfo 用户状态



using System;
using System.ComponentModel;
using System.Net;

namespace LanMsg
{
///
/// ClassUserInfo 的摘要说明。
/// 用户状态说明
///

[Serializable]
public class ClassUserInfo
{

public ClassUserInfo()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

[NonSerialized]
public bool SendIsSuccess=false;//标识发送给此联系人的数据是否成功

[NonSerialized]
private System.Windows.Forms.TreeNode node;
public System.Windows.Forms.TreeNode Node
{
get{return node;}
set{node=value;}
}

private string assemblyVersion="1.0.0.1";
public string AssemblyVersion
{
get{return assemblyVersion;}
set{assemblyVersion=value;}
}

private string userName="";
public string UserName
{
get{return userName;}
set{userName=value;}
}


private IPAddress Ip=IPAddress.Parse("127.0.0.1");
public IPAddress IP
{
get{return Ip;}
set{Ip=value;}
}

private int port=0;
public int Port
{
get{return port;}
set{port=value;}
}

private string ComputerName="";
public string ID
{
get{return ComputerName;}
set{ComputerName=value;}
}


[NonSerialized]
private string stateInfo ="(脱机)";
public string StateInfo
{
get{return stateInfo;}
}

private int state=0;
public int State
{
get{return state;}
set
{
state=value;
switch(state)
{
case 0:
stateInfo ="(脱机)";
break;
case 1:
stateInfo ="(联机)";
break;
case 2:
stateInfo ="(忙碌)";
break;
case 3:
stateInfo ="(离开)";
break;
case 4:
stateInfo ="(接听电话)";
break;
case 5:
stateInfo ="(外出就餐)";
break;
}
}
}

private int dep=10;
public int Dep
{
get{return dep;}
set
{
dep=value;
switch(dep)
{
case 0:
depInfo ="部门";
break;
case 1:
depInfo ="部门";
break;
case 2:
depInfo ="部门";
break;
case 3:
depInfo ="部门";
break;
case 4:
depInfo ="部门";
break;
case 5:
depInfo ="部门";
break;
case 6:
depInfo ="部门";
break;
case 7:
depInfo ="部门";
break;
case 8:
depInfo ="部门";
break;
case 9:
depInfo ="部门";
break;
case 10:
depInfo ="未知";
break;
}
}
}

[NonSerialized]
private string depInfo="";
public string DepInfo
{
get{return depInfo;}
}


// [NonSerialized]
// private int old=0;
// public int 年龄
// {
// get{return old;}
// set{old=value;}
// }
//
// [NonSerialized]
// private string business="";
// public string 职务
// {
// get{return business;}
// set{business=value;}
// }
//
// [NonSerialized]
// private string sex="";
// public string 性别
// {
// get{return sex;}
// set{sex=value;}
// }

}
}


ClassUsers 添加删除用户

using System;

namespace LanMsg.Controls
{
///
/// ClassUser 的摘要说明。
/// 添加用户
///

[Serializable]
public class ClassUsers: System.Collections.CollectionBase
{
public ClassUsers()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public void add(ClassUserInfo userInfo)
{
base.InnerList.Add(userInfo);
}

public void Romove(ClassUserInfo userInfo)
{
base.InnerList.Remove (userInfo);
}
}
}

0 评论:

发表评论