www.pudn.com > QQ2008.rar > MessageServer.cs
using System;
using System.Net.Sockets;
using System.Net;
using System.Threading;
using QQloginCont;
using System.ComponentModel;
using System.Windows.Forms;
namespace QQ
{
///
/// MessageServer 的摘要说明。
///
public class MessageServer
{
private bool run;
private TcpListener qTcpListener = null;
private Thread ServerTh;
private string[] parameter=new string[3]{"","",""};
public Control Co;
public MessageServer()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
///
/// 初始化服务
///
/// 当前用户id
///
public bool IniServer(string uid)
{
string IpEnd=UserInf.GetMySerInf(uid);
if(IpEnd!="-1")
{
CheckOutIpPoint check=new CheckOutIpPoint(IpEnd);
IPAddress Ad=IPAddress.Parse(check.IpAdd);
IPEndPoint server=new IPEndPoint(Ad,5281);
qTcpListener=new TcpListener(server);
qTcpListener.Start();
ServerTh=new Thread(new ThreadStart(ServerIng));
run=true;
ServerTh.Start();
ServerTh.IsBackground=true;
return(true);
}
else
{
return(false);
}
}
public void DisposeServer()
{
run=false;
qTcpListener.Stop();
ServerTh.Abort();
}
private void ServerIng()
{
while (run)
{
//服务接收处理
Socket QS;
QS = qTcpListener.AcceptSocket();
Byte[] Stream = new Byte[1024];
QS.Receive(Stream);
string save = System.Text.Encoding.UTF8.GetString(Stream);
CheckOutDate(save);
switch (parameter[0])
{
case "1"://该用户上线
TrafficMsg.PostMessage(ShareDate.MainFormHand,500,1,0);
Login.SendMsgToGetOnlineInf();//获取新的在线用户列表
System.Threading.Thread ShowOnline=new Thread(new ThreadStart(ShowInfWin));
ShowOnline.Start();
break;
case "2"://接收到来自用户的消息;格式为(标识;源用户;消息内容)
TrafficMsg.PostMessage(ShareDate.MainFormHand,500,2,0);//发送播放声音提示消息
System.Threading.Thread SM=new Thread(new ThreadStart(ShowMsg));
SM.Start();//创建聊天窗口
break;
default://发送错误参数
break;
}
QS.Close();
}
}
private void ShowInfWin()
{
Online showInf=new Online("用户:"+parameter[1]+"上线啦!\n请使用图标右键刷新资料!");
ISynchronizeInvoke synchronizer;
synchronizer = showInf;
MethodInvoker invoker = new MethodInvoker(showInf.Show);
Co.Invoke(invoker,null);
showInf.Show();
}
private void ShowMsg()
{
bool isHaveWin=false;
int MsgId=0;
int hand=0;
string msg="";
string FriendName=UserInf.GetUserNameByUserNumber(parameter[1].Trim());
if(FriendName.Trim()=="")
{
msg+=parameter[1].Trim();
}
else
{
msg+=FriendName;
}
msg+=":("+UserInf.GetTime()+")\n "+parameter[2].Trim();
for(int i=0;i