コード例 #1
0
 public Program(string name, string url, Location.LatLng location)
 {
     _random = new Random();
     _url    = url;
     _thing  = BuildANewThing.As(webcamType)
               .IdentifiedBy(computeID(url + "-canard"))
               .ContainingA.Location(location)
               .AndA.String("name", name)
               .AndA.String("url", url);
 }
コード例 #2
0
        private void RegisterCamera()
        {
            var computerName = Environment.MachineName;

            var camera = BuildANewThing.As(Model.ArmaCamera)
                         .IdentifiedBy(computerName + "-ArmaCamera")
                         .ContainingA.String("view", "default")
                         .ContainingA.String("target", "player")
                         .AndA.String("computerName", computerName);

            _warehouse.RegisterThing(camera);
            _cameraRegistered = true;
        }
コード例 #3
0
        public string Execute(IList <object> units_data, IList <object> markers_data)
        {
            lock (_lock)
            {
                if (!_client.IsConnected())
                {
                    _client.Connect();
                    return("notconnected");
                }

                if (!_hasReceivedSomething && ++_nbExecute > 3)
                {
                    return("hint \"not connected 2\"");
                }

                if (_firstExcecute)
                {
                    _firstExcecute = false;

                    foreach (var thing in _warehouse.Things)
                    {
                        if (thing.Type != null)
                        {
                            var name = thing.Type.Name.ToLowerInvariant();
                            if (name.StartsWith("arma") || name.EndsWith("armacamera"))
                            {
                                _warehouse.RemoveThing(thing);
                            }
                        }
                    }

                    _client.Send();
                }

                if (!_cameraRegistered)
                {
                    RegisterCamera();
                }

                if (units_data != null)
                {
                    foreach (IList <object> argument in units_data)
                    {
                        if (argument == null)
                        {
                            continue;
                        }

                        if (argument.Count != 14)
                        {
                            throw new FormatException(
                                      "This should be a list of [ID,lat,lng,alt,heading,dammage,fatigue,fuel,type,isPlayer,side,vehicle]");
                        }

                        var ID = (string)argument[0];

                        var x   = (double)argument[1];
                        var y   = (double)argument[2];
                        var alt = (double)argument[3];

                        var heading    = (double)argument[4];
                        var dammage    = (double)argument[5];
                        var fatigue    = (double)argument[6];
                        var fuel       = Math.Round((double)argument[7], 1);
                        var speed      = Math.Round((double)argument[8], 1);
                        var type       = (string)argument[9];
                        var isPlayer   = (bool)argument[10];
                        var side       = (string)argument[11];
                        var vehicle    = (string)argument[12];
                        var detectedBy = (string)argument[13];


                        Thing unit;

                        if (isPlayer)
                        {
                            unit = BuildANewThing.As(Model.ArmaPlayer)
                                   .IdentifiedBy(ID);

                            FillArmaUnit(unit, fatigue);
                        }
                        else if (vehicle != ID)
                        {
                            if (_testUAV.IsMatch(type))
                            {
                                unit = BuildANewThing.As(Model.ArmaUAV).IdentifiedBy(vehicle);
                            }
                            else if (_testUGV.IsMatch(type))
                            {
                                unit = BuildANewThing.As(Model.ArmaUGV).IdentifiedBy(vehicle);
                                unit.Boolean("waiting", Math.Abs(speed) < 0.01);
                            }
                            else
                            {
                                unit = BuildANewThing.As(Model.ArmaVehicle).IdentifiedBy(vehicle);
                            }

                            unit.Double("fuel", fuel);
                        }
                        else
                        {
                            unit = BuildANewThing.As(Model.ArmaDetectedUnit)
                                   .IdentifiedBy(ID)
                                   .ContainingA.String("side", side);

                            if (!string.IsNullOrEmpty(detectedBy))
                            {
                                var source = _warehouse.GetThing(detectedBy);
                                if (source != null)
                                {
                                    unit.Connect(source);
                                }
                            }

                            FillArmaUnit(unit, fatigue);
                        }

                        FillArmaThing(unit,
                                      Tools.ConvertArmaLocationToLatLng(y, x, alt),
                                      //new Location.Point(x, y, alt),
                                      heading, speed, dammage, type);

                        _warehouse.RegisterThing(unit);
                    }
                }

                if (markers_data != null)
                {
                    foreach (IList <object> argument in markers_data)
                    {
                        if (argument == null)
                        {
                            continue;
                        }

                        if (argument.Count != 6)
                        {
                            throw new FormatException(
                                      "This should be a list of [ID,lat,lng,alt,type,text]");
                        }

                        var ID = (string)argument[0];

                        var x    = (double)argument[1];
                        var y    = (double)argument[2];
                        var alt  = (double)argument[3];
                        var type = (string)argument[4];
                        var text = (string)argument[5];

                        _warehouse.RegisterThing(BuildANewThing.As(Model.ArmaMarker).IdentifiedBy(ID)
                                                 .ContainingA.Location(Tools.ConvertArmaLocationToLatLng(y, x, alt))
                                                 .AndA.String("type", type)
                                                 .AndA.String("text", text));
                    }
                }

                _client.Send();

                var responseObject = _action.Count > 0 ? _action.Dequeue() : "nop";

                return(responseObject);
            }
        }
コード例 #4
0
        static void Main(/*string[] args*/)
        {
            // Load settings
            var settings = ConfigurationManager.AppSettings;

            ThingType messageType = BuildANewThingType.Named("messenger:message")
                                    .ContainingA.String("author")
                                    .AndA.String("content")
                                    .AndA.DateTime("datetime")
                                    .AndA.NotRequired.Int("number");

            var myBot = new Bot();

            myBot.loadSettings();
            myBot.isAcceptingUserInput = false;
            myBot.loadAIMLFromFiles();
            myBot.isAcceptingUserInput = true;

            //var users = new Dictionary<string, User>();

            var warehouse = new Warehouse();
            var client    = new Client(settings["senderId"], settings["connection"], warehouse);

            var maxNumber = 0;

            warehouse.Events.OnReceivedNew += delegate(object sender, WarehouseEvents.ThingEventArgs eventArgs)
            {
                var thing = eventArgs.Thing;
                if (thing.Type != null && thing.Type.Name.StartsWith("messenger:message"))
                {
                    var date = thing.DateTime("datetime");
                    maxNumber = Math.Max(maxNumber, thing.Int("number"));

                    var diff = Math.Abs((DateTime.UtcNow - date).TotalSeconds);
                    if (diff > 20)
                    {
                        Console.WriteLine("Old message ignored: " + diff);
                        return;
                    }

                    var content = thing.String("content");

                    var result = myBot.Chat(content, thing.String("author"));

                    Thread.Sleep(content.Length * 20 + result.Output.Length * 30 + 800);

                    Thing answer = BuildANewThing.As(messageType).IdentifiedBy(Guid.NewGuid().ToString())
                                   .ContainingA.String("author", "Roger")
                                   .AndA.String("content", result.Output)
                                   .AndA.DateTime("datetime", DateTime.UtcNow)
                                   .AndA.Int("number", ++maxNumber);

                    warehouse.RegisterThing(answer);

                    client.Send();
                }
            };

            Thread.Sleep(Timeout.Infinite);

            /*var text = "Hi";
             *
             * Console.WriteLine("Alain: Hi");
             * var mod = 1;
             *
             * var timer = new Timer();
             * timer.Interval = 3500;
             * timer.Elapsed += (sender, eventArgs) =>
             * {
             *
             *      Request r;
             *      if (mod == 1)
             *      {
             *              mod = 0;
             *              r = new Request(text, myUser, myBot);
             *              Console.Write("Roger: ");
             *      }
             *      else
             *      {
             *              mod = 1;
             *              r = new Request(text, myUser2, myBot);
             *              Console.Write("Alain: ");
             *      }
             *      Result res = myBot.Chat(r);
             *      text = res.Output;
             *      Console.WriteLine(text);
             *
             *
             * };
             *
             * timer.Enabled = true;
             * timer.Start();
             *
             * Thread.Sleep(Timeout.Infinite);
             * while (true)
             * {
             *      Console.Write("You: ");
             *      string input = Console.ReadLine();
             *      if (input.ToLower() == "quit")
             *      {
             *              break;
             *      }
             *      else
             *      {
             *              Request r = new Request(input, myUser, myBot);
             *              Result res = myBot.Chat(r);
             *              Console.WriteLine("Bot: " + res.Output);
             *      }
             * }*/
        }