コード例 #1
0
        public void Init()
        {
            for (var i = 1; i <= _nServers; i++)
            {
                var url = RemotingEndpoint.BuildRemoteUrl("localhost", 8080 + i, "s" + i);
                var smr = new ServerSMR(url, _serverList.Select(server => server.EndpointURL).ToList());
                _serverList.Add(smr);
            }

            var serverUrls = _serverList.Select(server => server.EndpointURL).ToList();

            Client1 = new ClientSMR("tcp://localhost:8010/c1", serverUrls);
            Client2 = new ClientSMR("tcp://localhost:8011/c2", serverUrls);
        }
コード例 #2
0
        public override void Client(string client_id, string URL, string[] script, IEnumerable <string> serverUrls)
        {
            Client client = null;

            lock (this)
            {
                try
                {
                    client = new ClientSMR(URL, serverUrls);
                    clients.Add(client_id, client);
                    Console.WriteLine("Added client {0} [{1}] with script {2}", client_id, URL, script);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }

            client?.runScript(script);
        }
コード例 #3
0
        public static void Main(string[] args)
        {
            var client = new ClientSMR();


            string inputFile = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), @"sampleClientScript.txt");

            if (args.Length > 1)
            {
                inputFile = args[0];
            }


            var instructions = File.ReadAllLines(inputFile);

            ProcessLines(instructions, 1);

            // process the lines with instructions n times
            void ProcessLines(string[] lines, int n)
            {
                var onRepeat           = false;
                var repeatCycle        = 0;
                var repeatInstructions = new List <string>();

                for (var i = 0; i < n; i++)
                {
                    foreach (var line in lines)
                    {
                        var splitLine = line.Split(' ');

                        // if inside a begin-repeat
                        if (onRepeat)
                        {
                            if (splitLine[0] != "end-repeat")
                            {
                                repeatInstructions.Add(line);
                                continue;
                            }

                            ProcessLines(repeatInstructions.ToArray(), repeatCycle);
                            onRepeat    = false;
                            repeatCycle = 0;
                            repeatInstructions.Clear();
                            continue;
                        }

                        Tuple receivedTuple;
                        switch (splitLine[0])
                        {
                        case "add":
                            Tuple tupleToAdd = ParseTuple(splitLine[1]);
                            client.Write(tupleToAdd);
                            Console.WriteLine("Added: " + tupleToAdd);
                            break;

                        case "read":
                            Tuple tupleToRead = ParseTuple(splitLine[1]);
                            receivedTuple = client.Read(tupleToRead);
                            Console.WriteLine("Tried to Read: " + tupleToRead + ", and got: " +
                                              receivedTuple);
                            break;

                        case "take":
                            Tuple tupleToTake = ParseTuple(splitLine[1]);
                            receivedTuple = client.Take(tupleToTake);
                            Console.WriteLine("Tried to Take: " + tupleToTake + ", and got: " +
                                              receivedTuple);
                            break;

                        case "wait":
                            var time = int.Parse(splitLine[1]);
                            Thread.Sleep(time);
                            break;

                        case "begin-repeat":
                            onRepeat    = true;
                            repeatCycle = int.Parse(splitLine[1]);
                            break;

                        case "end-repeat":
                            throw new NotSupportedException();
                        }
                    }
                }
            }

            // parses a string representation of a tuple
            Tuple ParseTuple(string stringTuple)
            {
                var fields = new List <object>();

                var matches = Regex.Matches(stringTuple, "\"[^\"]+\"|\\w+\\([^\\)]+\\)|\\w+");

                foreach (var match in matches)
                {
                    var field = match.ToString();
                    // if it's a string
                    if (field[0].Equals('"'))
                    {
                        // add to the list of object (the tuple fields)
                        fields.Add(field.Trim('"'));
                    }
                    // if it's an object
                    else
                    {
                        if (field.Equals("null"))
                        {
                            fields.Add(null);
                        }
                        else
                        {
                            object[] classArgs = field.Split("(),\"".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);


                            var classType = Type.GetType("CommonTypes.tuple.tupleobjects." + classArgs[0] +
                                                         ", CommonTypes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.") ??
                                            throw new InvalidOperationException("Could not create instance using classType: " + classArgs[0]);

                            // if it has arguments
                            if (classArgs.Length > 1)
                            {
                                // convert strings to int if applicable
                                classArgs = Array.ConvertAll(classArgs.Skip(1).ToArray(),
                                                             s => int.TryParse(s.ToString(), out var i) ? i : s);

                                // instantiate dadTestObject using the arguments provided
                                var dadTestObject = Activator.CreateInstance(classType, classArgs);

                                // add to the list of object (the tuple fields)
                                fields.Add(dadTestObject);
                            }
                            else
                            {
                                fields.Add(classType);
                            }
                        }
                    }
                }
                return(new Tuple(fields));
            }
        }