/// <summary> /// /// </summary> /// <param name="msg"></param> /// <returns></returns> bool IsValid(SactaMsg msg) { Settings stts = Settings.Default; return((msg.DomainOrg == stts.ScvDomain) && (msg.DomainDst == stts.SactaDomain) && (msg.CenterOrg == stts.ScvCenter) && (msg.CenterDst == stts.SactaCenter) && (msg.UserDst == stts.SactaGroupUser) && stts.ScvUsers.Contains(msg.UserOrg.ToString())); }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="dg"></param> void OnNewData(object sender, DataGram dg) { try { MemoryStream ms = new MemoryStream(dg.Data); CustomBinaryFormatter bf = new CustomBinaryFormatter(); SactaMsg msg = bf.Deserialize <SactaMsg>(ms); if (IsValid(msg)) { int net = (sender == _Comm[0] ? 0 : 1); _LastScvReceived[net] = DateTime.Now; switch (msg.Type) { case SactaMsg.MsgType.Presence: _ActivityTimeOut = (uint)(((SactaMsg.PresenceInfo)(msg.Info)).ActivityTimeOutSg * 1000); if (_ActivityTimeOut < 5) { _ActivityTimeOut = Settings.Default.ActivityTimeOut; } break; case SactaMsg.MsgType.SectAsk: SendSectorization(net, _SectorUcs, msg.UserOrg); MainForm.LogMethod("INFO", net == 0 ? "SACTA1" : "SACTA2", "Recibida Peticion de Sectorizacion"); break; case SactaMsg.MsgType.SectAnwer: SactaMsg.SectAnswerInfo info = (SactaMsg.SectAnswerInfo)(msg.Info); MainForm.LogMethod("INFO", net == 0 ? "SACTA1" : "SACTA2", String.Format("Sectorizacion V-{0}: {1}", info.Version, (info.Result == 1 ? "Implantada" : "Rechazada"))); break; case SactaMsg.MsgType.Init: MainForm.LogMethod("INFO", net == 0 ? "SACTA1" : "SACTA2", "Recibido MSG INIT"); _SeqNum = 0; break; } } } catch (Exception ex) { if (!_Disposed) { MainForm.LogMethod("ERROR", "OnNewData", String.Format("Excepción al Procesar Datos Recibidos: {0}", ex.Message)); } } }
/// <summary> /// /// </summary> /// <param name="sactanet"></param> /// <param name="sectorUcs"></param> /// <param name="ask"></param> void SendSectorization(int sactanet, string[] sectorUcs, ushort UserOrg) { Debug.Assert(sactanet == 0 || sactanet == 1); CustomBinaryFormatter bf = new CustomBinaryFormatter(); MemoryStream ms = new MemoryStream(); SactaMsg msg = new SactaMsg(SactaMsg.MsgType.Sectorization, _SeqNum, _SectVersion, sectorUcs); bf.Serialize(ms, msg); byte[] data = ms.ToArray(); byte[] user = BitConverter.GetBytes(UserOrg); Array.Reverse(user); Array.Copy(user, 0, data, 6, 2); _Comm[sactanet].Send(_EndPoint[sactanet], data); MainForm.LogMethod("INFO", sactanet == 0 ? "SACTA1" : "SACTA2", String.Format("Enviando Sectorizacion V-{2} a SCV {0} ({1})", UserOrg, strSect(sectorUcs), _SectVersion)); }
/// <summary> /// /// </summary> void SendPresence() { CustomBinaryFormatter bf = new CustomBinaryFormatter(); MemoryStream ms = new MemoryStream(); SactaMsg msg = new SactaMsg(SactaMsg.MsgType.Presence, _SeqNum++); bf.Serialize(ms, msg); byte[] data = ms.ToArray(); foreach (string sUser in Settings.Default.ScvUsers) { byte[] user = BitConverter.GetBytes(UInt16.Parse(sUser)); Array.Reverse(user); Array.Copy(user, 0, data, 6, 2); _Comm[0].Send(_EndPoint[0], data); _Comm[1].Send(_EndPoint[1], data); } _LastPresenceSended = DateTime.Now; }
/// <summary> /// /// </summary> void SendInit() { CustomBinaryFormatter bf = new CustomBinaryFormatter(); MemoryStream ms = new MemoryStream(); SactaMsg msg = new SactaMsg(SactaMsg.MsgType.Init, SactaMsg.InitId); bf.Serialize(ms, msg); byte[] data = ms.ToArray(); foreach (string sUser in Settings.Default.ScvUsers) { MainForm.LogMethod("INFO", String.Format("Enviado MSG Init a SCV {0}", sUser)); byte[] user = BitConverter.GetBytes(UInt16.Parse(sUser)); Array.Reverse(user); Array.Copy(user, 0, data, 6, 2); _Comm[0].Send(_EndPoint[0], data); _Comm[1].Send(_EndPoint[1], data); } _SeqNum = 0; }
/// <summary> /// /// </summary> /// <param name="sectorUcs"></param> /// <param name="ask"></param> void SendSectorization(string[] sectorUcs, SactaMsg ask) { CustomBinaryFormatter bf = new CustomBinaryFormatter(); MemoryStream ms = new MemoryStream(); SactaMsg msg = new SactaMsg(SactaMsg.MsgType.Sectorization, _SeqNum++, _SectVersion++, sectorUcs); bf.Serialize(ms, msg); byte[] data = ms.ToArray(); if (ask != null) { MainForm.LogMethod("INFO", String.Format("Enviando Sectorizacion a SCV {0} ({1})", ask.UserOrg, strSect(sectorUcs))); byte[] user = BitConverter.GetBytes(ask.UserOrg); Array.Reverse(user); Array.Copy(user, 0, data, 6, 2); _Comm[0].Send(_EndPoint[0], data); _Comm[1].Send(_EndPoint[1], data); } else { foreach (string sUser in Settings.Default.ScvUsers) { MainForm.LogMethod("INFO", String.Format("Enviando Sectorizacion V-{0} a SCV {1} ({2})", ((SactaMsg.SectInfo)(msg.Info)).Version, sUser, strSect(sectorUcs))); byte[] user = BitConverter.GetBytes(UInt16.Parse(sUser)); Array.Reverse(user); Array.Copy(user, 0, data, 6, 2); _Comm[0].Send(_EndPoint[0], data); _Comm[1].Send(_EndPoint[1], data); } } }
/// <summary> /// /// </summary> void SendInit(int sactanet) { Debug.Assert(sactanet == 0 || sactanet == 1); CustomBinaryFormatter bf = new CustomBinaryFormatter(); MemoryStream ms = new MemoryStream(); SactaMsg msg = new SactaMsg(SactaMsg.MsgType.Init, SactaMsg.InitId); bf.Serialize(ms, msg); byte[] data = ms.ToArray(); foreach (string sUser in Settings.Default.ScvUsers) { byte[] user = BitConverter.GetBytes(UInt16.Parse(sUser)); Array.Reverse(user); Array.Copy(user, 0, data, 6, 2); _Comm[sactanet].Send(_EndPoint[sactanet], data); MainForm.LogMethod("INFO", sactanet == 0 ? "SACTA1" : "SACTA2", String.Format("Enviado MSG Init a SCV {0}", sUser)); //_Comm[1].Send(_EndPoint[1], data); //MainForm.LogMethod("INFO", "SACTA2", String.Format("Enviado MSG Init a SCV {0}", sUser)); } }