120 lines
4.4 KiB
C#
120 lines
4.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using SafeMobileLib;
|
|
using System.Collections;
|
|
|
|
namespace MotoTrbo_GW
|
|
{
|
|
public class MessageBusHandler
|
|
{
|
|
string messageBusIP;
|
|
int messageBusPort;
|
|
private static UdpMulticast udp;
|
|
|
|
public static Hashtable MBMessageQueues_Hash;
|
|
|
|
public MessageBusHandler(string messageBusIP, string messageBusPort)
|
|
{
|
|
this.messageBusIP = messageBusIP;
|
|
this.messageBusPort =Convert.ToInt32(messageBusPort);
|
|
MBMessageQueues_Hash = new Hashtable();
|
|
DBgatewaysManager DBgateways = new DBgatewaysManager(Main.DBServer, Main.DBSchema, Main.DBUser, Main.DBPass, Main.DBPort);
|
|
List<RadioGateway> radioGwList = DBgateways.gelAllRadioGateways(Main.GWID, (int)GatewayType.Tier2Radio);
|
|
for (int i = 0; i < radioGwList.Count; i++)
|
|
{
|
|
//create message buss Queue for radios that have voice eneble
|
|
if (radioGwList[i].Gw_voice == 1)
|
|
{
|
|
InterthreadMessageQueue<MessageBusMessage> MBMessageQueue = new InterthreadMessageQueue<MessageBusMessage>();
|
|
MBMessageQueues_Hash.Add(radioGwList[i].Id, MBMessageQueue);
|
|
}
|
|
}
|
|
//start messageBus listner
|
|
udp = new UdpMulticast(messageBusIP,this.messageBusPort);
|
|
udp.OnNewDataRecv += new UdpMulticast.newData4Send(udp_OnNewDataRecv);
|
|
udp.StartListen(Main.LocalIP);
|
|
}
|
|
|
|
void udp_OnNewDataRecv(byte[] data, int dataLen)
|
|
{
|
|
//SafeMobileLib.Utils.WriteLine("got data on gw" + radioID);
|
|
string str = System.Text.Encoding.ASCII.GetString(data, 0, dataLen);
|
|
|
|
// do not display ping messages
|
|
if (!str.StartsWith("#12#"))
|
|
SafeMobileLib.Utils.WriteLine(str.Trim());
|
|
|
|
try
|
|
{
|
|
MessageBusMessage msm = new MessageBusMessage(str, dataLen);
|
|
if (msm.OK)
|
|
{
|
|
SafeMobileLib.Utils.WriteLine("GWId : " + Main.GWID + " | " + msm.GwAPPid, ConsoleColor.DarkYellow);
|
|
if (Main.GWID == msm.GwAPPid)
|
|
{
|
|
if (MessageBusHandler.MBMessageQueues_Hash.ContainsKey(msm.RadioGWid))
|
|
{
|
|
//add message to appropiate queue
|
|
((InterthreadMessageQueue<MessageBusMessage>)
|
|
MessageBusHandler.MBMessageQueues_Hash[msm.RadioGWid]).PostItem(msm);
|
|
}
|
|
}
|
|
#region LINX
|
|
#if LINXB
|
|
// Check if received command is 209 (Refresh database command)
|
|
if (msm.OPcode == (int)MessageBusCmds.RefreshDatabaseCommand)
|
|
{
|
|
// Fire event
|
|
RefreshDatabaseCommandReceived?.Invoke(this, new EventArgs());
|
|
}
|
|
#endif
|
|
#endregion
|
|
}
|
|
else
|
|
{
|
|
//SafeMobileLib.Utils.WriteLine("ERROR in MessageBusHandler.cs error:"+msm.Error);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SafeMobileLib.Utils.WriteLine(ex.ToString());
|
|
}
|
|
}
|
|
|
|
public static void SendOnMsgBuss(string seqID, string test, string comment)
|
|
{
|
|
if (udp != null)
|
|
{
|
|
String cmdok = "#" + seqID + test;
|
|
Int32 tmp = cmdok.Length + 1;
|
|
tmp += tmp.ToString().Length;
|
|
cmdok = "#" + tmp.ToString() + cmdok;
|
|
|
|
System.Text.Encoding enc = System.Text.Encoding.ASCII;
|
|
byte[] buf = enc.GetBytes(cmdok);
|
|
udp.Send(buf, buf.Length);
|
|
SafeMobileLib.Utils.WriteLine($"TX: {cmdok} {(comment.Length > 0 ? "//" + comment : "")}");
|
|
}
|
|
else
|
|
{
|
|
SafeMobileLib.Utils.WriteLine("SendOnMsgBuss Error!!! MessageBusHandler messagebus =null", ConsoleColor.Red);
|
|
}
|
|
}
|
|
|
|
public static void SendOnMsgBuss(string seqID, string test)
|
|
{
|
|
SendOnMsgBuss(seqID, test, "");
|
|
}
|
|
|
|
|
|
|
|
#region LINX
|
|
#if LINXB
|
|
public event EventHandler RefreshDatabaseCommandReceived;
|
|
#endif
|
|
#endregion
|
|
}
|
|
}
|