123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- using EventBus;
- using ICommunication;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Runtime.CompilerServices;
- using System.Threading.Tasks;
- namespace ActiveMQCommunication
- {
- [CommunicationType(false)]
- public class Communication : ICommunication.ICommunication
- {
- public string IP => bus == null ? "" : bus.Host;
- public int Port => bus == null ? 0 : bus.Port;
- public bool IsLan { get; } = false;
- private readonly Dictionary<string, List<IBaseEventData>> _list = new Dictionary<string, List<IBaseEventData>>();
- string GetHash()
- {
- return DateTime.Now.Ticks.ToString();
- }
- EasyMQ.IBus bus;
- public bool IsConnected { get; private set; }
- public bool IsService{ get; private set; }
- public event EventHandler Connected;
- public event EventHandler Disconnected;
- public void Close()
- {
- bus?.Dispose();
- IsConnected = false;
- }
- public void Connect(string ip, int port)
- {
- IsService = false;
- try
- {
- bus = EasyMQ.ActiveHutch.Default.CreateBus(ip, port, new EasyMQ.MessagePackSerializer());
- bus.ConnectionInterruptedListener += (_, _) =>
- {
- IsConnected = false;
- Disconnected?.Invoke(this, EventArgs.Empty);
- };
- IsConnected = true;
- }
- catch
- {
- IsConnected = false;
- }
-
- }
- public IEventData<TData>? GetEvent<TData>()
- {
- lock (_list)
- {
- string hash = GetHash();
- if (_list.TryGetValue(typeof(MQEventData<TData>).FullName!, out List<IBaseEventData>? baseevent))
- {
- baseevent ??= new List<IBaseEventData>();
- if (baseevent.Count == 0) baseevent.Add(new MQEventData<TData>(bus, hash, hash));
- return (IEventData<TData>)baseevent.First();
- }
- else
- {
- MQEventData<TData> eventData = new MQEventData<TData>(bus, hash, hash);
- _list.Add(typeof(MQEventData<TData>).FullName!, new List<IBaseEventData>() { eventData });
- return eventData;
- }
- }
- }
- public IEventData<TData, T>? GetEvent<TData, T>()
- {
- lock (_list)
- {
- string hash = GetHash();
- if (_list.TryGetValue(typeof(MQEventData<TData, T>).FullName!, out List<IBaseEventData>? baseevent))
- {
- baseevent ??= new List<IBaseEventData>();
- if (baseevent.Count == 0) baseevent.Add(new MQEventData<TData,T>(bus, hash, hash));
- return (IEventData<TData,T>)baseevent.First();
- }
- else
- {
- MQEventData<TData,T> eventData = new MQEventData<TData,T>(bus, hash, hash);
- _list.Add(typeof(MQEventData<TData, T>).FullName!, new List<IBaseEventData>() { eventData });
- return eventData;
- }
- }
- }
- public IAnonymousEventData? GetEvent(string eventName)
- {
- lock (_list)
- {
- string hash = GetHash();
- ArgumentNullException.ThrowIfNullOrEmpty(eventName);
- if (_list.TryGetValue(typeof(MQAnonymousEventData).FullName!, out List<IBaseEventData>? baseevent))
- {
- baseevent ??= new List<IBaseEventData>();
- if (!baseevent.Where(x => x is MQAnonymousEventData && x.EventName.Contains(eventName)).Any()) baseevent.Add(new MQAnonymousEventData(bus, eventName, GetHash()));
- return (IAnonymousEventData)baseevent.Where(x => x is MQAnonymousEventData && (x as MQAnonymousEventData)!.EventName.Contains(eventName)).First();
- }
- else
- {
- MQAnonymousEventData eventData = new MQAnonymousEventData(bus, eventName, GetHash());
- _list.Add(typeof(MQAnonymousEventData).FullName!, new List<IBaseEventData>() { eventData });
- return eventData;
- }
- }
- }
- public IAnonymousEventData<T>? GetEvent<T>(string eventName)
- {
- lock (_list)
- {
- string hash = GetHash();
- ArgumentNullException.ThrowIfNullOrEmpty(eventName);
- if (_list.TryGetValue(typeof(MQAnonymousEventData<T>).FullName!, out List<IBaseEventData>? baseevent))
- {
- baseevent ??= new List<IBaseEventData>();
- if (!baseevent.Where(x => x is MQAnonymousEventData<T> && x.EventName.Contains(eventName)).Any()) baseevent.Add(new MQAnonymousEventData<T>(bus, eventName, GetHash()));
- return (IAnonymousEventData<T>)baseevent.Where(x => x is MQAnonymousEventData<T> && (x as MQAnonymousEventData<T>)!.EventName.Contains(eventName)).First();
- }
- else
- {
- MQAnonymousEventData<T> eventData = new MQAnonymousEventData<T>(bus, eventName, GetHash());
- _list.Add(typeof(MQAnonymousEventData<T>).FullName!, new List<IBaseEventData>() { eventData });
- return eventData;
- }
- }
- }
- public void Start()
- {
- }
- public void StartService(string ip,int port)
- {
- IsService = true;
- try
- {
- bus = EasyMQ.ActiveHutch.Default.CreateBus(ip, port, new EasyMQ.MessagePackSerializer());
- bus.ConnectionInterruptedListener += (_, _) =>
- {
- IsConnected = false;
- Disconnected?.Invoke(this, EventArgs.Empty);
- };
- IsConnected = true;
- }
- catch
- {
- IsConnected = false;
- }
- }
- }
- }
|