www.pudn.com > startprepare.rar > CommonSession.cs
using System;
using System.Collections;
namespace DS.EMIS.StartPrepare.Common
{
/// <summary>
/// CommonSession 的摘要说明。
/// </summary>
public class CommonSession
{
#region delegate
public delegate Object MsgEventHandler(string sourceName,string infoTypeName,object infoTypeObj);
#endregion
#region private variable
private Hashtable m_ListMsgObject = null;
// private string username;
// private string password;
// private string serviceName;
private string _license;
private ManageConfigs manageConfigs = null;
private ManageSQLScripts manageSQLScripts = null;
private ManageSysLogs manageSysLogs = null;
#endregion
#region co
public CommonSession(string license)
{
//
// TODO: 在此处添加构造函数逻辑
//
this._license = license;
if(this._license=="QAZXSW")
{
this.m_ListMsgObject = new Hashtable();
this.manageConfigs = new ManageConfigs();
this.manageSQLScripts = new ManageSQLScripts();
this.manageSysLogs = new ManageSysLogs();
}
}
#endregion
#region Property
// public string UserName
// {
// get
// {
// return this.username;
// }
// set
// {
// this.username = value;
// }
// }
// public string Password
// {
// get
// {
// return this.password;
// }
// set
// {
// this.password = value;
// }
// }
// public string ServiceName
// {
// get{
// return this.serviceName;
// }
// set{this.serviceName = value;}
// }
#endregion
#region public Mothed
#region about Message
/// <summary>
/// 注册你的消息接收方法
/// </summary>
/// <param name="myName">您的接收消息模块名称</param>
/// <param name="msgEventHandler">消息接收方法</param>
public void OnMsgEventHndler(string myName,MsgEventHandler msgEventHandler)
{
if(this._license!="QAZXSW")
return ;
MsgEventHandler pMsgEventHandler = null;
pMsgEventHandler = this.FindMsgEventHndler(myName);
if(pMsgEventHandler != null)
{
pMsgEventHandler +=msgEventHandler;
this.m_ListMsgObject.Remove(myName);
m_ListMsgObject.Add(myName,pMsgEventHandler);
}
else
{
pMsgEventHandler +=msgEventHandler;
m_ListMsgObject.Add(myName,pMsgEventHandler);
}
}
/// <summary>
/// 不再接收消息,撤消注册
/// </summary>
/// <param name="myName">您的接收消息模块名称</param>
/// <param name="msgEventHandler">消息接收方法</param>
public void DeleteMsgEvent(string myName,MsgEventHandler msgEventHandler)
{
if(this._license!="QAZXSW")
return ;
MsgEventHandler pMsgEventHandler = null;
pMsgEventHandler = this.FindMsgEventHndler(myName);
if(pMsgEventHandler != null)
{
pMsgEventHandler -=msgEventHandler;
this.m_ListMsgObject.Remove(myName);
if(pMsgEventHandler != null)
m_ListMsgObject.Add(myName,pMsgEventHandler);
}
}
/// <summary>
/// 同步方式一对一发送消息方法
/// </summary>
/// <param name="sourceName">本地模块名称</param>
/// <param name="destName">目标模块名称</param>
/// <param name="infoTypeName">消息类型</param>
/// <param name="infoTypeObj">消息内容</param>
/// <returns></returns>
public Object SendMessage(string sourceName,string destName,string infoTypeName,object infoTypeObj)
{
if(this._license!="QAZXSW")
return null;
Object Obj = null;
MsgEventHandler pMsgEventHandler = null;
pMsgEventHandler = this.FindMsgEventHndler(destName);
if(pMsgEventHandler != null)
{
MsgEventHandler myDelegate = null;
System.Delegate[] Delegates = pMsgEventHandler.GetInvocationList();
foreach (System.Delegate delegateItem in Delegates)
{
try
{
myDelegate = (MsgEventHandler) delegateItem;
Obj = myDelegate(sourceName,infoTypeName,infoTypeObj);
}
catch
{
pMsgEventHandler -= myDelegate;
this.m_ListMsgObject.Remove(destName);
if(pMsgEventHandler != null)
m_ListMsgObject.Add(destName,pMsgEventHandler);
}
}
}
return Obj;
}
/// <summary>
/// 同步方式一对多发送消息方法
/// </summary>
/// <param name="sourceName">本地模块名称</param>
/// <param name="destNames">目标模块名称列表</param>
/// <param name="infoTypeName">消息类型</param>
/// <param name="infoTypeObj">消息内容</param>
/// <returns></returns>
public Object SendMessage(string sourceName,string[] destNames,string infoTypeName,object infoTypeObj)
{
if(this._license!="QAZXSW")
return null;
Object Obj = null;
MsgEventHandler pMsgEventHandler = null;
for(int i=0;i<destNames.Length;i++)
{
pMsgEventHandler = this.FindMsgEventHndler(destNames[i]);
if(pMsgEventHandler != null)
{
MsgEventHandler myDelegate = null;
System.Delegate[] Delegates = pMsgEventHandler.GetInvocationList();
foreach (System.Delegate delegateItem in Delegates)
{
try
{
myDelegate = (MsgEventHandler) delegateItem;
Obj = myDelegate(sourceName,infoTypeName,infoTypeObj);
}
catch
{
pMsgEventHandler -= myDelegate;
this.m_ListMsgObject.Remove(destNames[i]);
if(pMsgEventHandler != null)
m_ListMsgObject.Add(destNames[i],pMsgEventHandler);
}
}
}
}
return Obj;
}
/// <summary>
/// 同步广播发送信息方法
/// </summary>
/// <param name="sourceName">本地模块名称</param>
/// <param name="infoTypeName">消息类型</param>
/// <param name="infoTypeObj">消息内容</param>
/// <returns></returns>
public Object SendMessage(string sourceName,string infoTypeName,object infoTypeObj)
{
if(this._license!="QAZXSW")
return null;
Object Obj = null;
MsgEventHandler pMsgEventHandler = null;
string eventID = null;
System.Collections.IEnumerator keyEnumerator = this.m_ListMsgObject.Keys.GetEnumerator();
try
{
if(keyEnumerator != null)
{
while ( keyEnumerator.MoveNext() )
{
eventID=(string)keyEnumerator.Current;
pMsgEventHandler = this.m_ListMsgObject[eventID] as MsgEventHandler;
if(pMsgEventHandler != null)
{
MsgEventHandler myDelegate = null;
System.Delegate[] Delegates = pMsgEventHandler.GetInvocationList();
foreach (System.Delegate delegateItem in Delegates)
{
try
{
myDelegate = (MsgEventHandler) delegateItem;
Obj = myDelegate(sourceName,infoTypeName,infoTypeObj);
}
catch
{
pMsgEventHandler -= myDelegate;
this.m_ListMsgObject.Remove(eventID);
if(pMsgEventHandler != null)
m_ListMsgObject.Add(eventID,pMsgEventHandler);
}
}
}
}
}
}
catch
{
}
return Obj;
}
/// <summary>
/// 异步方式一对一发送消息方法
/// </summary>
/// <param name="sourceName">本地模块名称</param>
/// <param name="destName">目标模块名称</param>
/// <param name="infoTypeName">消息类型</param>
/// <param name="infoTypeObj">消息内容</param>
public void AsySendMessage(string sourceName,string destName,string infoTypeName,object infoTypeObj)
{
SendAsgMessageOneDetegate sendMsg = new SendAsgMessageOneDetegate(this.SendMessage);
sendMsg.BeginInvoke(sourceName,destName,infoTypeName,infoTypeObj,new System.AsyncCallback(SendEventCallbackOne),null);
}
/// <summary>
/// 异步方式一对多发送消息方法
/// </summary>
/// <param name="sourceName">本地模块名称</param>
/// <param name="destNames">目标模块名称列表</param>
/// <param name="infoTypeName">消息类型</param>
/// <param name="infoTypeObj">消息内容</param>
public void AsySendMessage(string sourceName,string[] destNames,string infoTypeName,object infoTypeObj)
{
SendAsgMessagePartDetegate sendMsg = new SendAsgMessagePartDetegate(this.SendMessage);
sendMsg.BeginInvoke(sourceName,destNames,infoTypeName,infoTypeObj,new System.AsyncCallback(SendEventCallbackPart),null);
}
/// <summary>
/// 异步广播发送信息方法
/// </summary>
/// <param name="sourceName">本地模块名称</param>
/// <param name="infoTypeName">消息类型</param>
/// <param name="infoTypeObj">消息内容</param>
public void AsySendMessage(string sourceName,string infoTypeName,object infoTypeObj)
{
SendAsgMessageAllDetegate sendMsg = new SendAsgMessageAllDetegate(this.SendMessage);
sendMsg.BeginInvoke(sourceName,infoTypeName,infoTypeObj,new System.AsyncCallback(SendEventCallbackAll),null);
}
#endregion
#region about congfig file reading/writing
/*
* <?xml version="1.0" encoding="utf-8"?>
* <configuration>
* <appSettings>
* <add key="名称1" value="值" />
* <add key="名称2" value="值" />
* </appSettings>
* </configuration>
*/
/// <summary>
/// 读字典配置信息
/// </summary>
/// <param name="KeyValue">键名</param>
/// <param name="FileName">配置文件名</param>
/// <returns>键值</returns>
public string GetConfig(string KeyValue,string FileName)
{
if(this._license!="QAZXSW")
return null;
return this.manageConfigs.GetConfig(KeyValue,FileName);
}
/// <summary>
/// 修改字典配置信息
/// </summary>
/// <param name="KeyValue">键名</param>
/// <param name="Xvalue">键值</param>
/// <param name="FileName">配置文件名</param>
public void UpdateConfig(string KeyValue,string Xvalue,string FileName)
{
if(this._license!="QAZXSW")
return ;
this.manageConfigs.UpdateConfig(KeyValue,Xvalue ,FileName);
}
/*
* <?xml version="1.0" standalone="yes"?>
* <configuration>
* <接点名称 属性1="值" 属性2="值" 属性3="值" ...../>
*例:<PartnerAgent Name="DS.EMIS.AppIntegrate.EMISCenterTerminalAgent" Type="DS.EMIS.AppIntegrate.EMISCenterTerminalAgent" InternalType="102" />
* </configuration>
*/
/// <summary>
/// 读同名接点配置信息
/// </summary>
/// <param name="fileName">配置文件名</param>
/// <param name="nodeName">列表接点名</param>
/// <returns>配置信息列表</returns>
public System.Data.DataTable GetConfigs(string fileName,string nodeName)
{
if(this._license!="QAZXSW")
return null;
return this.manageConfigs.GetConfigs(fileName,nodeName);
}
/// <summary>
/// 修改节点属性值
/// </summary>
/// <param name="fileName">配置文件名</param>
/// <param name="nodeName">节点名</param>
/// <param name="attriName">节点属性名</param>
/// <param name="attriValue">属性值</param>
/// <param name="pos">节点编号,从0开始</param>
public void UpdateConfig(string fileName,string nodeName,string attriName,string attriValue,int pos)
{
if(this._license!="QAZXSW")
return ;
this.manageConfigs.UpdateConfig(fileName,nodeName,attriName,attriValue,pos);
}
/// <summary>
/// 修改节点属性值
/// </summary>
/// <param name="fileName">配置文件名</param>
/// <param name="nodeName">节点名</param>
/// <param name="attriName">节点属性名</param>
/// <param name="attriValue">属性值</param>
/// <param name="matchAttriName">匹配节点属性名</param>
/// <param name="matchAttriValue">匹配节点属性值</param>
/// <example>
/// </example>
public void UpdateConfig(string fileName,string nodeName,string attriName,string attriValue,string matchAttriName,string matchAttriValue)
{
if(this._license!="QAZXSW")
return ;
this.manageConfigs.UpdateConfig(fileName,nodeName,attriName,attriValue,matchAttriName,matchAttriValue);
}
public void InsertNode(string fileName,string mainNode,string element,string[] attrib,string[] attribContent,string Content)
{
if(this._license!="QAZXSW")
return ;
this.manageConfigs.InsertNode(fileName,mainNode,element,attrib,attribContent,Content);
}
public void DeleteNode(string fileName,string nodeName,string[] attrib,string[] attribContent)
{
if(this._license!="QAZXSW")
return ;
this.manageConfigs.DeleteNode(fileName,nodeName,attrib,attribContent);
}
/*
* <LocalConfig>
* <xs:schema id="LocalConfig" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
* <xs:element name="LocalConfig" msdata:IsDataSet="true" msdata:Locale="zh-CN">
* <xs:complexType>
* <xs:choice maxOccurs="unbounded">
* <xs:element name="表名">
* <xs:complexType>
* <xs:sequence>
* <xs:element name="字段名1" type="xs:string" minOccurs="0" />
* <xs:element name="字段名2" type="xs:string" minOccurs="0" />
* </xs:sequence>
* </xs:complexType>
* </xs:element>
* </xs:choice>
* </xs:complexType>
* </xs:element>
* </xs:schema>
* <表名>
* <字段名1>值</字段名1>
* <字段名2>值</字段名2>
* </表名>
* <表名>
* <字段名1>值</字段名1>
* <字段名2>值</字段名2>
* </表名>
* </LocalConfig>
*
*/
/// <summary>
/// 读XML配置文件
/// </summary>
/// <param name="fileName">配置文件名</param>
/// <returns>XML文件结构</returns>
public System.Data.DataSet ReadDataFromDataFile(string fileName)
{
if(this._license!="QAZXSW")
return null;
return this.manageSysLogs.ReadDataFromDataFile(fileName);
}
/// <summary>
/// 写XML配置文件
/// </summary>
/// <param name="fileName">配置文件名</param>
/// <param name="dataSet">XML文件结构</param>
public void WriteDataToDataFile(string fileName,System.Data.DataSet dataSet)
{
if(this._license!="QAZXSW")
return ;
this.manageSysLogs.WriteDataToDataFile(fileName,dataSet);
}
/// <summary>
/// 读SQl脚本文件
/// </summary>
/// <param name="fileName">脚本文件名</param>
/// <returns>脚本</returns>
public string ReadSQLScript(string fileName)
{
if(this._license!="QAZXSW")
return null;
return this.manageSQLScripts.ReadSQLScript(fileName);
}
/// <summary>
/// 写SQl脚本文件
/// </summary>
/// <param name="fileName">脚本文件名</param>
/// <param name="sqlString">脚本内容</param>
public void WriteSQLScript(string fileName,string sqlString)
{
if(this._license!="QAZXSW")
return ;
this.manageSQLScripts.WriteSQLScript(fileName,sqlString);
}
/// <summary>
/// 写XML配置文件
/// </summary>
/// <param name="fileName">配置文件名</param>
/// <param name="dataSet">XML文件结构</param>
public void WriteDataToDataFile(string fileName,string sqlString)
{
if(this._license!="QAZXSW")
return ;
this.manageSQLScripts.WriteSQLScript(fileName,sqlString);
}
#endregion
#endregion
#region private methods
private delegate object SendAsgMessageOneDetegate(string sourceName,string destName,string infoTypeName,object infoTypeObj);
private delegate object SendAsgMessagePartDetegate(string sourceName,string[] destNames,string infoTypeName,object infoTypeObj);
private delegate object SendAsgMessageAllDetegate(string sourceName,string infoTypeName,object infoTypeObj);
private static void SendEventCallbackOne(System.IAsyncResult ar)
{
System.Runtime.Remoting.Messaging.AsyncResult asyncResult = (System.Runtime.Remoting.Messaging.AsyncResult)ar;
SendAsgMessageOneDetegate uld = (SendAsgMessageOneDetegate)asyncResult.AsyncDelegate;
uld.EndInvoke(ar);
}
private static void SendEventCallbackPart(System.IAsyncResult ar)
{
System.Runtime.Remoting.Messaging.AsyncResult asyncResult = (System.Runtime.Remoting.Messaging.AsyncResult)ar;
SendAsgMessagePartDetegate uld = (SendAsgMessagePartDetegate)asyncResult.AsyncDelegate;
uld.EndInvoke(ar);
}
private static void SendEventCallbackAll(System.IAsyncResult ar)
{
System.Runtime.Remoting.Messaging.AsyncResult asyncResult = (System.Runtime.Remoting.Messaging.AsyncResult)ar;
SendAsgMessageAllDetegate uld = (SendAsgMessageAllDetegate)asyncResult.AsyncDelegate;
uld.EndInvoke(ar);
}
private MsgEventHandler FindMsgEventHndler(string myName)
{
MsgEventHandler pMsgEventHandler = null;
pMsgEventHandler = this.m_ListMsgObject[myName] as MsgEventHandler;
return pMsgEventHandler;
}
#endregion
}
}