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 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 MBMessageQueue = new InterthreadMessageQueue(); 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) 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 } }