CSharp · Console
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
public class Program
{
public static void Main()
{
List<string> equipments = new List<string>();
equipments.Add("192.168.0.12");
equipments.Add("192.168.0.13");
equipments.Add("192.168.0.14");
equipments.Add("192.168.0.11");
foreach(var equipment in equipments) {
List<RegisterMap> registers = new List<RegisterMap>();
registers.Add(
new RegisterMap
{
FriendlyName = equipment + ":Value 1",
Register = 2001,
StationID = 1
});
registers.Add(
new RegisterMap
{
FriendlyName = equipment + ":Value 2",
Register = 2002,
StationID = 1
});
registers.Add(
new RegisterMap
{
FriendlyName = equipment + ":Value 3",
Register = 2003,
StationID = 1
});
A.AddMaster(equipment, 502, registers);
}
}
}
static class A {
private static List<Task> _tasks = new List<Task>();
private static List<MBTCPMaster> _masters = new List<MBTCPMaster>();
public static void AddMaster(string ipAddress, int port, List<RegisterMap> registers)
{
Console.WriteLine("IN AddMaster : " + ipAddress + " " + registers[0].FriendlyName + "\n");
new Thread(() =>
{
_tasks.Add(Task.Factory.StartNew(() =>
{
Monitor.Enter(_masters);
_masters.Add(new MBTCPMaster().Connect(ipAddress, port).SetRegisters(registers));
//_masters.Last().OnEvent += MasterEvent;
//Debug.WriteLine(_masters.Count + " TCP masters connected");
Monitor.Exit(_masters);
}));
}).Start();
}
}
class MBTCPMaster {
private string _hostname = string.Empty;
private List<RegisterMap> _registersToRead;
public MBTCPMaster SetRegisters(List<RegisterMap> registerList)
{
Console.WriteLine(" IN SetRegisters : " +_hostname + " " + registerList[0].FriendlyName + "\n");
_registersToRead = registerList;
return this;
}
public MBTCPMaster Connect(string hostname, int port)
{
_hostname = hostname;
_registersToRead = new List<RegisterMap>();
return this;
}
}
public struct RegisterMap
{
public byte StationID;
public string FriendlyName;
public ushort Register;
}