using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Aitex.Core.RT.DataCenter; using Aitex.Core.RT.Log; using Aitex.Core.RT.OperationCenter; using Aitex.Core.Util; namespace MECF.Framework.Common.Communications { /// /// 管理所有连接,通常在PLC之前 /// public class ConnectionManager : Singleton { public List ConnectionList { get { foreach (var conn in _connections) { conn.IsConnected = _dicConnections[conn.Name].IsConnected; } return _connections; } } private Dictionary _dicConnections = new Dictionary(); private List _connections = new List(); public void Initialize() { OP.Subscribe("Connection.Connect", (string cmd, object[] args) => { Connect((string) args[0]); return true; }); OP.Subscribe("Connection.Disconnect", (string cmd, object[] args) => { Disconnect((string)args[0]); return true; }); DATA.Subscribe("Connection.List", () => ConnectionList); } public void Terminate() { } public void Subscribe(string name, IConnection conn) { if (string.IsNullOrEmpty(name)) { return; } if (conn == null) { return; } _connections.Add(new NotifiableConnectionItem(){Address = conn.Address, Name = name}); _dicConnections[name] = conn; } public void Connect(string name) { if (_dicConnections.ContainsKey(name) && _dicConnections[name] != null) { _dicConnections[name].Connect(); } } public void Disconnect(string name) { if (_dicConnections.ContainsKey(name) && _dicConnections[name] != null) { _dicConnections[name].Disconnect(); } } } }