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

📄 externalinterfaceserializer.cs

📁 flash与C#通信,一个非常非常不错的程序
💻 CS
字号:
using System;
using System.Collections;
using System.Xml;
using System.IO;
using System.Text;
 
namespace WindowsApplication1
{
	public class ExternalInterfaceSerializer
	{
		public string functionName;
		public ArrayList arguments;
		private void WriteArray(XmlTextWriter writer, ArrayList array)
		{
			writer.WriteStartElement("array");
    
			int index = 0;
 
			foreach (Object value in array)
			{
				writer.WriteStartElement("property");
				writer.WriteAttributeString("id", index.ToString());
				WriteElement(writer, value);
				writer.WriteEndElement();
				index++;
			}
 
			writer.WriteEndElement();
		}
		private void WriteObject(XmlTextWriter writer, Hashtable table)
		{
			writer.WriteStartElement("object");
    
			foreach (DictionaryEntry entry in table)
			{
				writer.WriteStartElement("property");
				writer.WriteAttributeString("id", entry.Key.ToString());
				WriteElement(writer, entry.Value);
				writer.WriteEndElement();
			}
 
			writer.WriteEndElement();
		}
		private void WriteElement(XmlTextWriter writer, Object value)
		{
			if (value == null)
			{
				writer.WriteStartElement("null");
				writer.WriteEndElement();
			}
			else if (value is string)
			{
				writer.WriteStartElement("string");
				writer.WriteString(value.ToString());
				writer.WriteEndElement();
			}
			else if (value is bool)
			{
				writer.WriteStartElement((bool)value ? "true" : "false");
				writer.WriteEndElement();
			}
			else if (value is Single || value is Double || value is int || value is uint)
			{
				writer.WriteStartElement("number");
				writer.WriteString(value.ToString());
				writer.WriteEndElement();
			}
			else if (value is ArrayList)
			{
				WriteArray(writer, (ArrayList)value);
			}
			else if (value is Hashtable)
			{
				WriteObject(writer, (Hashtable)value);
			}
			else
			{
				throw new Exception("Could not encode type of " + value);
			}
		}
		public string EncodeInvoke(string functionName, ArrayList arguments)
		{
			StringBuilder sb = new StringBuilder();
 
			XmlTextWriter writer = new XmlTextWriter(new StringWriter(sb));
 
			writer.WriteStartElement("invoke");
			writer.WriteAttributeString("name", functionName);
			writer.WriteAttributeString("returntype", "xml");
 
			writer.WriteStartElement("arguments");
 
			foreach (Object value in arguments)
			{
				WriteElement(writer, value);
			}
 
			writer.WriteEndElement();
			writer.WriteEndElement();
 
			writer.Flush();
			writer.Close();
 
			return sb.ToString();
		}
 
		public string EncodeResult(Object value)
		{
			StringBuilder sb = new StringBuilder();
 
			XmlTextWriter writer = new XmlTextWriter(new StringWriter(sb));
 
			WriteElement(writer, value);
 
			writer.Flush();
			writer.Close();
 
			return sb.ToString();
		}
 
		public void DecodeInvoke(string xml)
		{
			XmlTextReader reader = new XmlTextReader(xml, XmlNodeType.Document, null);
 
			reader.Read();
 
			functionName = reader.GetAttribute("name");
			arguments = new ArrayList();
 
			reader.ReadStartElement("invoke");   
			reader.ReadStartElement("arguments");
 
			while (!(reader.NodeType == XmlNodeType.EndElement && reader.Name == "arguments"))
			{
				arguments.Add(ReadElement(reader));
			}
 
			reader.ReadEndElement();
			reader.ReadEndElement();
		}
 
		public Object DecodeResult(string xml)
		{
			XmlTextReader reader = new XmlTextReader(xml, XmlNodeType.Document, null);
			reader.Read();
			return ReadElement(reader);
		}
 
		private ArrayList ReadArray(XmlTextReader reader)
		{
			ArrayList array = new ArrayList();
 
			while (!(reader.NodeType == XmlNodeType.EndElement && reader.Name == "array"))
			{
				int id = int.Parse(reader.GetAttribute("id"));
				reader.ReadStartElement("property");
				array.Add(ReadElement(reader));
				reader.ReadEndElement();
			}
 
			return array;
		}
 
		private Hashtable ReadObject(XmlTextReader reader)
		{
			Hashtable table = new Hashtable();
 
			while (!(reader.NodeType == XmlNodeType.EndElement && reader.Name == "object"))
			{
				string id = reader.GetAttribute("id");
				reader.ReadStartElement("property");
				table.Add(id, ReadElement(reader));
				reader.ReadEndElement();
			}
 
			return table;
		}
 
		private Object ReadElement(XmlTextReader reader)
		{
			if (reader.NodeType != XmlNodeType.Element)
			{
				throw new XmlException();
			}
 
			if (reader.Name == "true")
			{
				reader.Read();
				return true;
			}
 
			if (reader.Name == "false")
			{
				reader.Read();
				return false;
			}
 
			if (reader.Name == "null" || reader.Name == "undefined")
			{
				reader.Read();
				return null;
			}
 
			if (reader.IsStartElement("number"))
			{
				reader.ReadStartElement("number");
				double value = Double.Parse(reader.Value);
				reader.Read();
				reader.ReadEndElement();
				return value;
			}
 
			if (reader.IsStartElement("string"))
			{
				reader.ReadStartElement("string");
				string value = reader.Value;
				reader.Read();
				reader.ReadEndElement();
				return value;
			}
    
			if (reader.IsStartElement("array"))
			{
				reader.ReadStartElement("array");
				ArrayList value = ReadArray(reader);
				reader.ReadEndElement();
				return value;
			}
 
			if (reader.IsStartElement("object"))
			{
				reader.ReadStartElement("object");
				Hashtable value = ReadObject(reader);
				reader.ReadEndElement();
				return value;
			}
 
			throw new XmlException();
		}
 
	}
}

⌨️ 快捷键说明

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