using NetMQ.Zyre; using NetMQ.Zyre.ZyreEvents; using NLog; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace POSV.Utils { public class ZyreUtils { private static Logger logger = NLog.LogManager.GetCurrentClassLogger(); private static object _lock = new object(); private static ZyreUtils _instance = null; private string _name; private Guid _uuid; private Zyre _zyre; private string _endpoint; public static ZyreUtils Instance { get { if (_instance == null) { lock (_lock) { _instance = new ZyreUtils(); _instance.InitZyre(); } } return _instance; } } private void InitZyre() { try { string name = string.Format("pos_{0}",Global.Instance.Authc.PosNo); this._zyre = new Zyre(name, true, ZyreLogger); this._name = this._zyre.Name(); this._uuid = this._zyre.Uuid(); this._zyre.EnterEvent += ZyreEnterEvent; this._zyre.StopEvent += ZyreStopEvent; this._zyre.ExitEvent += ZyreExitEvent; this._zyre.EvasiveEvent += ZyreEvasiveEvent; this._zyre.JoinEvent += ZyreJoinEvent; this._zyre.LeaveEvent += ZyreLeaveEvent; this._zyre.WhisperEvent += ZyreWhisperEvent; this._zyre.ShoutEvent += ZyreShoutEvent; } catch (Exception ex) { logger.Error(ex, "加载沽清数据异常"); } finally { } } /// /// 启动任务 /// public void Startup() { this._zyre.Start(); this._endpoint = _zyre.EndPoint(); } /// /// 停止任务 /// public void Stop() { this._zyre.Stop(); this._endpoint = null; } private void ZyreShoutEvent(object sender, ZyreEventShout e) { } private void ZyreWhisperEvent(object sender, ZyreEventWhisper e) { } private void ZyreJoinEvent(object sender, ZyreEventJoin e) { } private void ZyreLeaveEvent(object sender, ZyreEventLeave e) { logger.Info($"POS Leave: {0} {1}", e.SenderName, e.SenderUuid.ToShortString6()); } private void ZyreEvasiveEvent(object sender, ZyreEventEvasive e) { logger.Info($"POS Evasive: {0} {1}", e.SenderName, e.SenderUuid.ToShortString6()); } private void ZyreEnterEvent(object sender, ZyreEventEnter e) { logger.Info($"发现POS接入局域网: {0} {1} at {2}", e.SenderName, e.SenderUuid.ToShortString6(), e.Address); } private void ZyreStopEvent(object sender, ZyreEventStop e) { logger.Info($"POS服务关闭: {0} {1}", e.SenderName, e.SenderUuid.ToShortString6()); } private void ZyreExitEvent(object sender, ZyreEventExit e) { logger.Info($"POS退出: {0} {1}", e.SenderName, e.SenderUuid.ToShortString6()); } private void ZyreLogger(string message) { logger.Info(message); } } }