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); }
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; }
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); } }
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); * } * }*/ }