144 lines
5.9 KiB
C#
144 lines
5.9 KiB
C#
|
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;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|