Skip to content

Commit

Permalink
staged new system for serialization
Browse files Browse the repository at this point in the history
  • Loading branch information
HeadhunterXamd committed May 31, 2016
1 parent 9034a1c commit 5a3e8c3
Show file tree
Hide file tree
Showing 4 changed files with 122 additions and 45 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,6 @@
################################################################################

/.vs/UnityServerBasics/v14/.suo
/UnityServerBasics/bin/Debug
/UnityServerBasics/obj/Debug
/UnityServerBasics/UnityServerBasics.csproj.user
84 changes: 42 additions & 42 deletions UnityServerBasics/Network/NetworkMessage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
namespace UnityServerBasics.Network
{
[Serializable]
class NetworkMessage
class NetworkMessage : Serialization.INetworkSerializer
{
/// <summary>
/// unique identifier for the networking system.
Expand Down Expand Up @@ -57,47 +57,47 @@ public NetworkMessage(string _sMessage, Player _cPlayer, int _iSequence = 0)
Sender = _cPlayer;
}

/// <summary>
/// Serialize the <see cref="NetworkMessage"/> in to bytes.
/// </summary>
/// <param name="_message">The message to serialize.</param>
/// <returns>A <see cref="byte[]"/></returns>
public static byte[] Serialize(NetworkMessage _message)
{
try
{
MemoryStream memStream = new MemoryStream();
IFormatter formatter = new BinaryFormatter();
// write the serializable class to the memory stream.
formatter.Serialize(memStream, _message);
memStream.Position = 0;
// return the memory stream as a byte[]
return memStream.ToArray();
}
catch (Exception)
{
throw new Exceptions.SerializeNetworkException("The message could not be serialized");
}
}
///// <summary>
///// Serialize the <see cref="NetworkMessage"/> in to bytes.
///// </summary>
///// <param name="_message">The message to serialize.</param>
///// <returns>A <see cref="byte[]"/></returns>
//public static byte[] Serialize(NetworkMessage _message)
//{
// try
// {
// MemoryStream memStream = new MemoryStream();
// IFormatter formatter = new BinaryFormatter();
// // write the serializable class to the memory stream.
// formatter.Serialize(memStream, _message);
// memStream.Position = 0;
// // return the memory stream as a byte[]
// return memStream.ToArray();
// }
// catch (Exception)
// {
// throw new Exceptions.SerializeNetworkException("The message could not be serialized");
// }
//}

/// <summary>
///
/// </summary>
/// <param name="_message"></param>
/// <returns></returns>
public static NetworkMessage Deserialize(byte[] _message)
{
try
{
MemoryStream memStream = new MemoryStream();
memStream.Write(_message, 0, _message.Length);
IFormatter formatter = new BinaryFormatter();
return (NetworkMessage)formatter.Deserialize(memStream);
}
catch (Exception)
{
throw new Exceptions.SerializeNetworkException("The message could not be deserialized");
}
}
///// <summary>
/////
///// </summary>
///// <param name="_message"></param>
///// <returns></returns>
//public static NetworkMessage Deserialize(byte[] _message)
//{
// try
// {
// MemoryStream memStream = new MemoryStream();
// memStream.Write(_message, 0, _message.Length);
// IFormatter formatter = new BinaryFormatter();
// return (NetworkMessage)formatter.Deserialize(memStream);
// }
// catch (Exception)
// {
// throw new Exceptions.SerializeNetworkException("The message could not be deserialized");
// }
//}
}
}
10 changes: 7 additions & 3 deletions UnityServerBasics/Network/Server.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using UnityServerBasics.Utilities;

Expand Down Expand Up @@ -41,10 +42,13 @@ class Server : IDisposable
/// </summary>
/// <param name="_port"></param>
/// <param name="_messageBacklog"></param>
public Server(int _port, EventQueue<NetworkMessage> _messageBacklog)
public Server(int _port, EventQueue<NetworkMessage> _messageBacklog = null)
{
this._port = _port;
MessageBacklog = _messageBacklog;
if (_messageBacklog != null)
MessageBacklog = _messageBacklog;
else
MessageBacklog = new EventQueue<NetworkMessage>();
Instance = this;
Console.WriteLine("Setting up the server...");
MessageReceived += ParseMessage;
Expand Down Expand Up @@ -107,7 +111,7 @@ private void Listener()
/// <param name="_lMessage"></param>
private void ParseMessage(byte[] _lMessage)
{
NetworkMessage message = NetworkMessage.Deserialize(_lMessage);
NetworkMessage message = NetworkMessage.Deserialize<NetworkMessage>(Encoding.UTF8.GetString(_lMessage));
MessageBacklog.Enqueue(message);
}

Expand Down
70 changes: 70 additions & 0 deletions UnityServerBasics/Properties/app.manifest
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app" />
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Specifying requestedExecutionLevel element will disable file and registry virtualization.
Remove this element if your application requires this virtualization for backwards
compatibility.
-->
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
<applicationRequestMinimum>
<PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true" ID="Custom" SameSite="site" />
<defaultAssemblyRequest permissionSetReference="Custom" />
</applicationRequestMinimum>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- A list of the Windows versions that this application has been tested on and is
is designed to work with. Uncomment the appropriate elements and Windows will
automatically selected the most compatible environment. -->
<!-- Windows Vista -->
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
<!-- Windows 7 -->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->
<!-- Windows 8 -->
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->
<!-- Windows 8.1 -->
<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->
<!-- Windows 10 -->
<!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />-->
</application>
</compatibility>
<!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher
DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need
to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should
also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. -->
<!--
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
</application>
-->
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<!--
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
-->
</assembly>

0 comments on commit 5a3e8c3

Please sign in to comment.