示例#1
0
        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));
            }
        }
示例#2
0
        /// <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);
        }