示例#1
0
        //first recieve fails not sure why
        private void Receive()
        {
            socket.BeginReceiveFrom(PacketBuffer, 0, BufferSize, SocketFlags.None, ref ClientEndpoint, AsReceive = (ar) =>
            {
                AsyncBuffer so = (AsyncBuffer)ar.AsyncState;
                int bytes      = socket.EndReceiveFrom(ar, ref ClientEndpoint);
                socket.BeginReceiveFrom(so.Buffer, 0, BufferSize, SocketFlags.None, ref ClientEndpoint, AsReceive, so);
                byte[] tempBuff = new byte[bytes];
                Array.Copy(so.Buffer, 0, tempBuff, 0, tempBuff.Length);

                Client TargetClient = null;
                //Check if client is already connected
                if (ConnectedClients.Where(x => x.endPoint.Equals(ClientEndpoint)).Count() == 0)
                {
                    Console.WriteLine("New client connected " + ClientEndpoint.ToString());
                    TargetClient = new Client(ClientEndpoint);
                    ConnectedClients.Add(TargetClient);
                }
                else
                {
                    TargetClient = ConnectedClients.Where(x => x.endPoint.Equals(ClientEndpoint)).First();
                }

                Packet packet = new Packet(tempBuff);
                if (packet.IsValid)
                {
                    Console.WriteLine("Recieved " + packet.ToString());
                    socket.SendTo(TargetClient.HandlePacket(packet), ClientEndpoint);
                }
            }, AsBuffer);
        }
        public GeneratorTestsBase(string logFolderName, string logFileName, int consumerCount)
        {
            _logFolderName = logFolderName ?? @"Log";
            _logFileName   = logFileName;

            CancellationTokenSource = new CancellationTokenSource();
            CancellationTokenSource.Token.Register(() => Log("Cancellation requested."));
            Buffer = new AsyncBuffer <TWorkItem>(CancellationTokenSource.Token);

            Generator = new MyCommandGenerator(CancellationTokenSource);
            Consumers = Enumerable
                        .Range(0, consumerCount)
                        .Select(n => new MyCommandConsumer <TWorkItem>(Buffer, CancellationTokenSource))
                        .ToArray();
        }
示例#3
0
        /// <summary>
        /// Start main application
        /// </summary>
        /// <returns>If it was successfull</returns>
        public bool Start()
        {
            Console.WriteLine("Enter a string:");
            string line = Console.ReadLine();

            Console.WriteLine("Synchronized? (Y/N)");

            bool sync = Console.ReadLine().ToLower() == "y";

            // What kind of buffer should we create?
            if (sync)
            {
                Buffer = new SyncBuffer<char>();
            }
            else
            {
                Buffer = new AsyncBuffer<char>();
            }

            Random random = new Random();

            // Create the reader and writer.
            Reader = new Reader(Buffer, line.Length, random);
            Writer = new Writer(Buffer, line, random);

            Thread readerThread = new Thread(new ThreadStart(Reader.Read));
            Thread writerThread = new Thread(new ThreadStart(Writer.Write));

            // Start the threads.
            readerThread.Start();
            writerThread.Start();

            // Wait on main thread for them to complete.
            readerThread.Join();
            writerThread.Join();

            // Print result
            Console.WriteLine("The Write String: " + Writer.Line);
            Console.WriteLine("The Read String: " + Reader.Line);

            Console.WriteLine();

            return true;
        }
 public MyCommandConsumer(AsyncBuffer <TWorkItem> buffer, CancellationTokenSource cts)
 {
     _buffer = buffer;
     _cancellationTokenSource = cts;
 }