using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; using Team.FFFeederService.Interfaces; using TouchSocket.Core; using TouchSocket.Sockets; namespace Team.FFFeederService { public class FeederService : IFeederService { private readonly Dictionary _feederCollection; public FeederService() { _feederCollection = new Dictionary(); } public bool CreateFeeder(Guid id, string ip, int port,FeederBrand feederBrand) { if (feederBrand== FeederBrand.TEAM) { var tcpClient = new TouchSocket.Sockets.TcpClient(); var config = new TouchSocketConfig(); config.SetRemoteIPHost(new IPHost(IPAddress.Parse(ip), port)); config.SetTcpDataHandlingAdapter(() => { return new TerminatorPackageAdapter("\r\n"); }); //设置结束符 config.ConfigurePlugins(a => { a.UseTcpReconnection(); }); ////如需永远尝试连接,tryCount设置为-1即可。 //载入配置 tcpClient.Setup(config); IVoiceCoilMotorFeeder feeder = new TeamFeeder(tcpClient); if (_feederCollection.ContainsKey(id)) { var currentFeeder = _feederCollection[id]; currentFeeder.Dispose(); } else { _feederCollection.Add(id,feeder); } feeder.Id = id; _feederCollection[id].FeederConnectedEvent += FeederService_FeederConnectedEvent; _feederCollection[id].FeederDisconnectedEvent += FeederService_FeederDisconnectedEvent; } else { IVoiceCoilMotorFeeder feeder = new AfagFeeder(id,ip,port); if (_feederCollection.ContainsKey(id)) { var currentFeeder = _feederCollection[id]; currentFeeder.Dispose(); } else { _feederCollection.Add(id, feeder); } _feederCollection[id].FeederConnectedEvent += FeederService_FeederConnectedEvent; _feederCollection[id].FeederDisconnectedEvent += FeederService_FeederDisconnectedEvent; } return true; } public Task CreateFeederAsync(Guid id, string ip, int port, FeederBrand feederBrand) { if(feederBrand == FeederBrand.TEAM) { var tcpClient = new TouchSocket.Sockets.TcpClient(); var config = new TouchSocketConfig(); config.SetRemoteIPHost(new IPHost(IPAddress.Parse(ip), port)); config.SetTcpDataHandlingAdapter(() => { return new TerminatorPackageAdapter("\r\n"); }); //设置结束符 config.ConfigurePlugins(a => { a.UseTcpReconnection(); }); ////如需永远尝试连接,tryCount设置为-1即可。 //载入配置 tcpClient.Setup(config); IVoiceCoilMotorFeeder feeder = new TeamFeeder(tcpClient); if (_feederCollection.ContainsKey(id)) { var currentFeeder = _feederCollection[id]; currentFeeder.Dispose(); } else { _feederCollection.Add(id, feeder); } feeder.Id = id; _feederCollection[id].FeederConnectedEvent += FeederService_FeederConnectedEvent; _feederCollection[id].FeederDisconnectedEvent += FeederService_FeederDisconnectedEvent; } else { IVoiceCoilMotorFeeder feeder = new AfagFeeder(id, ip, port); if (_feederCollection.ContainsKey(id)) { var currentFeeder = _feederCollection[id]; currentFeeder.Dispose(); } else { _feederCollection.Add(id, feeder); } _feederCollection[id].FeederConnectedEvent += FeederService_FeederConnectedEvent; _feederCollection[id].FeederDisconnectedEvent += FeederService_FeederDisconnectedEvent; } return Task.FromResult(true); } /// /// Feeder断开连接时 /// /// /// /// /// private void FeederService_FeederDisconnectedEvent(Guid feederId, ITcpClient client, ClosedEventArgs e) { } /// /// Feeder连接上时 /// /// /// /// /// private void FeederService_FeederConnectedEvent(Guid feederId, ITcpClient client, ConnectedEventArgs e) { } public IVoiceCoilMotorFeeder GetFeeder(Guid id) { return _feederCollection[id]; } public Task GetFeederAsync(Guid id) { return Task.FromResult(_feederCollection[id]); } public Task UnRegisterFeederAsync(Guid id) { if (_feederCollection.ContainsKey(id)) { var feeder = _feederCollection[id]; feeder.Dispose(); } return Task.CompletedTask; } public void UnRegisterFeeder(Guid id) { if (_feederCollection.ContainsKey(id)) { var feeder = _feederCollection[id]; feeder.Dispose(); } } } }