using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SafeMobileLib { public class GeneralLocationManager { //multicast private string ip; private int port; private UdpMulticast udpMulticast; public GeneralLocationManager(string ip, int port) { this.ip = ip; this.port = port; //ini multicast try { udpMulticast = new UdpMulticast(ip, port); Utils.WriteLine("Location manager connected to message bus on ip:"+ip+" port:"+port); } catch (Exception ex) { Utils.WriteLine("Location manager exception while joining the message bus: " + ex.ToString()); } } public GeneralLocationManager(UdpMulticast udp) { //ini multicast try { udpMulticast = udp; Utils.WriteLine("Location manager connected to message bus "); } catch (Exception ex) { Utils.WriteLine("Location manager exception while joining the message bus: " + ex.ToString()); } } public void SendLoc2messagebus(string imei,uint date70format, string speed, string lat, string lng, int poll) { String[] toSendString = new String[4]; toSendString[0] = date70format.ToString(); toSendString[1] = speed; toSendString[2] = lat; toSendString[3] = lng; Byte[] toSendMulticast = createLocationMessage( (poll == 0 ? 131 : 231), imei, toSendString); udpMulticast.Send(toSendMulticast, toSendMulticast.Length); Utils.WriteLine(System.Text.Encoding.Default.GetString(toSendMulticast), ConsoleColor.White); } public void SendLoc2messagebusTallysman(string imei, uint date70format, string speed, string lat, string lng,string altitude, string logId, int poll) { String[] toSendString = new String[6]; toSendString[0] = date70format.ToString(); toSendString[1] = speed; toSendString[2] = lat; toSendString[3] = lng; toSendString[4] = altitude; toSendString[5] = logId; Byte[] toSendMulticast = createLocationMessage((poll == 0 ? 131 : 231), imei, toSendString); udpMulticast.Send(toSendMulticast, toSendMulticast.Length); Utils.WriteLine(System.Text.Encoding.Default.GetString(toSendMulticast), ConsoleColor.White); } public void SendLoc2messagebusWithAltitude(string imei, uint date70format, string speed, string lat, string lng, string altitude, int poll) { String[] toSendString = new String[5]; toSendString[0] = date70format.ToString(); toSendString[1] = speed; toSendString[2] = lat; toSendString[3] = lng; toSendString[4] = altitude; Byte[] toSendMulticast = createLocationMessage((poll == 0 ? 131 : 231), imei, toSendString); udpMulticast.Send(toSendMulticast, toSendMulticast.Length); Utils.WriteLine(System.Text.Encoding.Default.GetString(toSendMulticast), ConsoleColor.White); } public void SendOnMsgBuss(string seqID, string test) { if (udpMulticast != null) { udpMulticast.Send(Utils.Convert_text_For_multicast("#" + seqID + test), Utils.Convert_text_For_multicast("#" + seqID + test).Length); } else { Utils.WriteLine("Error!!! SendOnMsgBuss!!!"); } } //aux public static Int32 GetSecondsLocalFromDT(DateTime param) { System.DateTime datetime = param; long nOfSeconds; System.DateTime dt70 = new DateTime(1970, 1, 1, 0, 0, 0, 0); System.DateTime dttmp1 = new DateTime(1970, 1, 1, 0, 0, 0, 0); System.DateTime dttmp2; dttmp2 = dttmp1.ToLocalTime(); TimeSpan span2 = dttmp2 - dttmp1; TimeSpan span = datetime - dt70; if (System.TimeZone.CurrentTimeZone.IsDaylightSavingTime(param)) nOfSeconds = (long)span.TotalSeconds - (long)span2.TotalSeconds - 3600; //mai scot o ora - 3600 else nOfSeconds = (long)span.TotalSeconds - (long)span2.TotalSeconds; return ((Int32)nOfSeconds); } public static Byte[] createLocationMessage(int opCode, string suid, String[] dataString) { string msg = ""; msg = "#1." + GetSecondsLocalFromDT(DateTime.Now).ToString() + DateTime.Now.Millisecond.ToString() + "#" + opCode + "#" + suid + "#"; if (dataString.Length == 4) msg = msg + dataString[0] + "#" + dataString[1] + "#" + dataString[2] + "#" + dataString[3]; else if (dataString.Length == 5) msg = msg + dataString[0] + "#" + dataString[1] + "#" + dataString[2] + "#" + dataString[3] + "#" + dataString[4]; else msg = msg + dataString[0] + "#" + dataString[1] + "#" + dataString[2] + "#" + dataString[3] + "#" + dataString[4] + "#" + dataString[5]; int totalSize = 5 + msg.Length; string sizeMsg = String.Format("#{0:000}", totalSize); msg = sizeMsg + msg; Byte[] toSendMulticast = new Byte[totalSize]; System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); Byte[] toSendMulticastPartial = encoding.GetBytes(msg); for (int i = 0; i < toSendMulticastPartial.Length; i++) { toSendMulticast[i] = toSendMulticastPartial[i]; } toSendMulticast[totalSize - 1] = 35;//'#' return toSendMulticast; } } }