static void Main(string[] args)
        {
            Console.WriteLine("Successor Starts!");
            //This Process runs after Delta

            Console.WriteLine("Please enter IP address for this node.");
            var successorNodeIP = Console.ReadLine();

            Console.WriteLine("Please enter IP address for Prefix.");
            var prefixNodeIP = Console.ReadLine();


            var successorNodeAddr = new TCPIPNodeAddress(successorNodeIP, 3000);

            Node.getInstance().init(successorNodeAddr);
            var delta2sucessor = NetChannel.net2one();

            var prefixNodeAddr   = new TCPIPNodeAddress(prefixNodeIP, 3000);
            var successor2prefix =
                NetChannel.one2net(prefixNodeAddr, 51); //channel number 50 is already taken for delta2prefix

            Console.WriteLine("successor2prefix location = " + successor2prefix.getLocation().ToString());

            //write to prefix successor is running so it can notify delta about it
            successor2prefix.write(0);

            Console.WriteLine("Network is good to run. Please refer to Consume process window");
            new CSPParallel(
                new IamCSProcess[]
            {
                new Successor(delta2sucessor, successor2prefix)
            }
                ).run();
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            Console.WriteLine("Delta Starts!");
            //This process starts after Prefix


            Console.WriteLine("Please enter IP address for this node.");
            var deltaNodeIP = Console.ReadLine();

            Console.WriteLine("Please enter IP address for Prefix.");
            var prefixNodeIP = Console.ReadLine();

            Console.WriteLine("Please enter IP address for Consume.");
            var consumeNodeIP = Console.ReadLine();

            Console.WriteLine("Please enter IP address for Successor.");
            var successorNodeIP = Console.ReadLine();

            var deltaNodeAddr = new TCPIPNodeAddress(deltaNodeIP, 3000);

            Node.getInstance().init(deltaNodeAddr);
            var prefix2delta = NetChannel.net2one();

            //we need to notify prefix that delta exists before it can connect to it
            var prefixNodeAddr = new TCPIPNodeAddress(prefixNodeIP, 3000);
            var delta2prefix   = NetChannel.one2net(prefixNodeAddr, 50);

            delta2prefix.write(0); //notify prefix delta is ready


            var consumeNodeAddr = new TCPIPNodeAddress(consumeNodeIP, 3300);
            var delta2consume   = NetChannel.one2net(consumeNodeAddr, 50);

            //first write to the consume to make sure network works
            delta2consume.write(0);


            //Please start successor process now
            Console.WriteLine("Please start successor process now");
            prefix2delta.read(); //when the signal from prefix comes back it means successor is already running

            var successorNodeAddr = new TCPIPNodeAddress(successorNodeIP, 3000);
            var delta2successor   = NetChannel.one2net(successorNodeAddr, 50);

            Console.WriteLine("delta2consume location = " + delta2consume.getLocation().ToString());
            Console.WriteLine("delta2successor location = " + delta2successor.getLocation().ToString());

            Console.WriteLine("\nNetwork is good to run. Please refer to Consume process window");


            new CSPParallel(
                new IamCSProcess[]
            {
                new Delta2(prefix2delta, delta2consume, delta2successor)
            }
                ).run();
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Consume started!");

            Console.WriteLine("Please enter IP address for this node.");
            var consumeNodeIP = Console.ReadLine();

            Console.WriteLine("Please enter IP address for Numbers.");
            var numbersNodeIP = Console.ReadLine();

            Console.WriteLine("Please enter IP address for Prefix.");
            var prefixNodeIP = Console.ReadLine();

            Console.WriteLine("Please enter IP address for Delta.");
            var deltaNodeIP = Console.ReadLine();

            Console.WriteLine("Please enter IP address for Successor.");
            var successorNodeIP = Console.ReadLine();

            var consumeNodeAddr = new TCPIPNodeAddress(consumeNodeIP, 3300);

            Node.getInstance().init(consumeNodeAddr);

            var network2Consume = NetChannel.net2one();

            Console.WriteLine("network2consume location = " + network2Consume.getLocation().ToString());

            Console.WriteLine("Waiting for read from the numbers... Please start other processes nowi");
            network2Consume.read();

            Console.WriteLine("Read signal from numbers");


            //====================== Running the test
            int nLoops = 10000;

            Console.WriteLine(nLoops + " loops ...\n");


            new CSPParallel(
                new IamCSProcess[] {
                new Consume(nLoops, network2Consume)
            }
                ).run();
            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Please enter IP address for this Node.");
            var chefNodeIP = Console.ReadLine();

            Console.WriteLine("Please enter IP address for Canteen.");
            var canteenNodeIP = Console.ReadLine();

            var chefNodeAddr = new TCPIPNodeAddress(chefNodeIP, 3003);

            Node.getInstance().init(chefNodeAddr);

            var canteenAddress = new TCPIPNodeAddress(canteenNodeIP, 3000);
            var cooked         = NetChannel.one2net(canteenAddress, 50);

            Console.WriteLine("cooked location = " + cooked.getLocation());

            IamCSProcess[] processList = { new Kitchen(supply: cooked) };
            new CSPParallel(processList).run();
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Prefix Starts!");
            //It is the first process to run after the Consume

            Console.WriteLine("Please enter IP address for this node.");
            var prefixNodeIP = Console.ReadLine();

            Console.WriteLine("Please enter IP address for Delta.");
            var deltaNodeIP = Console.ReadLine();


            var prefixNodeAddr = new TCPIPNodeAddress(prefixNodeIP, 3000);

            Node.getInstance().init(prefixNodeAddr);
            var delta2prefix = NetChannel.net2one();

            var successor2prefix = NetChannel.net2one();

            Console.WriteLine("Please start Delta process now");
            delta2prefix.read(); //wait for the read from the delta to know that it exists

            Console.WriteLine("Read message from Delta");

            var deltaNodeAddr = new TCPIPNodeAddress(deltaNodeIP, 3000);
            var prefix2delta  = NetChannel.one2net(deltaNodeAddr, 50);

            Console.WriteLine("prefix2delta location = " + prefix2delta.getLocation().ToString());

            successor2prefix.read(); //waiting for read from successor to now it is running
            prefix2delta.write(0);   //notify delta sucessor is running

            Console.WriteLine("\nNetwork is good to run. Please refer to Consume process window");

            new CSPParallel(
                new IamCSProcess[]
            {
                new Prefix(0, successor2prefix, prefix2delta)
            }
                ).run();
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Numbers started!");

            Console.WriteLine("Please enter IP address for this node.");
            var numbersNodeIP = Console.ReadLine();

            Console.WriteLine("Please enter IP address for Consume.");
            var consumeNodeIP = Console.ReadLine();


            var numbersNodeAddr = new TCPIPNodeAddress(numbersNodeIP, 3000);

            Node.getInstance().init(numbersNodeAddr);
            var consumeNodeAddr = new TCPIPNodeAddress(consumeNodeIP, 3300);
            var numbers2network = NetChannel.one2net(consumeNodeAddr, 50);

            Console.WriteLine("network2consume location = " + numbers2network.getLocation().ToString());

            Console.WriteLine("Sending signal to Consume...");
            numbers2network.write(0); // signal from the numbers;

            Console.WriteLine("Sent signal to Consume");

            //====================== Running the test

            One2OneChannel P2D = Channel.one2one();
            One2OneChannel D2S = Channel.one2one();
            One2OneChannel S2P = Channel.one2one();

            new CSPParallel(
                new IamCSProcess[]
            {
                new Prefix(0, S2P.In(), P2D.Out()),
                new Delta2(P2D.In(), numbers2network, D2S.Out()),
                new Successor(D2S.In(), S2P.Out()),
            }
                ).run();
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Please enter IP address for this node.");
            var canteenNodeIP = Console.ReadLine();

            Console.WriteLine("Please enter IP address for Philosophers.");
            var philosopherNodeIP = Console.ReadLine();

            var canteenNodeAddr = new TCPIPNodeAddress(canteenNodeIP, 3000);

            Node.getInstance().init(canteenNodeAddr);

            var cooked = NetChannel.net2one();

            Console.WriteLine("cooked location = " + cooked.getLocation().ToString());

            var getOne = NetChannel.net2one();

            Console.WriteLine("getOne location = " + getOne.getLocation().ToString());

            Console.WriteLine("Waiting for read from the philosophers...");
            getOne.read(); // signal from the philosophers;
            Console.WriteLine("Read signal from philosophers.\nCreating philosophers channel.");

            var philosopherAddr = new TCPIPNodeAddress(philosopherNodeIP, 3002);

            Console.WriteLine("Philosophers Address in canteen created.");

            var gotOne = NetChannel.one2net(philosopherAddr, 50);

            Console.WriteLine("Philosophers channel in canteen created.");


            IamCSProcess[] processList =
            {
                new ClockedQueuingServery(service: getOne, deliver: gotOne, supply: cooked)
            };
            new CSPParallel(processList).run();
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Please enter IP address for this Node.");
            var philosopherNodeIP = Console.ReadLine();

            Console.WriteLine("Please enter IP address for Canteen.");
            var canteenNodeIP = Console.ReadLine();


            var philosopherNodeAddr = new TCPIPNodeAddress(philosopherNodeIP, 3002);

            Node.getInstance().init(philosopherNodeAddr);

            var gotOne = NetChannel.net2any();

            Console.WriteLine("gotOne location = " + gotOne.getLocation().ToString());

            var canteenAddress = new TCPIPNodeAddress(canteenNodeIP, 3000);
            var getOne         = NetChannel.any2net(canteenAddress, 51);

            Console.WriteLine("getOne location = " + getOne.getLocation().ToString());

            getOne.write(0);
            Console.WriteLine("Wrote signal to the canteen");

            List <Philosopher> philosophersList = new List <Philosopher>();

            for (int i = 0; i < 4; i++)
            {
                philosophersList.Add(new Philosopher(philosopherId: i, service: getOne, deliver: gotOne));
            }

            IamCSProcess[] network = philosophersList.ToArray();

            new CSPParallel(network).run();
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Run Writers started.");

            int nChannels = 1;

            Console.WriteLine("Please enter number of writers per channel");
            int nWritersPerChannel = Int32.Parse(Console.ReadLine());
            int nMessages          = 2;

            Console.WriteLine("Please enter writer ID");
            int writerID = Int32.Parse(Console.ReadLine());


            Console.WriteLine("Please enter IP address for this node.");
            var writersChannelNodeIP = Console.ReadLine();

            Console.WriteLine("Please enter IP address for Reader.");
            var readerNodeIP = Console.ReadLine();


            var readerNodeAddr = new TCPIPNodeAddress(readerNodeIP, 3300);
            var fromReader     = NetChannel.net2one();

            var writersChannelNodesAddresses = new TCPIPNodeAddress(writersChannelNodeIP, 3300);

            Node.getInstance().init(writersChannelNodesAddresses);

            var readersChannelNumberForThisWriter = Int32.Parse("5" + (writerID - 1));
            var writers2network = NetChannel.any2net(readerNodeAddr, readersChannelNumberForThisWriter);

            Console.WriteLine("writers2network location = " + writers2network.getLocation().ToString());

            Console.WriteLine("Informing reader that Writer" + writerID + " is ready and sending its IP");
            //writers2network.write(GetLocalIPAddress.ConvertLocalIPAddressToString()); //use while all nodes are on different machines
            writers2network.write(writersChannelNodeIP); //use for local loopback addresses

            CSTimer timer = new CSTimer();

            timer.sleep(2000);
            Console.WriteLine("Waiting for the signal from Reader...");
            fromReader.read();

            Console.WriteLine("Read signal from Reader");

            //====================== Running the test
            StressedWriterPerformance[] writers = new StressedWriterPerformance[nChannels * nWritersPerChannel];

            for (int channel = 0; channel < nChannels; channel++)
            {
                for (int i = 0; i < nWritersPerChannel; i++)
                {
                    writers[(channel * nWritersPerChannel) + i] =
                        new StressedWriterPerformance(writers2network, channel, i, writerID);
                    writerID++;
                }
            }

            for (int i = 0; i < 100; i++)
            {
                new CSPParallel(
                    new IamCSProcess[]
                {
                    new CSPParallel(writers),
                }
                    ).run();
            }

            Console.WriteLine("Finished all");
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Run Reader started");

            Console.WriteLine("Please enter number of writers to be created");
            int nChannels = Int32.Parse(Console.ReadLine());

            Console.WriteLine("Please enter number of writers per channel");
            int nWritersPerChannel = Int32.Parse(Console.ReadLine());
            int nMessages          = 2;

            Console.WriteLine("Please enter IP address for the reader.");
            var readerNodeIP = Console.ReadLine();


            var readerNodeAddr = new TCPIPNodeAddress(readerNodeIP, 3300);

            Node.getInstance().init(readerNodeAddr);

            NetAltingChannelInput[] network2Reader = new NetAltingChannelInput[nChannels];
            for (int i = 0; i < nChannels; i++)
            {
                network2Reader[i] = NetChannel.net2one();
                Console.WriteLine("network2Reader location = " + network2Reader[i].getLocation().ToString());
            }

            string[] writersNodesIPs = new string[nChannels];
            Console.WriteLine("Wait for writers to confirm they are ready and send their IPs");
            for (int i = 0; i < nChannels; i++)
            {
                writersNodesIPs[i] = (string)network2Reader[i].read();
            }

            NetChannelOutput[] reader2allWriters = new NetChannelOutput[nChannels];
            for (int i = 0; i < writersNodesIPs.Length; i++)
            {
                var writersChannelNodeAddress = new TCPIPNodeAddress(writersNodesIPs[i], 3300);
                reader2allWriters[i] =
                    NetChannel.one2net(writersChannelNodeAddress,
                                       50); //It's going to be always first read channel in the writer
            }

            Console.WriteLine("Writing to channels to notify them they are ready to start");
            for (int i = 0; i < nChannels; i++)
            {
                reader2allWriters[i].write(0);
            }

            Console.WriteLine("Sent signal to Writers");


            //====================== Running the test
            for (int i = 0; i < 100; i++)
            {
                new CSPParallel(
                    new IamCSProcess[]
                {
                    new NetworkedStressedReaderPerformance(network2Reader, nMessages, nChannels, nWritersPerChannel)
                }
                    ).run();
            }

            Console.WriteLine("Finished all");
            Console.ReadKey();
        }