📄 servicemain.cs
字号:
this.WirteLog("用户" + userID + "修改密码成功");
}
else
{
this.WirteLog("用户" + userID + "修改密码不成功");
}
}
#endregion
#region 用户转发消息
/// <summary>
///
///
///
///
///
///
///
/// </summary>
/// <param name="e"></param>
private void onTransmitMsg(DataArrivalEventArgs e)
{
IMLibrary.serverTransmitMsg msg = IMLibrary.Serializers.ByteToObj(e.Data) as IMLibrary.serverTransmitMsg;
if (msg == null) return;//抛掉非法消息
IMLibrary.UserInfo user = this.findUser(msg.recipientId);
if (user == null) return;//抛掉非法消息
this.sendMsgToOneUser(msg.msgContent, user.IP, user.Port);//将消息转发出去
//this.WirteLog("转发用户"+msg.sendId +"发送给用户"+msg.recipientId +"的消息!");
}
#endregion
#region 初始化组织机构、用户信息版本
/// <summary>
/// 初始化组织机构、用户信息版本
/// </summary>
private void updateDepAndUserVersion()
{
try
{
// object obj;
//IMLibrary.SqlData.DataAccess.ExecProc("getVersion", out obj, "dep");
VersionDepAndUser.departmentVersion = this.settings.departmentVersion;// Convert.ToInt32(obj);//获得组织机构版本
this.WirteLog("获得组织机构版本!");
//IMLibrary.SqlData.DataAccess.ExecProc("getVersion", out obj, "user");
VersionDepAndUser.usersVersion =this.settings.usersVersion;// Convert.ToInt32(obj);//获得用户版本
this.VersionDepAndUser.departmentCount =(byte) this.deps.Count;//获得部门数量
this.VersionDepAndUser.usersCount = (uint)this.systemUsers.Length -1;//获得用户数量
this.WirteLog("初始化组织机构、用户版本数据成功!");
}
catch
{
this.WirteLog("初始化组织机构、用户版本数据读取错误!请检查数据库联接是否正确。");
}
}
#endregion
#region 初始化部门列表
/// <summary>
/// 初始化部门列表
/// </summary>
private void updateDepCollections()
{
IMLibrary.DepartmentCollections tempDeps = new DepartmentCollections();
SqlDataReader dr = null;
//System.Data.OracleClient.OracleDataReader dr = null;
this.WirteLog("开始执行组织机构部门查询SQL语句!");
try
{
// dr = IMLibrary.SqlData.DataAccess.GetReaderBySql("select groupID as depId,group_name as depName,parentId as SuperiorID from groups");
dr = IMLibrary.SqlData.DataAccess.GetReaderByProc("GetDepList");
//dr = IMLibrary.OracleData.DataAccess.GetReaderBySql("select groupID as depId,group_name as depName,parentId as SuperiorID from gdtel_group");
}
catch
{
this.WirteLog("执行组织机构部门查询SQL错误!");
return;
}
int SuperiorID = 0;
if (dr != null)
while (dr.Read())
{
//if (Convert.ToInt32(dr["SuperiorID"]) == 1)
// SuperiorID = 0;
//else
SuperiorID = Convert.ToInt32(dr["SuperiorID"]);
try
{
// if (Convert.ToInt32(dr["depId"]) != 1)
this.DepfromDbToDeps(Convert.ToInt32(dr["depId"]), Convert.ToString(dr["depName"]).Trim(), SuperiorID, tempDeps);
}
catch { this.WirteLog("读取组织机构部门数据错误!"); }
}
dr.Close();
dr.Dispose();
this.deps.Clear();
this.deps = tempDeps;
this.WirteLog("读取部门数据结束,组织机构初始化成功!部门数量:" + this.deps.Count.ToString());
}
/// <summary>
/// 从数据库中添加一个部门到部门集合
/// </summary>
/// <param name="depID">部门ID</param>
/// <param name="DepName">部门名称</param>
/// <param name="SuperiorID">部门上级部门</param>
/// <param name="tDeps">部门集合</param>
private IMLibrary.Department DepfromDbToDeps(int depID, string DepName, int SuperiorID, IMLibrary.DepartmentCollections tDeps)
{
IMLibrary.Department dep = new Department(depID, DepName, SuperiorID);
tDeps.add(dep);
return dep;
}
#endregion
#region 初始化用户列表
/// <summary>
/// 初始化用户列表
/// </summary>
private void updateUserCollections()/// 初始化用户列表
{
System.Data.SqlClient.SqlDataReader drUserCount = null;
//System.Data.OracleClient.OracleDataReader drUserCount = null;
try
{
drUserCount = IMLibrary.SqlData.DataAccess.GetReaderBySql("select count(*) as userCount from SystemUsers");
//drUserCount = IMLibrary.OracleData.DataAccess.GetReaderBySql("select count(*) as userCount from gdtel_user");
}
catch { this.WirteLog("读取数据中用户数据表出现错误!"); }
if (drUserCount == null) return;
if (drUserCount.Read())
{
this.systemUsers = new UserInfo[Convert.ToUInt32(drUserCount[0]) + 1];
}
this.WirteLog("查询得知用户数为:" + (systemUsers.Length - 1).ToString());
drUserCount.Close();
System.Data.SqlClient.SqlDataReader dr = null;
//System.Data.OracleClient.OracleDataReader dr = null;
try
{
//dr = IMLibrary.SqlData.DataAccess.GetReaderBySql("select userName as userId,Name as userName,groupID as depId from users order by orderID asc,userID asc");
dr= IMLibrary.SqlData.DataAccess.GetReaderByProc("GetUserList", "");//获得所有系统用户数据dr
//dr = IMLibrary.OracleData.DataAccess.GetReaderBySql("select userName as userId,Name as userName,groupID as depId from gdtel_user");
}
catch { this.WirteLog("读取数据中用户数据表出现错误!");}
if (dr == null) return;
uint userCount = 0;//保留第一个下标
while (dr.Read())
{
userCount++;
systemUsers[userCount] = new UserInfo(userCount, Convert.ToString(dr["userId"]).Trim(), Convert.ToString(dr["userName"]).Trim(), Convert.ToInt32(dr["depId"]));
//this.WirteLog(Convert.ToString(dr["userId"]).Trim() +":"+ Convert.ToString(dr["userName"]).Trim() +":"+ Convert.ToInt32(dr["depId"]).ToString());
}
dr.Close();
dr.Dispose();
this.WirteLog("初始化用户数据表成功!用户数量为:" + (this.systemUsers.Length - 1).ToString());
}
#endregion
#region 将用户请求的部分部门信息发给用户
/// <summary>
/// 将用户请求的部分部门信息发给用户
/// </summary>
/// <param name="e"></param>
private void onSendDeps(DataArrivalEventArgs e)
{
//为不超过MTU限制,每次只发送5个部门数据
IMLibrary.ServerMsg msg = IMLibrary.Serializers.ByteToObj(e.Data) as IMLibrary.ServerMsg;
if(msg==null ){ return; }//抛掉非法数据
int requestCurrDep = IMLibrary.TextEncoder.bytesToInt(msg.msgContent);//获得要发送的超始部门序号位置
int i=0;
IMLibrary.DepartmentCollections tempDep = new DepartmentCollections();
foreach (IMLibrary.Department dep in this.deps)
{
i++;
if (i > requestCurrDep + 5)//每次发送5个部门的信息数据
break;
if (i > requestCurrDep)
tempDep.add(dep);
}
this.sendMsgToOneUser(7, IMLibrary.Serializers.ObjToByte(tempDep),e.IP,e.Port);
// this.WirteLog("用户要求发送从第" + requestCurrDep.ToString() + "个部门开始的部分部门信息数据。");
}
#endregion
#region 将用户请求的部分用户信息发给用户
/// <summary>
/// 将用户请求的部分用户信息发给用户
/// </summary>
/// <param name="e"></param>
private void onSendUsers(DataArrivalEventArgs e)
{
//为不超过MTU限制,每次只发送5个用户的基本数据
IMLibrary.ServerMsg msg;
msg = IMLibrary.Serializers.ByteToObj(e.Data) as IMLibrary.ServerMsg;
if (msg == null) { return; }//抛掉非法数据
uint requestCurrUser = IMLibrary.TextEncoder.bytesToUInt32(msg.msgContent) + 1;//获得要发送的超始用户序号位置
int SendUserCount = this.settings.sendUserCount ;//获得每次要发送的用户数
IMLibrary.UserCollections tempUsers = new UserCollections();//申明临时集合
for (uint index = requestCurrUser; index < (requestCurrUser + SendUserCount); index++)//将用户要求的用户数添加到集合
if (index < systemUsers.Length)
tempUsers.add(systemUsers[index]);
else
break;
this.sendMsgToOneUser(8, IMLibrary.Serializers.ObjToByte(tempUsers), e.IP, e.Port);
//this.WirteLog("用户要求发送从第" + requestCurrUser.ToString() + "个用户开始的部分用户信息数据。");
}
#endregion
#region 更新用户在线状态 onUserOnlineChanageState(DataArrivalEventArgs e)
/// <summary>
/// 更新用户在线状态
/// </summary>
/// <param name="e"></param>
private void onUserOnlineChanageState(DataArrivalEventArgs e)//用户更改在线状态事件(如联机改成脱机、离线、接听电话等状态)
{
IMLibrary.ServerMsg msg;
msg = IMLibrary.Serializers.ByteToObj(e.Data) as ServerMsg;
if (msg == null)
{this.WirteLog("用户联接状态确认事件中消息反序列化失败。非法用户-" + e.IP.ToString() + ":" + e.Port); return;}
//this.systemUsers[msg.ID].State = msg.msgContent[0];
this.systemUsers[msg.ID].tempState = msg.msgContent[0];
byte[] buf = new byte[1];
//if (this.systemUsers[msg.ID].State != 0)
//{
///连续发送二次,也免数据包丢失
this.sendMsgToOneUser(6, buf, e.IP, e.Port);//告诉用户与服务器保持联接状态
System.Threading.Thread.Sleep(50);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -