|
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using Hik.Communication.Scs.Communication.Messages;
namespace Hik.Communication.Scs.Communication.Protocols
{
/// <summary>
/// Default communication protocol between server and clients to send and receive a message.
/// It uses .NET binary serialization to write and read messages.
/// </summary>
internal class BinarySerializationProtocol : IScsWireProtocol
{
/// <summary>
/// Writes a message to a stream.
/// </summary>
/// <param name="message">Message to write</param>
/// <param name="stream">Stream that is used to write message</param>
public void WriteMessage(IScsMessage message, Stream stream)
{
new BinaryFormatter().Serialize(stream, message);
}
/// <summary>
/// Reads a message from a stream.
/// </summary>
/// <param name="stream">Stream taht is used to read message</param>
/// <returns>Message that is read from stream</returns>
public IScsMessage ReadMessage(Stream stream)
{
var binaryFormatter = new BinaryFormatter
{
AssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple,
Binder = new DeserializationAppDomainBinder()
};
return (IScsMessage)binaryFormatter.Deserialize(stream);
}
/// <summary>
/// This class is used in deserializing to allow deserializing objects that are defined
/// in assemlies that are load in runtime (like PlugIns).
/// </summary>
private sealed class DeserializationAppDomainBinder : SerializationBinder
{
public override Type BindToType(string assemblyName, string typeName)
{
var toAssemblyName = assemblyName.Split(',')[0];
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
{
if (assembly.FullName.Split(',')[0] == toAssemblyName)
{
return assembly.GetType(typeName);
}
}
return null;
}
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
I have started programming at 14 years old using Pascal as hobby. Then I interested in web development (HTML, JavaScript, ASP...) before university.
I graduated from Sakarya University Computer Engineering. At university, I learned C++, Visual Basic.NET, C#, ASP.NET and Java. I partly implemented ARP, IP and TCP protocols in Java as my final term project.
Now, I am working on Windows and web based software development mostly using Microsoft technologies in my own company.
My open source projects:
* ABP Framework:
https://abp.io
* jTable:
http://jtable.org
* Others:
https://github.com/hikalkan
My personal web site:
https://halilibrahimkalkan.com