summaryrefslogtreecommitdiff
path: root/Ivy/IvyUDPStreamV4.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ivy/IvyUDPStreamV4.cs')
-rw-r--r--Ivy/IvyUDPStreamV4.cs80
1 files changed, 80 insertions, 0 deletions
diff --git a/Ivy/IvyUDPStreamV4.cs b/Ivy/IvyUDPStreamV4.cs
new file mode 100644
index 0000000..b8d329a
--- /dev/null
+++ b/Ivy/IvyUDPStreamV4.cs
@@ -0,0 +1,80 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Net;
+using System.Net.Sockets;
+using System.IO;
+
+namespace IvyBus
+{
+ class IvyUDPStreamV4 : IvyUDPStream
+ {
+
+ BinaryReader input;
+ BinaryWriter output;
+
+ /// the protocol version number
+ internal const ushort PROCOCOLVERSION = 4;
+ public IvyUDPStreamV4(Socket _socket) : base ( _socket, PROCOCOLVERSION)
+ {
+ input = new BinaryReader( in_stream,Encoding.ASCII);
+ output = new BinaryWriter(out_stream, Encoding.ASCII);
+ }
+ /*
+ * message Syntax:
+ * this is a binary formated message use of network representation
+ *
+ * message Format:
+ protocol_version, TCP server port , lenAppId, appId, lenAppNameId, appName
+ */
+ private ushort DeserializeShort()
+ {
+ return (ushort)IPAddress.NetworkToHostOrder((ushort)input.ReadUInt16());
+ }
+ private string DeserializeString()
+ {
+ string arg;
+ int val_len;
+ char[] data;
+ val_len = (ushort)IPAddress.NetworkToHostOrder((ushort)input.ReadUInt16());
+ if (val_len != 0)
+ {
+ data = input.ReadChars(val_len);
+ arg = new String(data);
+ }
+ else
+ arg = "";
+ return arg;
+ }
+
+ internal override void Deserialize(out ushort version, out ushort port, out string appId, out string appName)
+ {
+ version = DeserializeShort();
+ port = DeserializeShort();
+ appId = DeserializeString();
+ appName = DeserializeString();
+
+ }
+ private void Serialize(ushort arg)
+ {
+ output.Write((ushort)IPAddress.HostToNetworkOrder(arg));
+ }
+ private void Serialize(string arg)
+ {
+ ushort length = arg != null ? (ushort)arg.Length : (ushort)0;
+ Serialize(length);
+ if (length != 0)
+ output.Write(arg.ToCharArray());
+ }
+
+ internal override void Serialize(ushort port, string appId, string appName)
+ {
+ Serialize(PROCOCOLVERSION );
+ Serialize(port);
+ Serialize(appId);
+ Serialize(appName);
+ output.Flush();
+ }
+
+ }
+}