📄 iqserializerhelper.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 + -