📄 jabbermessagewatcher.cs
字号:
using System;
using System.IO;
using System.Xml;
using System.Threading;
using System.Windows.Forms;
using gowk.core.managers;
using gowk.net.Sockets;
using gowk.core.packets;
using gowk.net;
namespace gowk.core
{
/// <summary>
/// watch the steam
/// </summary>
public class JabberMessageWatcher
{
private delegate void JabberStreamErrerDelegate(StreamException e);
private delegate void JabberEventDelegate(JabberEventArgs e);
JabberEndPoint jep;
Thread listenThread;
public JabberMessageWatcher(JabberEndPoint jep)
{
this.jep=jep;
// this.jep.JabberStream.JabberStreamEnd+=new EventHandler(JabberStream_JabberStreamEnd);
}
/* private void JabberStream_JabberStreamEnd(object sender, EventArgs e)
{
this.jep.State=State.Disconnected;
}*/
public void Start()
{
try
{
XmlNode node=jep.JabberStreamReader.ReadStartStream();
if(node==null)
{
this.jep.State=State.Disconnected;
return;
}
}
catch(gowk.core.StreamException se)
{
System.Diagnostics.Trace.WriteLine("接收到无效的jabber标签");
// this.jep.Socket.Close();
jep.State=State.Disconnected;
return;
}
this.jep.State=State.Logining;
this.listenThread=new Thread(new ThreadStart(this.Listen));
this.listenThread.Name="message sink thread "+this.listenThread.GetHashCode().ToString();
this.listenThread.Start();
}
public void Stop()
{
if(this.listenThread!=null && this.listenThread.ThreadState==ThreadState.Running)this.listenThread.Abort();
}
private XmlElement ReadNewStanza()
{
try
{
return jep.JabberStreamReader.ReadStanza();
}
catch(StreamException see)
{
System.Diagnostics.Trace.WriteLine("接收到无效的jabber标签");
// this.jep.Socket.Close();
this.jep.State=State.Disconnected;
return null;
}
/* catch(System.IO.EndOfStreamException ese)
{
this.jep.State=State.Disconnected;
System.Diagnostics.Trace.WriteLine("end of stream");
return null;
}*/
}
private void Listen()
{
XmlElement xe=this.ReadNewStanza();
while(xe!=null)
{
Packet p=gowk.core.serizlize.JabberSerizlizer.Instance.Deserialize(xe);
gowk.core.managers.PacketTracker.Instance.OnMessage(p);
foreach(ManagerBase mb in this.jep.Managers)
{
mb.OnMessage(p);
}
// if(this.jep.State==State.Disconnected)break;
xe=this.ReadNewStanza();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -