summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CSharp/Ivy/Ivy/IvyUDPStreamV4.cs65
1 files changed, 65 insertions, 0 deletions
diff --git a/CSharp/Ivy/Ivy/IvyUDPStreamV4.cs b/CSharp/Ivy/Ivy/IvyUDPStreamV4.cs
new file mode 100644
index 0000000..d5319c8
--- /dev/null
+++ b/CSharp/Ivy/Ivy/IvyUDPStreamV4.cs
@@ -0,0 +1,65 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Net;
+using System.Net.Sockets;
+using System.IO;
+
+namespace IvyBus
+{
+ class IvyUDPStream
+ {
+ Socket socket;
+ BinaryReader input;
+ BinaryWriter output;
+ byte[] buffer;
+ MemoryStream out_stream;
+ MemoryStream in_stream;
+
+ public IvyUDPStream(Socket _socket)
+ {
+ socket = _socket;
+ buffer = new byte[4096];
+ in_stream = new MemoryStream(buffer);
+ input = new BinaryReader( in_stream,Encoding.ASCII);
+ out_stream = new MemoryStream();
+ output = new BinaryWriter(out_stream, Encoding.ASCII);
+ }
+
+ internal void receiveMsg(out IPEndPoint remote, out int version, out int port, out string appId, out string appName)
+ {
+ int len;
+ IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0);
+ EndPoint tempRemoteEP = (EndPoint)remoteEP;
+ remoteEP = null;
+ len = socket.ReceiveFrom(buffer, ref tempRemoteEP);
+ remote = (IPEndPoint)tempRemoteEP;
+ in_stream.Position = 0;
+ version = (ushort)IPAddress.NetworkToHostOrder((short)input.ReadUInt16());
+ port = (ushort)IPAddress.NetworkToHostOrder((short)input.ReadUInt16());
+ int lenAppId = (ushort)IPAddress.NetworkToHostOrder((short)input.ReadUInt16());
+ appId = new String(input.ReadChars(lenAppId));
+ int lenAppNameId = (ushort)IPAddress.NetworkToHostOrder((short)input.ReadUInt16());
+ appName = new String(input.ReadChars(lenAppNameId));
+
+ }
+
+ internal void sendMsg(IPEndPoint EPhost, int port, string appId, string appName)
+ {
+ output.Write((ushort)IPAddress.HostToNetworkOrder((short)(Ivy.PROCOCOLVERSION)));
+ output.Write((ushort)IPAddress.HostToNetworkOrder((short)port));
+ output.Write((ushort)IPAddress.HostToNetworkOrder((short)appId.Length));
+ output.Write(appId.ToCharArray());
+ output.Write((ushort)IPAddress.HostToNetworkOrder((short)appName.Length));
+ output.Write(appName.ToCharArray());
+ output.Flush();
+
+ byte[] hellob = out_stream.GetBuffer();
+ socket.SendTo(hellob, (int)out_stream.Length, 0, EPhost); // notifies our arrival on each domain: protocol version + port
+ }
+ internal void Close()
+ {
+ socket.Close();
+ }
+ }
+}