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

📄 iqserializerhelper.cs

📁 语音视频功能 里面实现了基本的QQ与语音对话
💻 CS
字号:
using System;
using System.Xml;
using System.Xml.Serialization;

using gowk.core.packets;
using gowk.core.packets.querys;
using VCard=gowk.core.packets.VCard;
namespace gowk.core.serizlize
{
	/// <summary>
	/// IQSerializerHelper 的摘要说明。
	/// </summary>
	internal class IQSerializerHelper:SerizlizerHellper
	{
		public IQSerializerHelper()
		{
			//
			// TODO: 在此处添加构造函数逻辑
			//
		}
		public override bool CanDeserizlize(System.Xml.XmlElement xe)
		{
			return xe.LocalName=="iq";
		}
		protected XmlElementAttribute CreateXmlElementAttribute(string element,Type type,string ns)
		{
			XmlElementAttribute attr = new XmlElementAttribute();
			attr.ElementName = element;
			attr.Type = type;
			attr.Namespace=ns;
			return attr;
		}
		public override bool CanSerizlize(Packet p)
		{
			return p is IQ;
		}

		public override Type Target
		{
			get
			{
				return typeof(IQ);
			}
		}
	}
	internal class VCardIQSerializerHelper:IQSerializerHelper
	{
		public override bool CanDeserizlize(System.Xml.XmlElement xe)
		{
			return base.CanDeserizlize (xe) && xe.GetElementsByTagName("vCard",Namespace.VCARD).Count>0;
		}
		public override XmlAttributeOverrides GetOverrides(bool deserizlize)
		{
			XmlAttributeOverrides ovs=base.GetOverrides(deserizlize);

			XmlAttributes attrs = new XmlAttributes();
			attrs.XmlElements.Add(this.CreateXmlElementAttribute("vCard",typeof(VCard),Namespace.VCARD));
			ovs.Add(typeof(IQ),"vCard",attrs);

			XmlAttributes attrs2 = new XmlAttributes();
			attrs2.XmlElements.Add(new XmlElementAttribute("TEL",typeof(gowk.core.packets.TEL)));
			//	attrs.XmlElements.Add(this.CreateXmlElementAttribute("TEL",typeof(gowk.core.packets.VCardIQ.TEL),Namespace.VCARD));
			ovs.Add(typeof(VCard),"TEL",attrs2);

			XmlAttributes attrs3 = new XmlAttributes();
			attrs3.XmlElements.Add(this.CreateXmlElementAttribute("ADR",typeof(gowk.core.packets.ADR),null));
			ovs.Add(typeof(VCard),"ADR",attrs3);

			if(!deserizlize)
			{
				XmlAttributes attrs4= new XmlAttributes();
				attrs4.XmlElements.Add(this.CreateXmlElementAttribute("EMAIL",typeof(gowk.core.packets.EMAIL),null));
				ovs.Add(typeof(VCard),"EMAILs",attrs4);
			}

			return ovs;
		}
		public override bool CanSerizlize(Packet p)
		{
			if(p is VCardIQ)
			{
				return true;
			}
			return false;
		}
		public override Type Target
		{
			get
			{
				return typeof(VCardIQ);
			}
		}
		public override void OnUnknownElement(object sender, XmlElementEventArgs e)
		{
			base.OnUnknownElement (sender, e);
			XmlElement xe=e.Element;
			if(xe.Name=="EMAIL" && xe.NamespaceURI==gowk.core.packets.Namespace.VCARD)
			{
				EMAIL eml=new EMAIL();
				if(xe.SelectSingleNode("/HOME")!=null)eml.HOME="";
				if(xe.SelectSingleNode("/WORK")!=null)eml.WORK="";
				if(xe.SelectSingleNode("/INTERNET")!=null)eml.INTERNET="";
				if(xe.SelectSingleNode("/PTEF")!=null)eml.PTEF="";
				if(xe.SelectSingleNode("X400")!=null)eml.X400="";
				XmlNode id=xe.SelectSingleNode("USERID");
				if(id!=null && id.InnerText!=null && id.InnerText.Trim()!=string.Empty)
				{
					eml.USERID=id.InnerText.Trim();
				}
				string txt=xe.InnerText;
				if(txt!=null && txt.Trim()!=string.Empty)
				{
					eml.USERID=txt.Trim();
				}
				VCard vc=(VCard)e.ObjectBeingDeserialized;
				if(vc.EMAILs==null)
				{
					vc.EMAILs=new EMAIL[]{eml};
				}
				else
				{
					EMAIL[] emls=new EMAIL[vc.EMAILs.Length+1];
					emls[0]=eml;
					vc.EMAILs.CopyTo(emls,1);
					vc.EMAILs=emls;
				}
			}
		}
	}

	internal class AuthIQSerializerHelper:IQSerializerHelper
	{
		public override bool CanDeserizlize(System.Xml.XmlElement xe)
		{
			return base.CanDeserizlize (xe) && xe.GetElementsByTagName("query",Namespace.AUTH).Count>0;
		}
		public override XmlAttributeOverrides GetOverrides(bool deserizlize)
		{
			XmlAttributeOverrides ovs=base.GetOverrides(deserizlize);
			XmlAttributes attrs = new XmlAttributes();
			attrs.XmlElements.Add(this.CreateXmlElementAttribute("query",typeof(AuthQuery),Namespace.AUTH));
			ovs.Add(typeof(IQ), "Query", attrs);
			return ovs;
		}
		public override bool CanSerizlize(Packet p)
		{
			if(p is IQ)
			{
				IQ iq=(IQ)p;
				if(iq.Query!=null)
				{
					return iq.Query is AuthQuery;
				}
			}
			return false;
		}

	}
	internal class RegisterIQSerializerHelper:IQSerializerHelper
	{
		public override bool CanDeserizlize(System.Xml.XmlElement xe)
		{
			return base.CanDeserizlize (xe)&&xe.GetElementsByTagName("query",Namespace.REGISTER).Count>0;
		}
		public override XmlAttributeOverrides GetOverrides(bool deserizlize)
		{
			XmlAttributeOverrides ovs=base.GetOverrides(deserizlize);
			XmlAttributes attrs = new XmlAttributes();
			attrs.XmlElements.Add(this.CreateXmlElementAttribute("query",typeof(RegisterQuery),Namespace.REGISTER));
			ovs.Add(typeof(IQ), "Query", attrs);
			return ovs;
		}
		public override bool CanSerizlize(Packet p)
		{
			if(p is IQ)
			{
				IQ iq=(IQ)p;
				if(iq.Query!=null)
				{
					return iq.Query is RegisterQuery;
				}
			}
			return false;
		}
	}
	internal class RosterIQSerializerHelper:IQSerializerHelper
	{
		public override bool CanDeserizlize(System.Xml.XmlElement xe)
		{
			return base.CanDeserizlize (xe)&&xe.GetElementsByTagName("query",Namespace.ROSTER).Count>0;
		}
		public override XmlAttributeOverrides GetOverrides(bool deserizlize)
		{
			XmlAttributeOverrides ovs=base.GetOverrides(deserizlize);
			XmlAttributes attrs = new XmlAttributes();
			attrs.XmlElements.Add(this.CreateXmlElementAttribute("query",typeof(RosterQuery),Namespace.ROSTER));
			//		attrs.XmlElements.Add(new XmlElementAttribute("item",typeof(Item)));
			ovs.Add(typeof(IQ), "Query", attrs);
				
			XmlAttributes atts2 = new XmlAttributes();
			atts2.XmlElements.Add(new XmlElementAttribute("item",typeof(Item)));
			ovs.Add(typeof(RosterQuery),"Items",atts2);

			return ovs;
		}
		public override bool CanSerizlize(Packet p)
		{
			if(p is IQ)
			{
				IQ iq=(IQ)p;
				if(iq.Query!=null)
				{
					return iq.Query is RosterQuery;
				}
			}
			return false;
		}
	}
	internal class SearchIQSerializerHelper:IQSerializerHelper
	{
		public override bool CanDeserizlize(System.Xml.XmlElement xe)
		{
			return base.CanDeserizlize (xe)&&xe.GetElementsByTagName("query",Namespace.SEARCH).Count>0;
		}
		public override XmlAttributeOverrides GetOverrides(bool deserizlize)
		{
			XmlAttributeOverrides ovs=base.GetOverrides(deserizlize);
			XmlAttributes attrs = new XmlAttributes();
			attrs.XmlElements.Add(this.CreateXmlElementAttribute("query",typeof(SearchQuery),Namespace.SEARCH));
			ovs.Add(typeof(IQ), "Query", attrs);

			XmlAttributes attrs2 = new XmlAttributes();
			attrs2.XmlElements.Add(new XmlElementAttribute("item",typeof(SearchQuery.item)));
			ovs.Add(typeof(gowk.core.packets.querys.SearchQuery), "Item", attrs2);
			return ovs;
		}
		public override bool CanSerizlize(Packet p)
		{
			if(p is IQ)
			{
				IQ iq=(IQ)p;
				if(iq.Query!=null)
				{
					return iq.Query is SearchQuery;
				}
			}
			return false;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -