⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jabbermessagewatcher.cs

📁 语音视频功能 里面实现了基本的QQ与语音对话
💻 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 + -