From bd0cb868e19e1bc8ed487fc5914dded5ade2a392 Mon Sep 17 00:00:00 2001 From: Forest Date: Sat, 31 Oct 2020 15:07:30 -0700 Subject: [PATCH] Remove documentation project --- Hazel.Documentation/Content Layout.content | 11 - Hazel.Documentation/Content/Introduction.aml | 24 -- Hazel.Documentation/Content/Quickstart.aml | 337 ------------------ .../Technical Details/Protocols/Protocols.aml | 14 - .../Technical Details/Protocols/TCP.aml | 33 -- .../Technical Details/Protocols/UDP-RUDP.aml | 146 -------- .../Technical Details/Technical Details.aml | 14 - Hazel.Documentation/Content/Welcome.aml | 55 --- .../Hazel.Documentation.shfbproj | 121 ------- .../docinclude/TcpClientExample.cs | 24 -- .../docinclude/TcpListenerExample.cs | 23 -- .../docinclude/UdpClientExample.cs | 24 -- .../docinclude/UdpListenerExample.cs | 23 -- Hazel.Documentation/docinclude/common.xml | 31 -- Hazel.Documentation/icons/Help.png | Bin 4942 -> 0 bytes Hazel.sln | 9 +- 16 files changed, 2 insertions(+), 887 deletions(-) delete mode 100644 Hazel.Documentation/Content Layout.content delete mode 100644 Hazel.Documentation/Content/Introduction.aml delete mode 100644 Hazel.Documentation/Content/Quickstart.aml delete mode 100644 Hazel.Documentation/Content/Technical Details/Protocols/Protocols.aml delete mode 100644 Hazel.Documentation/Content/Technical Details/Protocols/TCP.aml delete mode 100644 Hazel.Documentation/Content/Technical Details/Protocols/UDP-RUDP.aml delete mode 100644 Hazel.Documentation/Content/Technical Details/Technical Details.aml delete mode 100644 Hazel.Documentation/Content/Welcome.aml delete mode 100644 Hazel.Documentation/Hazel.Documentation.shfbproj delete mode 100644 Hazel.Documentation/docinclude/TcpClientExample.cs delete mode 100644 Hazel.Documentation/docinclude/TcpListenerExample.cs delete mode 100644 Hazel.Documentation/docinclude/UdpClientExample.cs delete mode 100644 Hazel.Documentation/docinclude/UdpListenerExample.cs delete mode 100644 Hazel.Documentation/docinclude/common.xml delete mode 100644 Hazel.Documentation/icons/Help.png diff --git a/Hazel.Documentation/Content Layout.content b/Hazel.Documentation/Content Layout.content deleted file mode 100644 index dd7c5b4..0000000 --- a/Hazel.Documentation/Content Layout.content +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/Hazel.Documentation/Content/Introduction.aml b/Hazel.Documentation/Content/Introduction.aml deleted file mode 100644 index f7a891e..0000000 --- a/Hazel.Documentation/Content/Introduction.aml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - Welcome to the Hazel documentation! Here you will find technical - details, API references and tutorials for getting started with Hazel. - - - Hazel Networking is an open source low level networking library for C# providing - connection orientated, message bassed communication via TCP, UDP and - RUDP. You can download it from Github - - here - https://github.com/DarkRiftNetworking/Hazel-Networking - _blank - - . - - - - - \ No newline at end of file diff --git a/Hazel.Documentation/Content/Quickstart.aml b/Hazel.Documentation/Content/Quickstart.aml deleted file mode 100644 index 6cc3943..0000000 --- a/Hazel.Documentation/Content/Quickstart.aml +++ /dev/null @@ -1,337 +0,0 @@ - - - - - - - Hazel is a low level networking library that takes away a lot of the pain of writing sockets. Hazel provides the guarantee of connection orientated, message based communication across TCP, UDP and RUDP. - - - This guide will take you through the stages of writing a console based server and connecting to it from a console based client. - - - - - -
- Creating a Server - - - Creating a Listener - - - - Create a new solution containing a Console project named "Server" (or at least something obvious). - - - - - Add a reference to Hazel.dll in the project. - - - - - Modify the default file to look like this, we'll go through each part individually. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Net; - -using Hazel; -using Hazel.Tcp; - -namespace HazelExample -{ - class ServerExample - { - static ConnectionListener listener; - - public static void Main(string[] args) - { - listener = new TcpConnectionListener(IPAddress.Any, 4296); - - listener.NewConnection += NewConnectionHandler; - - Console.WriteLine("Starting server!"); - - listener.Start(); - - Console.WriteLine("Press any key to continue..."); - - Console.ReadKey(); - - listener.Close(); - } - } -} - - - Firstly we need to tell the compiler that we are using Hazel; and using Hazel.Tcp; so we have access to Hazel's general and TCP specific types. Secondly we create a T:Hazel.ConnectionListener, these wait on a specified port and accept new clients to the server invoking the E:Hazel.ConnectionListener.NewConnection event each time a new client connects. - - - We then instruct the ConnectionListener to begin listening for new clients by calling M:ConnectionListener.Start and then finally we close the listener using M:ConnectionListener.Close. - - - In this circumstance it would be much better if we enclosed the listener within a using block as it implements IDisposable, however for the majority of use cases you are more likely to use the listener in this way. If you want to see it used in a using block then look at the unit tests. - - - If you want to use UDP instead of TCP then it is as simple as including the Hazel.Udp namespace and creating a T:UdpConnectionListener instead. - - - - - - - - Handling Events - - - - In the last example we subscribed to the E:ConnectionListener.NewConnection event but we never spsecified what to do in that event. Add the following method to your code. - -static void NewConnectionHandler(object sender, NewConnectionEventArgs args) -{ - Console.WriteLine("New connection from " + args.Connection.EndPoint.ToString(); - - args.Connection.DataReceived += DataReceivedHandler; -} - - This method is fairly simple, it follows the standard event handler delegate and take a sender (in this case it will be the ConnectionListener that called the event) and some args. The args contain a Connection which is the main object we use for communication with clients. - You can imagine this process in a similar way to TCP. You create a listener which creates sockets on the server side for each client socket that connects to it. - In this method we simply print out the IP of the client that just connected and then we subscribe to any data that this client sends us. You may also want to store the connection here for later reference as Hazel doesn't maintain a list of connection for you. - - - - - Once again we've got an undeclared event handler so lets fill that in now. - -private static void DataReceivedHandler(object sender, DataEventArgs args) -{ - Connection connection = (Connection)sender; - - Console.WriteLine("Received (" + string.Join<byte>(", ", args.Bytes) + ") from " + connection.EndPoint.ToString()); - - connection.SendBytes(args.Bytes, args.SendOption); - - args.Recycle(); -} - - Again this method follows the standard event handler delegate and this time we make use of the sender parameter to get the connection that received the data. We then go on to print out the data received and then we send it back to the client using M:ConnectionListener.SendBytes. When we send we specify that the send option should be the same as the data that was received, we'll talk more about send options later. - You have also probably noticed that I didn't mention the M:DataEventArgs.Recycle call. Recycle is an optional call that tells Hazel that it is now safe to use the object again rather than creating a new one and having to wait for the GC to collect the old object. If you are sending a lot of data then you will get less GC runs if you call Recycle but it is not necerssary to call it and if you dont the GC will collect it as normal. Also note that you should only call Recycle once you are done using the object otherwise the data inside it may change! - - - - - - In total, you should have something like this. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Net; - -using Hazel; -using Hazel.Tcp; - -namespace HazelExample -{ - class ServerExample - { - static ConnectionListener listener; - - public static void Main(string[] args) - { - listener = new TcpConnectionListener(IPAddress.Any, 4296); - - listener.NewConnection += NewConnectionHandler; - - Console.WriteLine("Starting server!"); - - listener.Start(); - - Console.WriteLine("Press any key to continue..."); - - Console.ReadKey(); - - listener.Close(); - } - - static void NewConnectionHandler(object sender, NewConnectionEventArgs args) - { - Console.WriteLine("New connection from " + args.Connection.EndPoint.ToString(); - - args.Connection.DataReceived += DataReceivedHandler; - - args.Recycle(); - } - - private static void DataReceivedHandler(object sender, DataEventArgs args) - { - Connection connection = (Connection)sender; - - Console.WriteLine("Received (" + string.Join<byte>(", ", args.Bytes) + ") from " + connection.EndPoint.ToString()); - - connection.SendBytes(args.Bytes, args.SendOption); - - args.Recycle(); - } - } -} - - -
- -
- Creating a Client - - - Connecting to a Server - - - - Create a new project in your solution for th client and add a reference to Hazel.dll. - - - - - - Modify the default file to contain the following. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -using Hazel; -using Hazel.Tcp; - -namespace HazelExample -{ - class ClientExample - { - static Connection connection; - - public static void Main(string[] args) - { - NetworkEndPoint endPoint = new NetworkEndPoint("127.0.0.1", 4296); - - connection = new TcpConnection(endPoint); - - connection.DataReceived += DataReceived; - - Console.WriteLine("Connecting!"); - - connection.Connect(); - - Console.WriteLine("Press any key to continue..."); - - Console.ReadKey(); - - connection.Close(); - } - } -} - - As you can see you simply create a T:NetworkEndPoint for the remote server and then pass it into a new T:Connection. Then you can setup any events needed and finally call M:Connection.Connect to begin the connection. - Finally we close the connection using M:Connection.Close. Again, Connection implements IDisposable and so must be closed, if it is easier you could wrap it in a using block. - - If you are using UDP instead of TCP then include the Hazel.Udp namespace and create a T:UdpClientConnection instead. - - - - - - - - Handling Events - - - - Add the following event handler to receive data, you'll notice that this is the same event we used in the server and so it will not be explained. - -private static void DataReceived(object sender, DataEventArgs args) -{ - Console.WriteLine("Received (" + string.Join<byte>(", ", args.Bytes) + ") from " + connection.EndPoint.ToString()); - - args.Recycle(); -} - - - - - - - - Sending Messages - - - - Sending a message is the same for both the server and client, you simply call M:Connection.SendBytes on your connection. - Add the following line after the call to Connect - -connection.SendBytes(new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }); - - - - - - - You should have something like this. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -using Hazel; -using Hazel.Tcp; - -namespace HazelExample -{ - class ClientExample - { - static Connection connection; - - public static void Main(string[] args) - { - NetworkEndPoint endPoint = new NetworkEndPoint("127.0.0.1", 4296); - - connection = new TcpConnection(endPoint); - - connection.DataReceived += DataReceived; - - Console.WriteLine("Connecting!"); - - connection.Connect(); - - connection.SendBytes(new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }); - - Console.WriteLine("Press any key to continue..."); - - Console.ReadKey(); - - connection.Close(); - } - - private static void DataReceived(object sender, DataEventArgs args) - { - Console.WriteLine("Received (" + string.Join<byte>(", ", args.Bytes) + ") from " + connection.EndPoint.ToString()); - - args.Recycle(); - } - } -} - - -
-
-
\ No newline at end of file diff --git a/Hazel.Documentation/Content/Technical Details/Protocols/Protocols.aml b/Hazel.Documentation/Content/Technical Details/Protocols/Protocols.aml deleted file mode 100644 index 46e03af..0000000 --- a/Hazel.Documentation/Content/Technical Details/Protocols/Protocols.aml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - In order to provide the guarantees that it does, Hazel augments each - transport protocol with its own meta data (or header data) that is - hidden from users. - - - - - \ No newline at end of file diff --git a/Hazel.Documentation/Content/Technical Details/Protocols/TCP.aml b/Hazel.Documentation/Content/Technical Details/Protocols/TCP.aml deleted file mode 100644 index a6259c4..0000000 --- a/Hazel.Documentation/Content/Technical Details/Protocols/TCP.aml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - Hazel's TCP protocol is fairly simple as TCP already provides connection - based communication and thus only needs a message system implementing. - - - -
- Header Data - - - The TCP protocol is fairly simple interms of header. 4 bytes are - added to mark the number of bytes in each message. - - - - Length (MSB) - Length - Length - Length (LSB) - Data... - -
- All header data in Hazel is encoded in big endian format. -
-
- -
-
\ No newline at end of file diff --git a/Hazel.Documentation/Content/Technical Details/Protocols/UDP-RUDP.aml b/Hazel.Documentation/Content/Technical Details/Protocols/UDP-RUDP.aml deleted file mode 100644 index 31dfb62..0000000 --- a/Hazel.Documentation/Content/Technical Details/Protocols/UDP-RUDP.aml +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - - UDP provides message based communication however it is not connection - oriented nor does it have any built in functionality for reliable or - fragmented delivery of messages hence the implementation to cover this - if fairly complicated. - - - -
- Header Data - - - The UDP protocol has multiple layers of header data depending on the - send options that are requested with the message. - - - - Unreliable - Type - Data... -   -   - - - Reliable - Type - ID (MSB) - ID (LSB) - Data... - -
- All header data in Hazel is encoded in big endian format. - - In both of these, Type is an identifier - that holds the SendOption or another value indicating a control - packet of data. The most significant 4 bits of - Type are reserved for future use and the - least significant bits specify the send option flags for the message. - - - - - 128 - 64 - 32 - 16 - 8 - 4 - 2 - 1 - - - - Reserved - Reserved - Reserved - Reserved - Control - Reserved - Fragmented - Reliable - -
- - Reliable and - Fragmented are both flags for their - respective send option, Control, if set, - specifies that the 3 least significant bits refer to a control code: - - - - 0 - Hello - - - 1 - Disconnect - - - 2 - Acknowledgment - -
-
-
- -
- Reliable Delivery - - - To implement reliable delivery 2 ID bytes are sent which identify the - packet. When the receiver receives the data is replys with an - acknowledgement packet as follows: - - - - Acknowledgement - Type - ID (MSB) - ID (LSB) - -
- - Where type is specifying an acknowledgement packet as laid out above. - - - If the sending client does not receive an acknowledgement after a - specific amount of time elapses from the pakcet being sent then it - resends that packet and thetime before the next resend of that packet - is doubled. When the sending client receives the acknowledgement is - should not resend the data again. - - - The receiving client must also ensure that it does not present the - same packet to the user twice but must acknowledge any packets it - receives, even if it has already received that packet, in case an - acknowledgement is lost. - - - After a specific number of resends without acknowledgement a sending - client may mark assume that communication has been interrupted and - thus mark the connection as disconnected. - -
-
- -
- Keepalive packets - - - Keepalive packets should be sent after a specific time has elapsed - since the last packet (either keepalive, acknowledgement or user sent) - was transmitted and should be sent using reliable delivery so that an - acknowledgement can be received to indicate communication has not been - lost. As packets that are not acknowledged should cause a - disconnection no additional logic is required for keepalives. - - -
-
-
\ No newline at end of file diff --git a/Hazel.Documentation/Content/Technical Details/Technical Details.aml b/Hazel.Documentation/Content/Technical Details/Technical Details.aml deleted file mode 100644 index 9b4729e..0000000 --- a/Hazel.Documentation/Content/Technical Details/Technical Details.aml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - Underneath Hazel there are a lot of technicalities, this section will - help outline those details so you understand Hazel's implementations - better. - - - - - \ No newline at end of file diff --git a/Hazel.Documentation/Content/Welcome.aml b/Hazel.Documentation/Content/Welcome.aml deleted file mode 100644 index 3143860..0000000 --- a/Hazel.Documentation/Content/Welcome.aml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - This is a sample conceptual topic. You can use this as a starting point for adding more conceptual -content to your help project. - - -
- Getting Started - - To get started, add a documentation source to the project (a Visual Studio solution, project, or -assembly and XML comments file). See the Getting Started topics in the Sandcastle Help -File Builder's help file for more information. The following default items are included in this project: - - - - ContentLayout.content - Use the content layout file to manage the -conceptual content in the project and define its layout in the table of contents. - - - - The .\media folder - Place images in this folder that you will reference -from conceptual content using medialLink or mediaLinkInline -elements. If you will not have any images in the file, you may remove this folder. - - - - The .\icons folder - This contains a default logo for the help file. You -may replace it or remove it and the folder if not wanted. If removed or if you change the file name, update -the Transform Args project properties page by removing or changing the filename in the -logoFile transform argument. Note that unlike images referenced from conceptual topics, -the logo file should have its BuildAction property set to Content. - - - - The .\Content folder - Use this to store your conceptual topics. You may -name the files and organize them however you like. One suggestion is to lay the files out on disk as you have -them in the content layout file as shown in this project but the choice is yours. Files can be added via the -Solution Explorer or from within the content layout file editor. Files must appear in the content layout file -in order to be compiled into the help file. - - - - See the Conceptual Content topics in the Sandcastle Help File Builder's -help file for more information. See the Sandcastle MAML Guide for details on Microsoft -Assistance Markup Language (MAML) which is used to create these topics. - -
- - - - -
-
diff --git a/Hazel.Documentation/Hazel.Documentation.shfbproj b/Hazel.Documentation/Hazel.Documentation.shfbproj deleted file mode 100644 index fdb8d71..0000000 --- a/Hazel.Documentation/Hazel.Documentation.shfbproj +++ /dev/null @@ -1,121 +0,0 @@ - - - - - Debug - AnyCPU - 2.0 - b90bb577-2080-4c22-ae86-fb0ccfb40920 - 2015.6.5.0 - - Hazel.Documentation - Hazel.Documentation - Hazel.Documentation - - .NET Framework 3.5 - .\Help\ - Hazel.Documentation - en-US - - - - - - - - - - - - - 100 - OnlyWarningsAndErrors - Website - False - False - False - False - 1.0.0.0 - 2 - False - Standard - Blank - False - VS2013 - False - MemberName - Hazel Documentation - BelowNamespaces - Msdn - Msdn - False - True - Hazel Networking is a low-level networking library for C# providing connection orientated, message based communication via TCP, UDP and RUDP. -Its aim is to provide a standardized interface for web communication so that using and switching between protocols is incredibly simple. -Hazel is going to be the basis of DarkRift 2 and it is being released completely open source so that members of the community can make use of it, improve it and help find any bugs before DarkRift 2 is released. -Hazel can be downloaded as a NuGet package here or you can get the latest build directly from the releases page here! - - - Namespace for all classes shared between multiple protocol types. -Namespace for all TCP communication classes. -Namespace for all UDP communication classes. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OnBuildSuccess - - \ No newline at end of file diff --git a/Hazel.Documentation/docinclude/TcpClientExample.cs b/Hazel.Documentation/docinclude/TcpClientExample.cs deleted file mode 100644 index 8138f6b..0000000 --- a/Hazel.Documentation/docinclude/TcpClientExample.cs +++ /dev/null @@ -1,24 +0,0 @@ -class TcpClientExample -{ - static void Main(string[] args) - { - using (TcpConnection connection = new TcpConnection()) - { - ManualResetEvent e = new ManualResetEvent(false); - - //Whenever we receive data print the number of bytes and how it was sent - connection.DataReceived += (object sender, DataReceivedEventArgs a) => - Console.WriteLine("Received {0} bytes via {1}!", a.Bytes.Length, a.SendOption); - - //When the end point disconnects from us then release the main thread and exit - connection.Disconnected += (object sender, DisconnectedEventArgs a) => - e.Set(); - - //Connect to a server - connection.Connect(new NetworkEndPoint("127.0.0.1", 4296)); - - //Wait until the end point disconnects from us - e.WaitOne(); - } - } -} diff --git a/Hazel.Documentation/docinclude/TcpListenerExample.cs b/Hazel.Documentation/docinclude/TcpListenerExample.cs deleted file mode 100644 index 468452b..0000000 --- a/Hazel.Documentation/docinclude/TcpListenerExample.cs +++ /dev/null @@ -1,23 +0,0 @@ -class TcpListenerExample -{ - static void Main(string[] args) - { - //Setup listener - using (TcpConnectionListener listener = new TcpConnectionListener(new NetworkEndPoint(IPAddress.Any, 4296))) - { - //Start listening for new connection events - listener.NewConnection += delegate(object sender, NewConnectionEventArgs a) - { - //Send the client some data - a.Connection.SendBytes(new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 }, SendOption.Reliable); - - //Disconnect from the client - a.Connection.Close(); - }; - - listener.Start(); - - Console.ReadKey(); - } - } -} diff --git a/Hazel.Documentation/docinclude/UdpClientExample.cs b/Hazel.Documentation/docinclude/UdpClientExample.cs deleted file mode 100644 index e77d5c5..0000000 --- a/Hazel.Documentation/docinclude/UdpClientExample.cs +++ /dev/null @@ -1,24 +0,0 @@ -class UdpClientExample -{ - static void Main(string[] args) - { - using (UdpConnection connection = new UdpConnection()) - { - ManualResetEvent e = new ManualResetEvent(false); - - //Whenever we receive data print the number of bytes and how it was sent - connection.DataReceived += (object sender, DataReceivedEventArgs a) => - Console.WriteLine("Received {0} bytes via {1}!", a.Bytes.Length, a.SendOption); - - //When the end point disconnects from us then release the main thread and exit - connection.Disconnected += (object sender, DisconnectedEventArgs a) => - e.Set(); - - //Connect to a server - connection.Connect(new NetworkEndPoint("127.0.0.1", 4296)); - - //Wait until the end point disconnects from us - e.WaitOne(); - } - } -} diff --git a/Hazel.Documentation/docinclude/UdpListenerExample.cs b/Hazel.Documentation/docinclude/UdpListenerExample.cs deleted file mode 100644 index 4c26c49..0000000 --- a/Hazel.Documentation/docinclude/UdpListenerExample.cs +++ /dev/null @@ -1,23 +0,0 @@ -class UdpListenerExample -{ - static void Main(string[] args) - { - //Setup listener - using (UdpConnectionListener listener = new UdpConnectionListener(new NetworkEndPoint(IPAddress.Any, 4296))) - { - //Start listening for new connection events - listener.NewConnection += delegate(object sender, NewConnectionEventArgs a) - { - //Send the client some data - a.Connection.SendBytes(new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 }, SendOption.Reliable); - - //Disconnect from the client - a.Connection.Close(); - }; - - listener.Start(); - - Console.ReadKey(); - } - } -} diff --git a/Hazel.Documentation/docinclude/common.xml b/Hazel.Documentation/docinclude/common.xml deleted file mode 100644 index 5e9ab9e..0000000 --- a/Hazel.Documentation/docinclude/common.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - As with all Hazel events it is invoked on a thread from the .NET - ThreadPool and hence any subscribers should ensure their - handling code is thread safe. Implementing connections are not bound to invoking this event in the sequence - messages are received, in fact implementers are only required to ensure this method is always and only invoked - for a user sent message, therefore subscribers should be aware that this event may be called out of order and - may be called whilst another thread is still handling an invocation of the event. - - - - - This object implements IRecyclable and hence can be recycled in order to reduce the number of objects the - GC has to deal with. When you are done with the object you can either leave it unreferenced as you usually - would and the GC will collect it or you can call to inform Hazel that the object - should be reused. Once recycle has been called the contents can be overwritten at any time and so only - call it once you are completely finished with the object. - - - - - This method sends a number of bytes in a message to the end point of this client using the given - to describe how the data should be sent. Sending messages requires that the - this connection is connected to a remote end point and SendBytes will throw an exception if that is not - the case. See the property for information on whether a connection is connected or not. - - - \ No newline at end of file diff --git a/Hazel.Documentation/icons/Help.png b/Hazel.Documentation/icons/Help.png deleted file mode 100644 index 945e89fb96271c85b901f1e656e9920c788c48e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4942 zcmV-U6S3@xP)Un>oiIt;G^8NUH0d90 z(2x}zZQ3xzkeJw%@USE!+xQ{diTsdd>n&YfN%vme$L=|&f9zga z5J*T!&dh3eM`!o`zQ5o1_xpX%S;6}ldpbJS0GomJz#3pR&9nwAAdfD6DG;3RN# zZ)fM3_w(E3A%4{d_H=YK0v`oF<~YvgmX?;>>eZ{`tt(g7E?Kf9QC(f_x~?nB^F7Zq zb8~av#Kc5q@Y1F9g$oz*!^6XszV9Ceo&yf-?d+WVtpnK8(NP6Fpp<&7skzzNv13Qw zh7B89gb-?OZjQ0>NrpyJTprCZmCBGWc({(Bp}vaNmKv^UYM`m9kz_K7F-D&_abmcu zt8036WW?86KMg#)x3e?*TLG}AqvIB()K{8YT2|b5-+jwhu3T9^GczN9)_;-yffOUN z3C6RvOlKn$Jn(&kF$VC!cwpyo$&-xbXltBj`=%A#xb_3o*4FC5!NJtNefx$-hKDa} zt^aOsXXoMHD1bd39iNHCVqdxc{`)I7ZQk5EGczNP96QOtWRje1W+W}SG+H8?^RPyP zH5hBL!XPYQeGEQA`v^RYKTn05C*jO-_bpZIy7Lwq8yn5hBS$Vh_uO;&LZR^YdpkS- zg(Xn>z+E0J>(MNC6TE`B)a*RuJt(==^Z4e1< zHAa{3129H|wqUHn2#2}6OV7y(h6eiBw0?E;_MJPIj*X8uwqJW~;=O=)M*w>|Iy%;^ zTeth+M;_TcH8mw)?iygEcpaw);poq@lstoy1cqA^c-?A@G5Eg5_k4V9Fh*mI#u@|G zV6DYkjkN}CEWQRK6bOe4BSm_8df9M&qx{H+KioV#JY3)2-d^>~K>QqlJsll?(9+WK z=w}~&bmQdYq zK^wz-p@h~x5(~nhwZT}h#-g=FNJXX~dFAyZY+2jLZMWaPw6Cvk*@pG&r@Fek&%PS~ z@iybP#bU8#m9MjmKB>;O*61+v3uYlvKqb;()6l77^4W6ip2-H>|4Uo)0$C)>6r#H^(WIe543y zW~{+z6GQ?@ItQ1}pWvQ5w?``~E9cIiJJ-5>`}P;Qy1V_i1CWcZA82lAS+RM`mX*g( z^f9ehabehJB2`4Gkh?|)ytamX$>aK!aaJyqZ-3`ohP9wI6bc%Q&%GaNXB&wd<|5AAP6y%h3A`N~tg0d+)u=)9JK4 zc1|;#ig5B=hKK_u^t!bs@Rre7U!#5f3ym)iAq0*iQI1PCTjW#swDHKtR+7yZ!lbrg zWWi`b$yXRz$+y0DjM33CardrW4N}TK`_nIcq59n-aCcL4bEK`Ut?p3waZ1ig&Rx!+ z6hUb;I;b+%V02JztTkvIMARC)@Iv4BDV4kha6%9m7y?mF1nqn5+|)=!d01-@Ve=y_ z$J#>4M#!6LzW4nXx$(vumsD3*FPBp8csl?mJb!G*jvaOBbXpz0P(?u)#!`7)S7Njc zn^Isj1m!T`t`AtWF0%jN8TNM#GdU}nFIgNVxpiYBk3X~tfd~x*B?a2ItZc5LuA)dP zuW%(u341FVTWt11Y2KnU2C&Udm+z^|Znz|Es5in%{YEMVU8pm;-*u8uAilcA# z$+XwR`O8ISa~i^OxzLQbS~YxaSW+WttjhBBZ+G#J|8;?ZsRT2{IGMadY7V+jrV#jS zUDtrGEkXo^M<9sC9QMC@hS6z5)RBm=Aqo+6a$x~9g~B}7uZXZ|(@n7>y}ip@TU-CT zudgq&I0BnnT3T{K2zBJ-Wzx=au1pk=!eX_>hF)GMpW!(kF?64t=H;#wJ~3*SwF5yy zVlB$G80+%g{X;zP;cIB9iQ^j(LShg&R$#Sd4`0VT~BeO{cGr55CGDs|J(6F#Jhz5ayR$H*(R@4!}U~O5< z*{gz1`#35>AwSQI@DM_xltVP)kj@u5dtr)Pp%%~6fDVWuZ3qIC@TqVFXD-e#J)Neh zsY#BHk8cJJ0Dd`%*R-~_CPzjm7|T>Kn<;?sAxvCr4AyA0@iErJ`WoX0p4Qd}>tSu_ zsuIa%{R*k)54jVq%iaY=(TkfDo38SEfm2z;!?nbaA09Qh*d7gariJ zDl!Gdz@^JHH8)oZA#PZdyEs7m(xpqQ4;?;5-bfy6|<2zkcCYB?EMZ<#mWo;u62mt~G!eweY zL(7^KN-5O{L_+px2dHvgSB#9N(55}8?KZ6agx+RRK7@5!YfUCsBwzILJU`^Ep-|Fn zzOIso?n+Q!Wyu!}t}F3;4=KU(4S)6YL9|m(g(Je}WRN?8pag}0gb)ZJ5mIsf;vn0% zTrVQgXl)n)RR#b+HaCwiG*)|9DFCy`%>(oe8tQB7zEUkfjN#i(yNwvvp ziazZ5`yX-mY>6d}jR*oe0-7uyVJ6s+cEZCklG#37v+u_ND^ZViMZqgtyKu+5Qzj8q$2L}%rl1=o{rMcPy-mGkVqkrQh^X5^9AM9 zUC4oOcfh4cOd1lEQ3eJE@|jF#aPd?L{B-EbmD%Q|Wh9&wm=f0au||_G6q%mMqkRvH z#*}-4)e8%EYc&E(MNE;bR2XfL5+V`BeBR^G$w_Kz>QGYRI1aAk;yNx$IXKb@&PoM6 zLOCc|J`}DaagDjteF))jwtb=Z8tGEFyQ5KxorQrbNzr<1|au#cJ}+e|Ju=`M~Am;+JKn9fG%b6 z{8FH8j30VESW=diX~1WY4k!h#w4}0v!KpZxrz;suRWO#RCK{_oNr{vSAzXxTkU|mk zp~Z)@a0nDiSd`7vSnads`Zl@`9m-5hPIirtkEa#`DEEOM^z`&>*uH(cx%ak}^50$@ zL)dx*F2)2+Ezm}R)D3Ed#gPIf!I1)sprs+ky0$9nlL5!aXA~#<=djj62^DNrAVY&g z;lH4OM96B35IzcxGCA(vc|D0l!VX-%>|eQZr5Bh7N^b}7(!}`qW3TqYCNQ`kYT4Aj~T7yFlmuWtA|3+$SYHatBBl**3&OD#VWTry^3%d!6 zJIMaY$;op)Jw2Cq|NbY~u}0$PG!6wUr3J|lgcy_vazF_|#8IqnsYFT#$5AN9L8;(e zEO=B`_>??@B{bM7jCL?ap^d^Afz=XWERHB4y-BvLt>pGwxAOgGo|zpP898?R`0*pa z98h>i0DC(-^TwFJ+4qAVc-d?=^VPrjW7=xQh%y`Om;G?_zXt zuynMquh@I!$g{;_F-7pXYJooRw!P7=?(XqhZoYZs{Q2|i@4D-*#?9;7==^me_(d`TdsL`j9CR6rFKTt_1g={e20%X2u=r!uC<&X@S{YZv(DcQ26l z8c`~W(Gp`MT1zY*b~XUM8orSNW|RTu0%k;NEpy##5G_lheF* zbc_Rs#yE0TBV)^P-6+P0kn2IKlGZ1p@j zpM5rS=GK>KLF1bz--XGz9$-2IVtd~n-lRh5>i(|-06=ZovZeOMb?ZJ}Q&aONwRLrs zn>TJu?!4oU`a-cNN+l12qW|0_E)P#IHlC(X(8OaA8tbcRX{uwzHOq*_6p5-zVv&e_ z?Zp=h$B!K=TuG;A&;InMKYF9L_w{TxJ4(R!6z@>;-wyx?dPZd1wrwq|+uC*|5{cif ztgO7Lwx*`Ee%-nytJ>RR_4V~6lS$(7_`*ZQVv%$@&Ghs%6JukXK6EHIJUy+)(&_%o zSFXHq^3TU)AvPc)tJ^zo)E|6=l8rR9!X<=w{r1EgJ;Fikb~4FCWD M07*qoM6N<$f`j^SBme*a diff --git a/Hazel.sln b/Hazel.sln index 10d0195..51a6565 100644 --- a/Hazel.sln +++ b/Hazel.sln @@ -1,14 +1,12 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28307.539 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30621.155 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hazel", "Hazel\Hazel.csproj", "{02CFBD30-D77D-400F-94B2-700F60EFDD7F}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hazel.UnitTests", "Hazel.UnitTests\Hazel.UnitTests.csproj", "{1394E4CA-E17A-42F5-9216-8046ACA8D16B}" EndProject -Project("{7CF6DF6D-3B04-46F8-A40B-537D21BCA0B4}") = "Hazel.Documentation", "Hazel.Documentation\Hazel.Documentation.shfbproj", "{B90BB577-2080-4C22-AE86-FB0CCFB40920}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -23,9 +21,6 @@ Global {1394E4CA-E17A-42F5-9216-8046ACA8D16B}.Debug|Any CPU.Build.0 = Debug|Any CPU {1394E4CA-E17A-42F5-9216-8046ACA8D16B}.Release|Any CPU.ActiveCfg = Release|Any CPU {1394E4CA-E17A-42F5-9216-8046ACA8D16B}.Release|Any CPU.Build.0 = Release|Any CPU - {B90BB577-2080-4C22-AE86-FB0CCFB40920}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B90BB577-2080-4C22-AE86-FB0CCFB40920}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B90BB577-2080-4C22-AE86-FB0CCFB40920}.Release|Any CPU.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE -- 2.39.5