diff options
-rw-r--r-- | CSharp/Ivy/Ivy/IvyUDPStreamV3.cs | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/CSharp/Ivy/Ivy/IvyUDPStreamV3.cs b/CSharp/Ivy/Ivy/IvyUDPStreamV3.cs new file mode 100644 index 0000000..0711f07 --- /dev/null +++ b/CSharp/Ivy/Ivy/IvyUDPStreamV3.cs @@ -0,0 +1,76 @@ +using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Net;
+using System.Net.Sockets;
+using System.IO;
+
+namespace IvyBus
+{
+ class IvyUDPStreamV3
+ {
+ Socket socket;
+ StreamReader input;
+ StreamWriter output;
+ byte[] buffer;
+ MemoryStream out_stream;
+ MemoryStream in_stream;
+
+ /// the protocol version number
+ internal const int PROCOCOLVERSION = 3;
+
+ public IvyUDPStreamV3(Socket _socket)
+ {
+ socket = _socket;
+ buffer = new byte[4096];
+ in_stream = new MemoryStream(buffer);
+ input = new StreamReader(in_stream, Encoding.ASCII);
+ out_stream = new MemoryStream();
+ output = new StreamWriter(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
+ */
+
+ 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 = input.ReadUInt16();
+ port = input.ReadUInt16();
+ int lenAppId = input.ReadUInt16();
+ appId = input.ReadChars(lenAppId);
+ int lenAppName = input.ReadUInt16();
+ appName = new String(input.ReadChars(lenAppName));
+
+ }
+
+ internal void sendMsg(IPEndPoint EPhost, int port, string appId, string appName)
+ {
+ String.Format()
+ output.Write((ushort)IPAddress.HostToNetworkOrder((short)(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);
+ }
+ internal void Close()
+ {
+ socket.Close();
+ }
+ }
+}
|