private async Task StartServerAsync5(int port) { IPAddress ipaddress = IPAddress.Parse(myhost); // Мастер вешает слушателя на свой компьютер TcpListener listener = new TcpListener(ipaddress, port); listener.Server.NoDelay = true; listener.Server.LingerState = new LingerOption(true, 0); listener.Start(); // Цикл прослушивания: находятся коннекшины (клиенты) и собираются в словарь while (true) { TcpClient client = await listener.AcceptTcpClientAsync(); client.NoDelay = true; client.LingerState = new LingerOption(true, 0); // Посылаем новый номер клиенту // ... // Получаем номер от клиента // ... // Сравниваем и фиксируем var stream = client.GetStream(); var ic = new IndividualChannel(listener, client, stream); masterchannels.Add(ic); // пошлем номер канала, это и будет кодом узла int nom = masterchannels.Count - 1; //Order(nom, tp_command, nom, new PType(PTypeEnumeration.none)); } }
/// <summary> /// в канал посылается команда, у которой есть параметры: таблица и сообщение /// </summary> /// <param name="chan"></param> /// <param name="command"></param> /// <param name="tab"></param> /// <param name="message"></param> /// <returns></returns> public object Order(int chan, int command, int tab, object message) { IndividualChannel ch = masterchannels[chan]; // Определяем сигнатуру var typtyp = tass[tab].signatures[command]; ch.bw.Write((byte)command); // посылаем таблицу ch.bw.Write(tab); // посылаем посылку //PaCell.SetPO(typtyp.Item1, ch.bw, message); ByteFlow.Serialize(ch.bw, message, typtyp.Item1); ch.Flush(); object res = null; // Если нужно, принимаем результат if (typtyp.Item2.Vid != PTypeEnumeration.none) { res = ByteFlow.Deserialize(ch.br, typtyp.Item2); // PaCell.GetPO(typtyp.Item2, ch.br); } return(res); }