From a9c0fb952b64d324566aa672da36eb74b2241ae7 Mon Sep 17 00:00:00 2001 From: fcolin Date: Thu, 1 Feb 2007 10:03:04 +0000 Subject: Utilisateur : Fcolin Date : 19/12/05 Heure : 16:54 Archivé dans $/CSharp/Ivy Commentaire: (vss 4) --- CSharp/Ivy/IvyPPC/IvyUDPStreamV4.cs | 86 ++++++++++++++++++++----------------- 1 file changed, 46 insertions(+), 40 deletions(-) diff --git a/CSharp/Ivy/IvyPPC/IvyUDPStreamV4.cs b/CSharp/Ivy/IvyPPC/IvyUDPStreamV4.cs index 572b74b..b8d329a 100644 --- a/CSharp/Ivy/IvyPPC/IvyUDPStreamV4.cs +++ b/CSharp/Ivy/IvyPPC/IvyUDPStreamV4.cs @@ -7,24 +7,17 @@ using System.IO; namespace IvyBus { - class IvyUDPStreamV4 + class IvyUDPStreamV4 : IvyUDPStream { - Socket socket; + BinaryReader input; BinaryWriter output; - byte[] buffer; - MemoryStream out_stream; - MemoryStream in_stream; /// the protocol version number - internal const int PROCOCOLVERSION = 4; - public IvyUDPStreamV4(Socket _socket) + internal const ushort PROCOCOLVERSION = 4; + public IvyUDPStreamV4(Socket _socket) : base ( _socket, PROCOCOLVERSION) { - socket = _socket; - buffer = new byte[4096]; - in_stream = new MemoryStream(buffer); - input = new BinaryReader( in_stream,Encoding.ASCII); - out_stream = new MemoryStream(); + input = new BinaryReader( in_stream,Encoding.ASCII); output = new BinaryWriter(out_stream, Encoding.ASCII); } /* @@ -34,41 +27,54 @@ namespace IvyBus * 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) + private ushort DeserializeShort() { - 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 lenAppName = (ushort)IPAddress.NetworkToHostOrder((short)input.ReadUInt16()); - appName = new String(input.ReadChars(lenAppName)); - + 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 void sendMsg(IPEndPoint EPhost, int port, string appId, string appName) + internal override void Deserialize(out ushort version, out ushort port, out string appId, out string appName) { - 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(); + version = DeserializeShort(); + port = DeserializeShort(); + appId = DeserializeString(); + appName = DeserializeString(); - byte[] hellob = out_stream.GetBuffer(); - socket.SendTo(hellob, (int)out_stream.Length, 0, EPhost); } - internal void Close() + private void Serialize(ushort arg) { - socket.Close(); + 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(); + } + } } -- cgit v1.1