Пример #1
0
        // по получении ответа
        private void OnReadFromNetworkStream(IAsyncResult result)
        {
            PeerBaseContainer peer = result.AsyncState as PeerBaseContainer;
            int msgLength          = BitConverter.ToInt32(peer.Buffer, 0);

            peer.Client.GetStream().Read(peer.Buffer, 0, msgLength);
            //читаем обработанное сообщение
            ImageProcessingMessage msg = new ImageProcessingMessage(peer.Buffer, msgLength);

            //присваиваем значения в соответствии с workID и смещением
            for (int i = 0; i < msg.ImageArray.Length; i++)
            {
                ArrayTempBuffer[i + (msg.WorkID * Offset)] = msg.ImageArray[i];
            }
            //декремент переменной оставшихся частей
            if (onDecrement.WaitOne())
            {
                PartsRemained--;
                //если это последняя часть
                if (PartsRemained == 0)
                {
                    //вызываем делегат
                    onImageProcessed(ArrayTempBuffer);
                }
                onDecrement.ReleaseMutex();
            }
            //завершаем чтение
            peer.Client.GetStream().EndRead(result);
        }
Пример #2
0
        //начинаем слушать в отдельной нити
        private async void Startup()
        {
            Listener.Start();
            while (true)
            {
                TcpClient client = await Listener.AcceptTcpClientAsync();

                if (mutex.WaitOne())
                {
                    PeerBaseContainer newSlave = new PeerBaseContainer(Guid.NewGuid(), client);

                    byte[] bytes = newSlave.Guid.ToByteArray();
                    newSlave.Client.GetStream().Write(bytes, 0, bytes.Length);

                    Workers.Add(newSlave);

                    mutex.ReleaseMutex();
                }
            }
        }