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, Ivy.ivyEncoding); output = new BinaryWriter(out_stream, Ivy.ivyEncoding); } /* * message Syntax: * this is a binary formated message use of network representation * * message Format: protocol_version, TCP server port , lenAppId, appId, lenAppNameId, appName */ private int DeserializeInt() { return IPAddress.NetworkToHostOrder((short)input.ReadInt16()); } private string DeserializeString() { string arg; int val_len; char[] data; val_len = DeserializeInt(); if (val_len != 0) { data = input.ReadChars(val_len); arg = new String(data); } else arg = string.Empty; return arg; } internal override void Deserialize(out int version, out int port, out string appId, out string appName) { version = DeserializeInt(); port = DeserializeInt(); appId = DeserializeString(); appName = DeserializeString(); } private void Serialize(int arg) { output.Write((short)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(int port, string appId, string appName) { Serialize(PROCOCOLVERSION ); Serialize(port); Serialize(appId); Serialize(appName); output.Flush(); } } }