public static void Run() { var point = new sd.Point { Coordinate = new sb.Vector(37.42052549, -122.0816695) }; var placemark = new sd.Placemark { Name = "Да круто", Geometry = point }; var point1 = new sd.Point { Coordinate = new sb.Vector(37.419837, -122.078902) }; var placemark1 = new sd.Placemark { Name = "Да круто", Geometry = point1 }; var document = new sd.Document { Description = new sd.Description { Text = "Документ" } }; var kml = new sd.Kml { Feature = document }; var folder = new sd.Folder { Description = new sd.Description { Text = "Светофоры" }, Name = "СО" }; folder.AddFeature(placemark); document.AddFeature(folder); document.AddFeature(placemark1); //var serializer = new sb.Serializer(); //using FileStream fileStream = new FileStream("kmlTest.kml", FileMode.OpenOrCreate); //serializer.Serialize(kml, fileStream); var kmlFile = KmlFile.Create(kml, true); //using KmzFile kmz = SaveKmlAndLinkedContentIntoAKmzArchive(kmlFile, OutputPath); //using Stream output = File.Create(OutputPath); //kmz.Save(output); //Console.WriteLine("Saved to '{0}'.", OutputPath); //Console.ReadKey(); }
/// <summary> /// Converts a dictionary representing JSON layer definitions to KML. /// </summary> /// <param name="layers">A dictionary representing ArcGIS JSON Layers.</param> /// <returns><see cref="Kml"/></returns> public static Kml LayersDictionaryToKml(this Dictionary <string, object> layers) { var kmlDocument = new SharpKml.Dom.Document(); foreach (var kvp in layers) { var folder = new Folder { Name = kvp.Key }; kmlDocument.AddFeature(folder); var graphics = kvp.Value as ArrayList; foreach (Dictionary <string, object> graphic in graphics) { var placemark = new Placemark(); folder.AddFeature(placemark); placemark.Geometry = JsonToKmlGeometry(graphic["geometry"] as Dictionary <string, object>); var attributesJson = (Dictionary <string, object>)graphic["attributes"]; attributesJson.Remove("RouteGeometry"); placemark.ExtendedData = ToExtendedData(attributesJson); } } var kml = new Kml(); kml.Feature = kmlDocument; return(kml); }
public void TestSerialize() { const string Expected = "<kml xmlns:atom=\"http://www.w3.org/2005/Atom\" xmlns=\"http://www.opengis.net/kml/2.2\">" + "<Document>" + "<atom:author>" + "<atom:name>Name</atom:name>" + "</atom:author>" + "<atom:link href=\"http://www.example.com/\" />" + "</Document>" + "</kml>"; Document document = new Document(); document.AtomAuthor = new Author { Name = "Name" }; document.AtomLink = new SharpKml.Dom.Atom.Link { Href = new Uri("http://www.example.com") }; Kml root = new Kml(); root.AddNamespacePrefix(KmlNamespaces.AtomPrefix, KmlNamespaces.AtomNamespace); root.Feature = document; Serializer serializer = new Serializer(); serializer.SerializeRaw(root); Assert.That(serializer.Xml, Is.EqualTo(Expected)); }
public static void Run() { // Create the style first var style = new Style(); style.Id = "randomColorIcon"; style.Icon = new IconStyle(); style.Icon.Color = new Color32(255, 0, 255, 0); style.Icon.ColorMode = ColorMode.Random; style.Icon.Icon = new IconStyle.IconLink(new Uri("http://maps.google.com/mapfiles/kml/pal3/icon21.png")); style.Icon.Scale = 1.1; // Now create the object to apply the style to var placemark = new Placemark(); placemark.Name = "IconStyle.kml"; placemark.StyleUrl = new Uri("#randomColorIcon", UriKind.Relative); placemark.Geometry = new Point { Coordinate = new Vector(37.831145, -122.36868) }; // Package it all together... var document = new Document(); document.AddFeature(placemark); document.AddStyle(style); // And display the result var serializer = new Serializer(); serializer.Serialize(document); Console.WriteLine(serializer.Xml); }
public override void saveKmlDocument(Document kmlDoc) { // This allows us to save and Element easily. var kml = new Kml(); kml.AddNamespacePrefix(KmlNamespaces.GX22Prefix, KmlNamespaces.GX22Namespace); kml.Feature = kmlDoc; KmlFile kmlF = KmlFile.Create(kml, false); kmlF.Save(@"mykmlFile.kml"); }
public override void addAddresstoKmlDocument(KmlPrepData prepData, Document KmlDoc) { Point point = new Point(); point.Coordinate = new Vector(prepData.lat, prepData.lng); Placemark placemark = new Placemark(); placemark.Geometry = point; placemark.Name = prepData.name; KmlDoc.AddFeature(placemark); }
void ProcessDocument(Document document) { if (document.Schemas != null) { document.Schemas.ToList().ForEach(s => { _comboBox.Items.Add(new KmlSchemaComboBoxItem() { Schema = s, Content = s.Name }); }); } }
// this adds an element to the document and adds a place marker public override void addElementToKmlDocument(JoinedProspect joinedProspect, Document kmlDoc) { Point point = new Point(); point.Coordinate = new Vector(joinedProspect.CorrectedLatitude, joinedProspect.CorrectedLongitude); Placemark placemark = new Placemark(); placemark.Geometry = point; placemark.Name = joinedProspect.firstName + " " + joinedProspect.lastName; placemark.Address = joinedProspect.Address; placemark.Description = new Description() { Text = "ClassFP: " + joinedProspect.classFP + " IncorpName: " + joinedProspect.incorpName + " Address: " + joinedProspect.Address + " <h3>HelloWorld</h3>"}; classifyProspect(joinedProspect, placemark); kmlDoc.AddFeature(placemark); }
static void exportKml(string filename, string outputFile) { Document kml = new Document(); FileChannel ch = new FileChannel(filename); UAVObjectManager mgr = new UAVObjectManager(); UAVObjectsInitialize.register(mgr); UavTalk.UavTalkProto tlk = new UavTalkProto(ch, mgr); mgr.getObject<GPSPositionSensor>().onUpdated += new EventHandler(GpsPositionReceived); mgr.getObject<PositionState>().onUpdated += new EventHandler(GpsPositionReceived); ch.open(); while (ch.isRunning) Thread.Sleep(50); LineString ls = new LineString(); ls.AltitudeMode = SharpKml.Dom.AltitudeMode.Absolute; ls.Extrude = true; ls.Coordinates = coords; Placemark pm = new Placemark(); pm.Name = "Flight Path "; //pm.StyleUrl = new Uri("#yellowLineGreenPoly", UriKind.Relative); pm.Geometry = ls; kml.AddFeature(pm); Serializer serializer = new Serializer(); serializer.Serialize(kml); StreamWriter sw = new StreamWriter(outputFile); sw.Write(serializer.Xml); sw.Close(); }
public ConvertToKml(LoadMap loadmap) { this.loadmap = loadmap; doc = new Document(); ConvertFileToKml(); }
/// <summary> /// Converts a dictionary representing JSON layer definitions to KML. /// </summary> /// <param name="layers">A dictionary representing ArcGIS JSON Layers.</param> /// <returns><see cref="Kml"/></returns> public static Kml LayersDictionaryToKml(this Dictionary<string, object> layers) { var kmlDocument = new SharpKml.Dom.Document(); foreach (var kvp in layers) { var folder = new Folder { Name = kvp.Key }; kmlDocument.AddFeature(folder); var graphics = kvp.Value as ArrayList; foreach (Dictionary<string, object> graphic in graphics) { var placemark = new Placemark(); folder.AddFeature(placemark); placemark.Geometry = JsonToKmlGeometry(graphic["geometry"] as Dictionary<string, object>); var attributesJson = (Dictionary<string, object>)graphic["attributes"]; attributesJson.Remove("RouteGeometry"); placemark.ExtendedData = ToExtendedData(attributesJson); } } var kml = new Kml(); kml.Feature = kmlDocument; return kml; }
protected virtual Document CreateRootDocument() { var document = new Document { Name = _featureDataTable.TableName, Open = true, Visibility = true }; // document's name can't be empty if (string.IsNullOrEmpty(document.Name)) document.Name = "Document" + Guid.NewGuid(); if (!string.IsNullOrEmpty(Snippet)) document.Snippet = new Snippet { MaximumLines = 2, Text = Snippet }; document.Time = new Timestamp { When = DateTime.Now }; return document; }
public void ProcessClient(object clientobj) { var client = clientobj as TcpClient; using (client) { try { // Get a stream object for reading and writing log.Info("Accepted Client " + client.Client.RemoteEndPoint.ToString()); //client.SendBufferSize = 100 * 1024; // 100kb //client.LingerState.Enabled = true; //client.NoDelay = true; // makesure we have valid image GCSViews.FlightData.myhud.streamjpgenable = true; NetworkStream stream = client.GetStream(); // 5 seconds - default for httpd 2.2+ stream.ReadTimeout = 5000; goto skipagain; again: log.Info("doing Again"); skipagain: var asciiEncoding = new ASCIIEncoding(); var request = new byte[1024 * 4]; int len = 0; // handle header try { len = stream.Read(request, 0, request.Length); } catch { return; } string head = System.Text.Encoding.ASCII.GetString(request, 0, len); log.Info(head); int index = head.IndexOf('\n'); if (index == -1) { return; } string url = head.Substring(0, index - 1); //url = url.Replace("\r", ""); //url = url.Replace("GET ",""); //url = url.Replace(" HTTP/1.0", ""); //url = url.Replace(" HTTP/1.1", ""); //Tracking.AddEvent("HTTPServer", "Get", url, ""); ///////////////////////////////////////////////////////////////// if (url.Contains(" /websocket/server")) { using (var writer = new StreamWriter(stream, Encoding.Default)) { writer.WriteLine("HTTP/1.1 101 WebSocket Protocol Handshake"); writer.WriteLine("Upgrade: WebSocket"); writer.WriteLine("Connection: Upgrade"); //writer.WriteLine("WebSocket-Location: ws://localhost:56781/websocket/server"); int start = head.IndexOf("Sec-WebSocket-Key:") + 19; int end = head.IndexOf('\r', start); if (end == -1) { end = head.IndexOf('\n', start); } string accept = ComputeWebSocketHandshakeSecurityHash09(head.Substring(start, end - start)); writer.WriteLine("Sec-WebSocket-Accept: " + accept); writer.WriteLine("Server: Mission Planner"); writer.WriteLine(""); writer.Flush(); while (client.Connected) { while (client.Available > 0) { var bydata = stream.ReadByte(); Console.Write(bydata.ToString("X2")); if (bydata == 0x88) { return; } } byte[] packet = new byte[1024 * 32]; var cs = JsonConvert.SerializeObject(MainV2.comPort.MAV.cs); var wps = JsonConvert.SerializeObject(MainV2.comPort.MAV.wps); foreach (var sendme in new[] { cs, wps }) { int i = 0; var tosend = sendme.Length; packet[i++] = 0x81; // fin - utf if (tosend <= 125) { packet[i++] = (byte)(tosend); } else { packet[i++] = 126; // nomask - 2 byte length packet[i++] = (byte)(tosend >> 8); packet[i++] = (byte)(tosend & 0xff); } foreach (char ch in sendme) { packet[i++] = (byte)ch; } stream.Write(packet, 0, i); stream.Flush(); } Thread.Sleep(200); } } } ///////////////////////////////////////////////////////////////// else if (url.Contains(" /websocket/raw")) { using (var writer = new StreamWriter(stream, Encoding.Default)) { writer.WriteLine("HTTP/1.1 101 WebSocket Protocol Handshake"); writer.WriteLine("Upgrade: WebSocket"); writer.WriteLine("Connection: Upgrade"); writer.WriteLine("WebSocket-Location: ws://localhost:56781/websocket/raw"); int start = head.IndexOf("Sec-WebSocket-Key:") + 19; int end = head.IndexOf('\r', start); if (end == -1) { end = head.IndexOf('\n', start); } string accept = ComputeWebSocketHandshakeSecurityHash09(head.Substring(start, end - start)); writer.WriteLine("Sec-WebSocket-Accept: " + accept); if (head.Contains("Sec-WebSocket-Protocol:")) { writer.WriteLine("Sec-WebSocket-Protocol: binary"); } writer.WriteLine("Server: Mission Planner"); writer.WriteLine(""); writer.Flush(); EventHandler <MAVLink.MAVLinkMessage> action = null; action = (sender, message) => { var sendme = message.buffer; try { byte[] packet = new byte[1024 * 32]; int i = 0; var tosend = sendme.Length; packet[i++] = 0x82; // fin - data if (tosend <= 125) { packet[i++] = (byte)(tosend); } else { packet[i++] = 126; // nomask - 2 byte length packet[i++] = (byte)(tosend >> 8); packet[i++] = (byte)(tosend & 0xff); } foreach (char ch in sendme) { packet[i++] = (byte)ch; } stream.WriteAsync(packet, 0, i); stream.FlushAsync(); } catch { ((MAVLinkInterface)sender).OnPacketReceived -= action; stream.Close(); client.Close(); } }; MainV2.comPort.OnPacketReceived += action; while (client.Connected) { while (client.Available > 0) { var bydata = stream.ReadByte(); Console.Write(bydata.ToString("X2")); if (bydata == 0x88) { return; } } Thread.Sleep(200); } MainV2.comPort.OnPacketReceived -= action; } } ///////////////////////////////////////////////////////////////// else if (url.Contains(" /georefnetwork.kml")) { byte[] buffer = Encoding.ASCII.GetBytes(georefkml); string header = "HTTP/1.1 200 OK\r\nServer: here\r\nKeep-Alive: timeout=15, max=100\r\nConnection: Keep-Alive\r\nCache-Control: no-cache\r\nContent-Type: application/vnd.google-earth.kml+xml\r\nX-Pad: avoid browser bug\r\nContent-Length: " + buffer.Length + "\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); stream.Write(buffer, 0, buffer.Length); stream.Flush(); goto again; //stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.Contains(" /location.kml")) { SharpKml.Dom.Document kml = new SharpKml.Dom.Document(); foreach (var mavLinkInterface in MainV2.Comports) { foreach (var MAV in mavLinkInterface.MAVlist) { SharpKml.Dom.Placemark pmplane = new SharpKml.Dom.Placemark(); pmplane.Name = "P/Q " + MAV.cs.altasl; pmplane.Visibility = true; SharpKml.Dom.Location loc = new SharpKml.Dom.Location(); loc.Latitude = MAV.cs.lat; loc.Longitude = MAV.cs.lng; loc.Altitude = MAV.cs.altasl; if (loc.Altitude < 0) { loc.Altitude = 0.01; } SharpKml.Dom.Orientation ori = new SharpKml.Dom.Orientation(); ori.Heading = MAV.cs.yaw; ori.Roll = -MAV.cs.roll; ori.Tilt = -MAV.cs.pitch; SharpKml.Dom.Scale sca = new SharpKml.Dom.Scale(); sca.X = 2; sca.Y = 2; sca.Z = 2; SharpKml.Dom.Model model = new SharpKml.Dom.Model(); model.Location = loc; model.Orientation = ori; model.AltitudeMode = SharpKml.Dom.AltitudeMode.Absolute; model.Scale = sca; SharpKml.Dom.Link link = new SharpKml.Dom.Link(); link.Href = new Uri("block_plane_0.dae", UriKind.Relative); model.Link = link; pmplane.Geometry = model; kml.AddFeature(pmplane); } } SharpKml.Dom.LookAt la = new SharpKml.Dom.LookAt() { Altitude = MainV2.comPort.MAV.cs.altasl, Latitude = MainV2.comPort.MAV.cs.lat, Longitude = MainV2.comPort.MAV.cs.lng, Tilt = 80, Heading = MainV2.comPort.MAV.cs.yaw, AltitudeMode = SharpKml.Dom.AltitudeMode.Absolute, Range = 50 }; if (la.Latitude.Value != 0 && la.Longitude.Value != 0) { kml.Viewpoint = la; } SharpKml.Base.Serializer serializer = new SharpKml.Base.Serializer(); serializer.Serialize(kml); byte[] buffer = Encoding.ASCII.GetBytes(serializer.Xml); string header = "HTTP/1.1 200 OK\r\nContent-Type: application/vnd.google-earth.kml+xml\r\nContent-Length: " + buffer.Length + "\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); stream.Write(buffer, 0, buffer.Length); goto again; } else if (url.Contains(" /network.kml")) { byte[] buffer = Encoding.ASCII.GetBytes(@"<?xml version=""1.0"" encoding=""UTF-8""?> <kml xmlns=""http://www.opengis.net/kml/2.2"" xmlns:gx=""http://www.google.com/kml/ext/2.2"" xmlns:kml=""http://www.opengis.net/kml/2.2"" xmlns:atom=""http://www.w3.org/2005/Atom""> <Folder> <name> Network Links </name> <open> 1 </open> <NetworkLink> <name> View Centered Placemark</name> <open> 1 </open> <refreshVisibility> 0 </refreshVisibility> <flyToView> 1 </flyToView> <Link> <href> http://127.0.0.1:56781/location.kml</href> <refreshMode> onInterval </refreshMode> <refreshInterval> 1 </refreshInterval> <viewRefreshTime> 1 </viewRefreshTime> </Link> </NetworkLink> <NetworkLink> <name> View Centered Placemark</name> <open> 1 </open> <refreshVisibility> 0 </refreshVisibility> <flyToView> 0 </flyToView> <Link> <href> http://127.0.0.1:56781/wps.kml</href> </Link> </NetworkLink> </Folder> </kml>"); string header = "HTTP/1.1 200 OK\r\nContent-Type: application/vnd.google-earth.kml+xml\r\nContent-Length: " + buffer.Length + "\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); stream.Write(buffer, 0, buffer.Length); stream.Flush(); goto again; } else if (url.Contains(" /wps.kml")) { SharpKml.Dom.Document kml = new SharpKml.Dom.Document(); SharpKml.Dom.CoordinateCollection coords = new SharpKml.Dom.CoordinateCollection(); PointLatLngAlt home = null; // draw track try { foreach (var point in GCSViews.FlightPlanner.instance.pointlist) { if (point == null) { continue; } if (point.Tag.ToLower().Contains("home")) { home = point; } coords.Add(new SharpKml.Base.Vector(point.Lat, point.Lng, point.Alt)); } } catch { } var altmode = SharpKml.Dom.AltitudeMode.Absolute; foreach (var point in GCSViews.FlightPlanner.instance.pointlist) { if (point == null) { continue; } SharpKml.Dom.Placemark wp = new SharpKml.Dom.Placemark(); wp.Name = "WP " + point.Tag + " Alt: " + point.Alt; SharpKml.Dom.Point wppoint = new SharpKml.Dom.Point(); wppoint.AltitudeMode = altmode; wppoint.Coordinate = new Vector() { Latitude = point.Lat, Longitude = point.Lng, Altitude = point.Alt }; wp.Geometry = wppoint; kml.AddFeature(wp); } SharpKml.Dom.LineString ls = new SharpKml.Dom.LineString(); ls.AltitudeMode = altmode; ls.Coordinates = coords; ls.Extrude = false; ls.Tessellate = true; Style style = new Style(); style.Id = "yellowLineGreenPoly"; unchecked { style.Line = new LineStyle(new Color32((int)0xff00ffff), 4); } Style style2 = new Style(); style2.Id = "yellowLineGreenPoly"; style2.Line = new LineStyle(new Color32((int)0x7f00ffff), 4); // above ground SharpKml.Dom.Placemark pm = new SharpKml.Dom.Placemark() { Geometry = ls, Name = "WPs", StyleSelector = style }; kml.AddFeature(pm); // on ground SharpKml.Dom.LineString ls2 = new SharpKml.Dom.LineString(); ls2.Coordinates = coords; ls2.Extrude = false; ls2.Tessellate = true; ls2.AltitudeMode = SharpKml.Dom.AltitudeMode.ClampToGround; SharpKml.Dom.Placemark pm2 = new SharpKml.Dom.Placemark() { Geometry = ls2, Name = "onground", StyleSelector = style2 }; kml.AddFeature(pm2); SharpKml.Base.Serializer serializer = new SharpKml.Base.Serializer(); serializer.Serialize(kml); byte[] buffer = Encoding.ASCII.GetBytes(serializer.Xml); string header = "HTTP/1.1 200 OK\r\nContent-Type: application/vnd.google-earth.kml+xml\r\nContent-Length: " + buffer.Length + "\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); stream.Write(buffer, 0, buffer.Length); stream.Flush(); goto again; //stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.Contains(" /hud.html")) { var file = Xamarin.Properties.Resources.hud; string header = "HTTP/1.1 200 OK\r\nConnection: close\r\nContent-Type: text/html\r\nContent-Length: " + file.Length + "\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); byte[] buffer = ASCIIEncoding.ASCII.GetBytes(file); stream.Write(buffer, 0, buffer.Length); stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.Contains(" /guided?")) { //http://127.0.0.1:56781/guided?lat=-34&lng=117.8&alt=30 Regex rex = new Regex(@"lat=([\-\.0-9]+)&lng=([\-\.0-9]+)&alt=([\.0-9]+)", RegexOptions.IgnoreCase); Match match = rex.Match(url); if (match.Success) { Locationwp gwp = new Locationwp() { lat = double.Parse(match.Groups[1].Value), lng = double.Parse(match.Groups[2].Value), alt = float.Parse(match.Groups[3].Value) }; try { MainV2.comPort.setGuidedModeWP(gwp); } catch { } string header = "HTTP/1.1 200 OK\r\n\r\nSent Guide Mode Wp"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); } else { string header = "HTTP/1.1 200 OK\r\n\r\nFailed Guide Mode Wp"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); } stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.ToLower().Contains("post /guide")) { Regex rex = new Regex(@"lat"":([\-\.0-9]+),""lon"":([\-\.0-9]+),""alt"":([\.0-9]+)", RegexOptions.IgnoreCase); Match match = rex.Match(head); if (match.Success) { Locationwp gwp = new Locationwp() { lat = double.Parse(match.Groups[1].Value), lng = double.Parse(match.Groups[2].Value), alt = float.Parse(match.Groups[3].Value) }; try { MainV2.comPort.setGuidedModeWP(gwp); } catch { } string header = "HTTP/1.1 200 OK\r\n\r\nSent Guide Mode Wp"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); } else { string header = "HTTP/1.1 200 OK\r\n\r\nFailed Guide Mode Wp"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); } stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.ToLower().Contains(" /command_long")) { string header = "HTTP/1.1 404 not found\r\nContent-Type: image/jpg\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.ToLower().Contains(" /rcoverride")) { string header = "HTTP/1.1 404 not found\r\nContent-Type: image/jpg\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.ToLower().Contains(" /get_mission")) { string header = "HTTP/1.1 404 not found\r\nContent-Type: image/jpg\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.ToLower().Contains(" /mavlink/")) { /* * GET /mavlink/ATTITUDE+VFR_HUD+NAV_CONTROLLER_OUTPUT+META_WAYPOINT+GPS_RAW_INT+HEARTBEAT+META_LINKQUALITY+GPS_STATUS+STATUSTEXT+SYS_STATUS?_=1355828718540 HTTP/1.1 * Host: ubuntu:9999 * Connection: keep-alive * X-Requested-With: XMLHttpRequest * User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11 * Accept: * Referer: http://ubuntu:9999/index.html * Accept-Encoding: gzip,deflate,sdch * Accept-Language: en-GB,en-US;q=0.8,en;q=0.6 * Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 * * HTTP/1.1 200 OK * Content-Type: application/json * Content-Length: 2121 * Date: Thu, 29 Nov 2012 12:13:38 GMT * Server: ubuntu * * { * "VFR_HUD": {"msg": {"throttle": 0, "groundspeed": 0.0, "airspeed": 0.0, "climb": 0.0, "mavpackettype": "VFR_HUD", "alt": -0.47999998927116394, "heading": 108}, "index": 687, "time_usec": 0}, * "STATUSTEXT": {"msg": {"mavpackettype": "STATUSTEXT", "severity": 1, "text": "Initialising APM..."}, "index": 2, "time_usec": 0}, * "SYS_STATUS": {"msg": {"onboard_control_sensors_present": 4294966287, "load": 0, "battery_remaining": -1, "errors_count4": 0, "drop_rate_comm": 0, "errors_count2": 0, "errors_count3": 0, "errors_comm": 0, "current_battery": -1, "errors_count1": 0, "onboard_control_sensors_health": 4294966287, "mavpackettype": "SYS_STATUS", "onboard_control_sensors_enabled": 4294945807, "voltage_battery": 10080}, "index": 693, "time_usec": 0}, * "META_LINKQUALITY": {"msg": {"master_in": 11110, "mav_loss": 0, "mavpackettype": "META_LINKQUALITY", "master_out": 194, "packet_loss": 0.0}, "index": 194, "time_usec": 0}, * "ATTITUDE": {"msg": {"pitchspeed": -0.000976863200776279, "yaw": 1.8878594636917114, "rollspeed": -0.0030046366155147552, "time_boot_ms": 194676, "pitch": -0.09986469894647598, "mavpackettype": "ATTITUDE", "yawspeed": -0.0015030358918011189, "roll": -0.029391441494226456}, "index": 687, "time_usec": 0}, * "GPS_RAW_INT": {"msg": {"fix_type": 1, "cog": 0, "epv": 65535, "lon": 0, "time_usec": 0, "eph": 9999, "satellites_visible": 0, "lat": 0, "mavpackettype": "GPS_RAW_INT", "alt": 137000, "vel": 0}, "index": 687, "time_usec": 0}, * "HEARTBEAT": {"msg": {"custom_mode": 0, "system_status": 4, "base_mode": 81, "autopilot": 3, "mavpackettype": "HEARTBEAT", "type": 2, "mavlink_version": 3}, "index": 190, "time_usec": 0}, * "GPS_STATUS": {"msg": {"satellite_snr": "", "satellite_azimuth": "", "satellite_prn": "", "satellite_elevation": "", "satellites_visible": 0, "satellite_used": "", "mavpackettype": "GPS_STATUS"}, "index": 2, "time_usec": 0}, * "NAV_CONTROLLER_OUTPUT": {"msg": {"wp_dist": 0, "nav_pitch": 0.0, "target_bearing": 0, "nav_roll": 0.0, "aspd_error": 0.0, "alt_error": 0.0, "mavpackettype": "NAV_CONTROLLER_OUTPUT", "xtrack_error": 0.0, "nav_bearing": 0}, "index": 687, "time_usec": 0}} */ object[] data = new object[20]; if (MainV2.comPort.MAV.getPacket((byte)MAVLink.MAVLINK_MSG_ID.ATTITUDE) != null) { var tmsg = MainV2.comPort.MAV.getPacket((uint)MAVLink.MAVLINK_MSG_ID.ATTITUDE) .ToStructure <MAVLink.mavlink_attitude_t>(); var json = JsonConvert.SerializeObject(tmsg); var name = MAVLink.MAVLINK_MESSAGE_INFOS.GetMessageInfo((uint)MAVLink.MAVLINK_MSG_ID.ATTITUDE).name; } Messagejson message = new Messagejson(); if (MainV2.comPort.MAV.getPacket((byte)MAVLink.MAVLINK_MSG_ID.ATTITUDE) != null) { message.ATTITUDE = new Message2() { index = 1, msg = MainV2.comPort.MAV.getPacket((byte)MAVLink.MAVLINK_MSG_ID.ATTITUDE) .ToStructure <MAVLink.mavlink_attitude_t>() } } ; if (MainV2.comPort.MAV.getPacket((byte)MAVLink.MAVLINK_MSG_ID.VFR_HUD) != null) { message.VFR_HUD = new Message2() { index = 1, msg = MainV2.comPort.MAV.getPacket((byte)MAVLink.MAVLINK_MSG_ID.VFR_HUD) .ToStructure <MAVLink.mavlink_vfr_hud_t>() } } ; if (MainV2.comPort.MAV.getPacket((byte)MAVLink.MAVLINK_MSG_ID.NAV_CONTROLLER_OUTPUT) != null) { message.NAV_CONTROLLER_OUTPUT = new Message2() { index = 1, msg = MainV2.comPort.MAV.getPacket((byte)MAVLink.MAVLINK_MSG_ID.NAV_CONTROLLER_OUTPUT) .ToStructure <MAVLink.mavlink_nav_controller_output_t>() } } ; if (MainV2.comPort.MAV.getPacket((byte)MAVLink.MAVLINK_MSG_ID.GPS_RAW_INT) != null) { message.GPS_RAW_INT = new Message2() { index = 1, msg = MainV2.comPort.MAV.getPacket((byte)MAVLink.MAVLINK_MSG_ID.GPS_RAW_INT) .ToStructure <MAVLink.mavlink_gps_raw_int_t>() } } ; if (MainV2.comPort.MAV.getPacket((byte)MAVLink.MAVLINK_MSG_ID.HEARTBEAT) != null) { message.HEARTBEAT = new Message2() { index = 1, msg = MainV2.comPort.MAV.getPacket((byte)MAVLink.MAVLINK_MSG_ID.HEARTBEAT) .ToStructure <MAVLink.mavlink_heartbeat_t>() } } ; if (MainV2.comPort.MAV.getPacket((byte)MAVLink.MAVLINK_MSG_ID.GPS_STATUS) != null) { message.GPS_STATUS = new Message2() { index = 1, msg = MainV2.comPort.MAV.getPacket((byte)MAVLink.MAVLINK_MSG_ID.GPS_STATUS) .ToStructure <MAVLink.mavlink_gps_status_t>() } } ; if (MainV2.comPort.MAV.getPacket((byte)MAVLink.MAVLINK_MSG_ID.STATUSTEXT) != null) { message.STATUSTEXT = new Message2() { index = 1, msg = MainV2.comPort.MAV.getPacket((byte)MAVLink.MAVLINK_MSG_ID.STATUSTEXT) .ToStructure <MAVLink.mavlink_statustext_t>() } } ; if (MainV2.comPort.MAV.getPacket((byte)MAVLink.MAVLINK_MSG_ID.SYS_STATUS) != null) { message.SYS_STATUS = new Message2() { index = 1, msg = MainV2.comPort.MAV.getPacket((byte)MAVLink.MAVLINK_MSG_ID.SYS_STATUS) .ToStructure <MAVLink.mavlink_sys_status_t>() } } ; message.META_LINKQUALITY = message.SYS_STATUS = new Message2() { index = packetindex, time_usec = 0, msg = new META_LINKQUALITY() { master_in = (int)MainV2.comPort.MAV.packetsnotlost, mavpackettype = "META_LINKQUALITY", master_out = MainV2.comPort.packetcount, packet_loss = 100 - MainV2.comPort.MAV.cs.linkqualitygcs, mav_loss = 0 } }; packetindex++; string output = JsonConvert.SerializeObject(message); string header = "HTTP/1.1 200 OK\r\nContent-Type: application/json\r\nContent-Length: " + output.Length + "\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); temp = asciiEncoding.GetBytes(output); stream.Write(temp, 0, temp.Length); stream.Flush(); goto again; //stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.ToLower().Contains(" /mav/")) { //C:\Users\hog\Desktop\DIYDrones\mavelous\modules\lib\mavelous_web Regex rex = new Regex(@"([^\s]+)\s(.+)\sHTTP/1", RegexOptions.IgnoreCase); Match match = rex.Match(url); if (match.Success) { string fileurl = WebUtility.UrlDecode(match.Groups[2].Value); fileurl = fileurl.Replace("/mav/", ""); if (fileurl == "" || fileurl == "/") { fileurl = "index.html"; } if (File.Exists(mavelous_web + fileurl)) { string header = "HTTP/1.1 200 OK\r\n"; if (fileurl.Contains(".htm")) { header += "Content-Type: text/html\r\n"; } else if (fileurl.Contains(".js")) { header += "Content-Type: application/x-javascript\r\n"; } else if (fileurl.Contains(".css")) { header += "Content-Type: text/css\r\n"; } else { header += "Content-Type: text/plain\r\n"; } var fileinfo = new FileInfo(mavelous_web + fileurl); var filetime = fileinfo.LastWriteTimeUtc.ToString("ddd, dd MMM yyyy HH:mm:ss") + " GMT"; var modified = Regex.Match(head, "If-Modified-Since:(.*)", RegexOptions.IgnoreCase); if (modified.Success && modified.Groups[1].Value.Trim().ToLower() == filetime.ToLower()) { string header2 = "HTTP/1.1 304 not modified\r\nConnection: Keep-Alive\r\n\r\n"; byte[] temp2 = asciiEncoding.GetBytes(header2); stream.Write(temp2, 0, temp2.Length); stream.Flush(); goto again; } header += "Connection: keep-alive\r\nLast-Modified: " + filetime + "\r\nContent-Length: " + fileinfo.Length + "\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); BinaryReader file = new BinaryReader(File.Open(mavelous_web + fileurl, FileMode.Open, FileAccess.Read, FileShare.Read)); byte[] buffer = new byte[1024]; while (file.BaseStream.Position < file.BaseStream.Length) { int leng = file.Read(buffer, 0, buffer.Length); stream.Write(buffer, 0, leng); } file.Close(); stream.Flush(); goto again; } } ///////////////////////////////////////////////////////////////// { string header = "HTTP/1.1 404 not found\r\nConnection: Keep-Alive\r\nContent-Length: 0\r\nContent -Type: text/plain\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); stream.Flush(); goto again; } } ///////////////////////////////////////////////////////////////// else if (url.ToLower().Contains(" / ")) { Console.WriteLine(url); string header = "HTTP/1.1 200 OK\r\nConnection: close\r\nContent-Type: text/html\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); string content = @" <a href=/mav/>Mavelous</a> <a href=/mavlink/>Mavelous traffic</a> <a href=/hud.jpg>Hud image</a> <a href=/map.jpg>Map image </a> <a href=/both.jpg>Map & hud image</a> <a href=/hud.html>hud html5</a> <a href=/network.kml>network kml</a> <a href=/georefnetwork.kml>georef kml</a> "; temp = asciiEncoding.GetBytes(content); stream.Write(temp, 0, temp.Length); } ///////////////////////////////////////////////////////////////// else { string header = "HTTP/1.1 404 not found\r\nContent-Type: text/plain\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); } stream.Close(); log.Info("Close http " + url); client.Close(); } catch (Exception ee) { log.Error("Failed http ", ee); } } }
private static void processKML(SharpKml.Dom.Element Element) { try { // log.Info(Element.ToString() + " " + Element.Parent); } catch { } SharpKml.Dom.Document doc = Element as SharpKml.Dom.Document; SharpKml.Dom.Placemark pm = Element as SharpKml.Dom.Placemark; SharpKml.Dom.Folder folder = Element as SharpKml.Dom.Folder; SharpKml.Dom.Polygon polygon = Element as SharpKml.Dom.Polygon; SharpKml.Dom.LineString ls = Element as SharpKml.Dom.LineString; MultipleGeometry geom = Element as MultipleGeometry; if (doc != null) { foreach (var feat in doc.Features) { //Console.WriteLine("feat " + feat.GetType()); //processKML((Element)feat); } } else if (folder != null) { foreach (SharpKml.Dom.Feature feat in folder.Features) { //Console.WriteLine("feat "+feat.GetType()); //processKML(feat); } } else if (pm != null) { } else if (polygon != null) { GMapPolygon kmlpolygon = new GMapPolygon(new List <PointLatLng>(), polygon.Id); kmlpolygon.Stroke.Color = Color.Purple; kmlpolygon.Fill = new SolidBrush(Color.FromArgb(30, Color.Blue)); foreach (var loc in polygon.OuterBoundary.LinearRing.Coordinates) { kmlpolygon.Points.Add(new PointLatLng(loc.Latitude, loc.Longitude)); } kmlpolygonsoverlay.Polygons.Add(kmlpolygon); } else if (ls != null) { GMapRoute kmlroute = new GMapRoute(new List <PointLatLng>(), "kmlroute"); kmlroute.Stroke.Color = Color.Purple; foreach (var loc in ls.Coordinates) { kmlroute.Points.Add(new PointLatLng(loc.Latitude, loc.Longitude)); } kmlpolygonsoverlay.Routes.Add(kmlroute); } else if (geom != null) { foreach (var geometry in geom.Geometry) { processKML(geometry); } } }
private static Feature CreateFeature(int index, bool id) { Feature output; int type = index % 7; switch (type) { case 0: output = new Placemark(); break; case 1: output = new Folder(); break; case 2: output = new Document(); break; case 3: output = new NetworkLink(); break; case 4: output = new GroundOverlay(); break; case 5: output = new ScreenOverlay(); break; default: output = new PhotoOverlay(); break; } if (id) { output.Id = "i" + index; } else { output.TargetId = "i" + index; } return output; }
protected void GenerateKml() { var id = Convert.ToInt32(Server.HtmlEncode(Request.QueryString["Code"])); var document = new Document(); document.Id = "Document"; document.Name = "Document"; Description dsc = new Description(); dsc.Text = @"<h1>Car's Tracking</h1> "; CoordinateCollection coordinates = new CoordinateCollection(); DataTable dt = new DataTable(); try { DataSet ds = FieldAreaViewMethof.getfieldAreaValue(id); dt = ds.Tables[0]; string isreference = ds.Tables[0].Rows[0]["isReferencePoint"].ToString(); if (isreference == "True") { dt.Rows[0].Delete(); } foreach (DataRow dr in dt.Rows) { double lon = double.Parse(ParseDMS(dr["Longitude"].ToString()).ToString()); double lat = double.Parse(ParseDMS(dr["Latitude"].ToString()).ToString()); coordinates.Add(new Vector(lat, lon, 0)); } OuterBoundary outerBoundary = new OuterBoundary(); outerBoundary.LinearRing = new LinearRing(); outerBoundary.LinearRing.Coordinates = coordinates; // Polygon Setting: Polygon polygon = new Polygon(); polygon.Extrude = true; polygon.AltitudeMode = AltitudeMode.ClampToGround; polygon.OuterBoundary = outerBoundary; //Color Style Setting: byte byte_Color_R = 150, byte_Color_G = 150, byte_Color_B = 150, byte_Color_A = 100; //you may get your own color by other method var style = new SharpKml.Dom.Style(); style.Polygon = new PolygonStyle(); style.Polygon.ColorMode = SharpKml.Dom.ColorMode.Normal; style.Polygon.Color = new Color32(byte_Color_A, byte_Color_B, byte_Color_G, byte_Color_R); //Set the polygon and style to the Placemark: Placemark placemark = new Placemark(); placemark.Name = "Kukrail"; placemark.Geometry = polygon; placemark.AddStyle(style); //Finally to the document and save it document.AddFeature(placemark); var kml = new Kml(); kml.Feature = document; KmlFile kmlFile = KmlFile.Create(kml, true); if (File.Exists(Server.MapPath("~") + "MAP.kml")) { File.Delete(Server.MapPath("~") + "MAP.kml"); } using (var stream = System.IO.File.OpenWrite(Server.MapPath("~") + "MAP.kml")) { kmlFile.Save(stream); } } catch (Exception exc) { Response.Write(exc.Message); } finally { } }
public void DoAcceptTcpClientCallback(IAsyncResult ar) { // Get the listener that handles the client request. TcpListener listener = (TcpListener) ar.AsyncState; // End the operation and display the received data on // the console. using ( TcpClient client = listener.EndAcceptTcpClient(ar)) { // Signal the calling thread to continue. tcpClientConnected.Set(); try { // Get a stream object for reading and writing log.Info("Accepted Client " + client.Client.RemoteEndPoint.ToString()); //client.SendBufferSize = 100 * 1024; // 100kb //client.LingerState.Enabled = true; //client.NoDelay = true; // makesure we have valid image GCSViews.FlightData.myhud.streamjpgenable = true; NetworkStream stream = client.GetStream(); // 5 seconds - default for httpd 2.2+ stream.ReadTimeout = 5000; goto skipagain; again: log.Info("doing Again"); skipagain: var asciiEncoding = new ASCIIEncoding(); var request = new byte[1024*4]; int len = 0; // handle header try { len = stream.Read(request, 0, request.Length); } catch { return; } string head = System.Text.Encoding.ASCII.GetString(request, 0, len); log.Info(head); int index = head.IndexOf('\n'); string url = head.Substring(0, index - 1); //url = url.Replace("\r", ""); //url = url.Replace("GET ",""); //url = url.Replace(" HTTP/1.0", ""); //url = url.Replace(" HTTP/1.1", ""); Tracking.AddEvent("HTTPServer", "Get", url, ""); ///////////////////////////////////////////////////////////////// if (url.Contains("websocket")) { using (var writer = new StreamWriter(stream, Encoding.Default)) { writer.WriteLine("HTTP/1.1 101 WebSocket Protocol Handshake"); writer.WriteLine("Upgrade: WebSocket"); writer.WriteLine("Connection: Upgrade"); writer.WriteLine("WebSocket-Location: ws://localhost:56781/websocket/server"); int start = head.IndexOf("Sec-WebSocket-Key:") + 19; int end = head.IndexOf('\r', start); if (end == -1) end = head.IndexOf('\n', start); string accept = ComputeWebSocketHandshakeSecurityHash09(head.Substring(start, end - start)); writer.WriteLine("Sec-WebSocket-Accept: " + accept); writer.WriteLine("Server: Mission Planner"); writer.WriteLine(""); writer.Flush(); while (client.Connected) { Thread.Sleep(200); log.Debug(stream.DataAvailable + " " + client.Available); while (client.Available > 0) { Console.Write(stream.ReadByte()); } byte[] packet = new byte[1024]; string sendme = MainV2.comPort.MAV.cs.roll + "," + MainV2.comPort.MAV.cs.pitch + "," + MainV2.comPort.MAV.cs.yaw + "," + MainV2.comPort.MAV.cs.lat + "," + MainV2.comPort.MAV.cs.lng + "," + MainV2.comPort.MAV.cs.alt; packet[0] = 0x81; // fin - binary packet[1] = (byte) sendme.Length; int i = 2; foreach (char ch in sendme) { packet[i++] = (byte) ch; } stream.Write(packet, 0, i); //break; } } } ///////////////////////////////////////////////////////////////// else if (url.Contains("georefnetwork.kml")) { byte[] buffer = Encoding.ASCII.GetBytes(georefkml); string header = "HTTP/1.1 200 OK\r\nServer: here\r\nKeep-Alive: timeout=15, max=100\r\nConnection: Keep-Alive\r\nCache-Control: no-cache\r\nContent-Type: application/vnd.google-earth.kml+xml\r\nX-Pad: avoid browser bug\r\nContent-Length: " + buffer.Length + "\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); stream.Write(buffer, 0, buffer.Length); goto again; //stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.Contains("network.kml")) { SharpKml.Dom.Document kml = new SharpKml.Dom.Document(); SharpKml.Dom.Placemark pmplane = new SharpKml.Dom.Placemark(); pmplane.Name = "P/Q " + MainV2.comPort.MAV.cs.altasl; pmplane.Visibility = true; SharpKml.Dom.Location loc = new SharpKml.Dom.Location(); loc.Latitude = MainV2.comPort.MAV.cs.lat; loc.Longitude = MainV2.comPort.MAV.cs.lng; loc.Altitude = MainV2.comPort.MAV.cs.altasl; if (loc.Altitude < 0) loc.Altitude = 0.01; SharpKml.Dom.Orientation ori = new SharpKml.Dom.Orientation(); ori.Heading = MainV2.comPort.MAV.cs.yaw; ori.Roll = -MainV2.comPort.MAV.cs.roll; ori.Tilt = -MainV2.comPort.MAV.cs.pitch; SharpKml.Dom.Scale sca = new SharpKml.Dom.Scale(); sca.X = 2; sca.Y = 2; sca.Z = 2; SharpKml.Dom.Model model = new SharpKml.Dom.Model(); model.Location = loc; model.Orientation = ori; model.AltitudeMode = SharpKml.Dom.AltitudeMode.Absolute; model.Scale = sca; SharpKml.Dom.Link link = new SharpKml.Dom.Link(); link.Href = new Uri("block_plane_0.dae", UriKind.Relative); model.Link = link; pmplane.Geometry = model; SharpKml.Dom.LookAt la = new SharpKml.Dom.LookAt() { Altitude = loc.Altitude.Value, Latitude = loc.Latitude.Value, Longitude = loc.Longitude.Value, Tilt = 80, Heading = MainV2.comPort.MAV.cs.yaw, AltitudeMode = SharpKml.Dom.AltitudeMode.Absolute, Range = 50 }; if (loc.Latitude.Value != 0 && loc.Longitude.Value != 0) { kml.Viewpoint = la; kml.AddFeature(pmplane); } SharpKml.Dom.CoordinateCollection coords = new SharpKml.Dom.CoordinateCollection(); //if (loc.Latitude.Value != 0 && loc.Longitude.Value != 0) { //foreach (var point in MainV2.comPort.MAV.wps.Values) { // coords.Add(new SharpKml.Base.Vector(point.x, point.y, point.z)); } } //else { PointLatLngAlt home = null; // draw track try { foreach (var point in GCSViews.FlightPlanner.instance.fullpointlist) { if (point.Tag.ToLower().Contains("home")) home = point; if (point != null) coords.Add(new SharpKml.Base.Vector(point.Lat, point.Lng, point.Alt)); } } catch { } foreach (var point in GCSViews.FlightPlanner.instance.fullpointlist) { if (point == null) continue; SharpKml.Dom.Placemark wp = new SharpKml.Dom.Placemark(); wp.Name = "WP " + point.Tag + " Alt: " + point.Alt; SharpKml.Dom.Point wppoint = new SharpKml.Dom.Point(); var altmode = SharpKml.Dom.AltitudeMode.RelativeToGround; wppoint.AltitudeMode = altmode; wppoint.Coordinate = new Vector() { Latitude = point.Lat, Longitude = point.Lng, Altitude = point.Alt }; wp.Geometry = wppoint; kml.AddFeature(wp); } } SharpKml.Dom.LineString ls = new SharpKml.Dom.LineString(); ls.AltitudeMode = SharpKml.Dom.AltitudeMode.RelativeToGround; ls.Coordinates = coords; ls.Extrude = false; ls.Tessellate = true; Style style = new Style(); style.Id = "yellowLineGreenPoly"; style.Line = new LineStyle(new Color32(HexStringToColor("ff00ffff")), 4); Style style2 = new Style(); style2.Id = "yellowLineGreenPoly"; style2.Line = new LineStyle(new Color32(HexStringToColor("7f00ffff")), 4); // above ground SharpKml.Dom.Placemark pm = new SharpKml.Dom.Placemark() { Geometry = ls, Name = "WPs", StyleSelector = style }; kml.AddFeature(pm); // on ground SharpKml.Dom.LineString ls2 = new SharpKml.Dom.LineString(); ls2.Coordinates = coords; ls2.Extrude = false; ls2.Tessellate = true; ls2.AltitudeMode = SharpKml.Dom.AltitudeMode.ClampToGround; SharpKml.Dom.Placemark pm2 = new SharpKml.Dom.Placemark() { Geometry = ls2, Name = "onground", StyleSelector = style2 }; kml.AddFeature(pm2); SharpKml.Base.Serializer serializer = new SharpKml.Base.Serializer(); serializer.Serialize(kml); byte[] buffer = Encoding.ASCII.GetBytes(serializer.Xml); string header = "HTTP/1.1 200 OK\r\nContent-Type: application/vnd.google-earth.kml+xml\r\nContent-Length: " + buffer.Length + "\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); stream.Write(buffer, 0, buffer.Length); goto again; //stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.Contains("block_plane_0.dae")) { string header = "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); BinaryReader file = new BinaryReader(File.Open("block_plane_0.dae", FileMode.Open, FileAccess.Read, FileShare.Read)); byte[] buffer = new byte[1024]; while (file.PeekChar() != -1) { int leng = file.Read(buffer, 0, buffer.Length); stream.Write(buffer, 0, leng); } file.Close(); stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.Contains("hud.html")) { string header = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); BinaryReader file = new BinaryReader(File.Open("hud.html", FileMode.Open, FileAccess.Read, FileShare.Read)); byte[] buffer = new byte[1024]; while (file.PeekChar() != -1) { int leng = file.Read(buffer, 0, buffer.Length); stream.Write(buffer, 0, leng); } file.Close(); stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.ToLower().Contains("hud.jpg") || url.ToLower().Contains("map.jpg") || url.ToLower().Contains("both.jpg")) { refreshmap(); string header = "HTTP/1.1 200 OK\r\nContent-Type: multipart/x-mixed-replace;boundary=PLANNER\r\n\r\n--PLANNER\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); while (client.Connected) { System.Threading.Thread.Sleep(200); // 5hz byte[] data = null; if (url.ToLower().Contains("hud")) { GCSViews.FlightData.myhud.streamjpgenable = true; data = GCSViews.FlightData.myhud.streamjpg.ToArray(); } else if (url.ToLower().Contains("map")) { data = GetControlJpegRaw(GCSViews.FlightData.mymap); } else { GCSViews.FlightData.myhud.streamjpgenable = true; Image img1 = Image.FromStream(GCSViews.FlightData.myhud.streamjpg); Image img2 = GetControlJpeg(GCSViews.FlightData.mymap); int bigger = img1.Height > img2.Height ? img1.Height : img2.Height; Image imgout = new Bitmap(img1.Width + img2.Width, bigger); Graphics grap = Graphics.FromImage(imgout); grap.DrawImageUnscaled(img1, 0, 0); grap.DrawImageUnscaled(img2, img1.Width, 0); MemoryStream streamjpg = new MemoryStream(); imgout.Save(streamjpg, System.Drawing.Imaging.ImageFormat.Jpeg); data = streamjpg.ToArray(); } header = "Content-Type: image/jpeg\r\nContent-Length: " + data.Length + "\r\n\r\n"; temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); stream.Write(data, 0, data.Length); header = "\r\n--PLANNER\r\n"; temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); } GCSViews.FlightData.myhud.streamjpgenable = false; stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.Contains("/guided?")) { //http://127.0.0.1:56781/guided?lat=-34&lng=117.8&alt=30 Regex rex = new Regex(@"lat=([\-\.0-9]+)&lng=([\-\.0-9]+)&alt=([\.0-9]+)", RegexOptions.IgnoreCase); Match match = rex.Match(url); if (match.Success) { Locationwp gwp = new Locationwp() { lat = double.Parse(match.Groups[1].Value), lng = double.Parse(match.Groups[2].Value), alt = float.Parse(match.Groups[3].Value) }; try { MainV2.comPort.setGuidedModeWP(gwp); } catch { } string header = "HTTP/1.1 200 OK\r\n\r\nSent Guide Mode Wp"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); } else { string header = "HTTP/1.1 200 OK\r\n\r\nFailed Guide Mode Wp"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); } stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.ToLower().Contains(".jpg")) { Regex rex = new Regex(@"([^\s]+)\s(.+)\sHTTP/1", RegexOptions.IgnoreCase); Match match = rex.Match(url); if (match.Success) { string fileurl = match.Groups[2].Value; using (Image orig = Image.FromFile(georefimagepath + fileurl)) using (Image resi = ResizeImage(orig, new Size(640, 480))) using (MemoryStream memstream = new MemoryStream()) { resi.Save(memstream, System.Drawing.Imaging.ImageFormat.Jpeg); memstream.Position = 0; string header = "HTTP/1.1 200 OK\r\nServer: here\r\nKeep-Alive: timeout=15, max=100\r\nConnection: Keep-Alive\r\nContent-Type: image/jpg\r\nX-Pad: avoid browser bug\r\nContent-Length: " + memstream.Length + "\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); using (BinaryReader file = new BinaryReader(memstream)) { byte[] buffer = new byte[1024]; while (file.BaseStream.Position < file.BaseStream.Length) { int leng = file.Read(buffer, 0, buffer.Length); stream.Write(buffer, 0, leng); } } } goto again; //stream.Close(); } ///////////////////////////////////////////////////////////////// else { string header = "HTTP/1.1 404 not found\r\nContent-Type: image/jpg\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); } stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.ToLower().Contains("post /guide")) { Regex rex = new Regex(@"lat"":([\-\.0-9]+),""lon"":([\-\.0-9]+),""alt"":([\.0-9]+)", RegexOptions.IgnoreCase); Match match = rex.Match(head); if (match.Success) { Locationwp gwp = new Locationwp() { lat = double.Parse(match.Groups[1].Value), lng = double.Parse(match.Groups[2].Value), alt = float.Parse(match.Groups[3].Value) }; try { MainV2.comPort.setGuidedModeWP(gwp); } catch { } string header = "HTTP/1.1 200 OK\r\n\r\nSent Guide Mode Wp"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); } else { string header = "HTTP/1.1 200 OK\r\n\r\nFailed Guide Mode Wp"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); } stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.ToLower().Contains("/command_long")) { string header = "HTTP/1.1 404 not found\r\nContent-Type: image/jpg\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.ToLower().Contains("/rcoverride")) { string header = "HTTP/1.1 404 not found\r\nContent-Type: image/jpg\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.ToLower().Contains("/get_mission")) { string header = "HTTP/1.1 404 not found\r\nContent-Type: image/jpg\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.ToLower().Contains("/mavlink/")) { /* GET /mavlink/ATTITUDE+VFR_HUD+NAV_CONTROLLER_OUTPUT+META_WAYPOINT+GPS_RAW_INT+HEARTBEAT+META_LINKQUALITY+GPS_STATUS+STATUSTEXT+SYS_STATUS?_=1355828718540 HTTP/1.1 Host: ubuntu:9999 Connection: keep-alive X-Requested-With: XMLHttpRequest User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11 Accept: Referer: http://ubuntu:9999/index.html Accept-Encoding: gzip,deflate,sdch Accept-Language: en-GB,en-US;q=0.8,en;q=0.6 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 HTTP/1.1 200 OK Content-Type: application/json Content-Length: 2121 Date: Thu, 29 Nov 2012 12:13:38 GMT Server: ubuntu { "VFR_HUD": {"msg": {"throttle": 0, "groundspeed": 0.0, "airspeed": 0.0, "climb": 0.0, "mavpackettype": "VFR_HUD", "alt": -0.47999998927116394, "heading": 108}, "index": 687, "time_usec": 0}, "STATUSTEXT": {"msg": {"mavpackettype": "STATUSTEXT", "severity": 1, "text": "Initialising APM..."}, "index": 2, "time_usec": 0}, "SYS_STATUS": {"msg": {"onboard_control_sensors_present": 4294966287, "load": 0, "battery_remaining": -1, "errors_count4": 0, "drop_rate_comm": 0, "errors_count2": 0, "errors_count3": 0, "errors_comm": 0, "current_battery": -1, "errors_count1": 0, "onboard_control_sensors_health": 4294966287, "mavpackettype": "SYS_STATUS", "onboard_control_sensors_enabled": 4294945807, "voltage_battery": 10080}, "index": 693, "time_usec": 0}, "META_LINKQUALITY": {"msg": {"master_in": 11110, "mav_loss": 0, "mavpackettype": "META_LINKQUALITY", "master_out": 194, "packet_loss": 0.0}, "index": 194, "time_usec": 0}, "ATTITUDE": {"msg": {"pitchspeed": -0.000976863200776279, "yaw": 1.8878594636917114, "rollspeed": -0.0030046366155147552, "time_boot_ms": 194676, "pitch": -0.09986469894647598, "mavpackettype": "ATTITUDE", "yawspeed": -0.0015030358918011189, "roll": -0.029391441494226456}, "index": 687, "time_usec": 0}, "GPS_RAW_INT": {"msg": {"fix_type": 1, "cog": 0, "epv": 65535, "lon": 0, "time_usec": 0, "eph": 9999, "satellites_visible": 0, "lat": 0, "mavpackettype": "GPS_RAW_INT", "alt": 137000, "vel": 0}, "index": 687, "time_usec": 0}, "HEARTBEAT": {"msg": {"custom_mode": 0, "system_status": 4, "base_mode": 81, "autopilot": 3, "mavpackettype": "HEARTBEAT", "type": 2, "mavlink_version": 3}, "index": 190, "time_usec": 0}, "GPS_STATUS": {"msg": {"satellite_snr": "", "satellite_azimuth": "", "satellite_prn": "", "satellite_elevation": "", "satellites_visible": 0, "satellite_used": "", "mavpackettype": "GPS_STATUS"}, "index": 2, "time_usec": 0}, "NAV_CONTROLLER_OUTPUT": {"msg": {"wp_dist": 0, "nav_pitch": 0.0, "target_bearing": 0, "nav_roll": 0.0, "aspd_error": 0.0, "alt_error": 0.0, "mavpackettype": "NAV_CONTROLLER_OUTPUT", "xtrack_error": 0.0, "nav_bearing": 0}, "index": 687, "time_usec": 0}} */ JavaScriptSerializer serializer = new JavaScriptSerializer(); object[] data = new object[20]; Messagejson message = new Messagejson(); if (MainV2.comPort.MAV.getPacket((byte) MAVLink.MAVLINK_MSG_ID.ATTITUDE) != null) message.ATTITUDE = new Message2() { index = 1, msg = MainV2.comPort.MAV.getPacket((byte)MAVLink.MAVLINK_MSG_ID.ATTITUDE) .ToStructure<MAVLink.mavlink_attitude_t>() }; if (MainV2.comPort.MAV.getPacket((byte)MAVLink.MAVLINK_MSG_ID.VFR_HUD) != null) message.VFR_HUD = new Message2() { index = 1, msg = MainV2.comPort.MAV.getPacket((byte)MAVLink.MAVLINK_MSG_ID.VFR_HUD) .ToStructure<MAVLink.mavlink_vfr_hud_t>() }; if (MainV2.comPort.MAV.getPacket((byte)MAVLink.MAVLINK_MSG_ID.NAV_CONTROLLER_OUTPUT) != null) message.NAV_CONTROLLER_OUTPUT = new Message2() { index = 1, msg = MainV2.comPort.MAV.getPacket((byte)MAVLink.MAVLINK_MSG_ID.NAV_CONTROLLER_OUTPUT) .ToStructure<MAVLink.mavlink_nav_controller_output_t>() }; if (MainV2.comPort.MAV.getPacket((byte)MAVLink.MAVLINK_MSG_ID.GPS_RAW_INT) != null) message.GPS_RAW_INT = new Message2() { index = 1, msg = MainV2.comPort.MAV.getPacket((byte)MAVLink.MAVLINK_MSG_ID.GPS_RAW_INT) .ToStructure<MAVLink.mavlink_gps_raw_int_t>() }; if (MainV2.comPort.MAV.getPacket((byte) MAVLink.MAVLINK_MSG_ID.HEARTBEAT) != null) message.HEARTBEAT = new Message2() { index = 1, msg = MainV2.comPort.MAV.getPacket((byte) MAVLink.MAVLINK_MSG_ID.HEARTBEAT) .ToStructure<MAVLink.mavlink_heartbeat_t>() }; if (MainV2.comPort.MAV.getPacket((byte) MAVLink.MAVLINK_MSG_ID.GPS_STATUS) != null) message.GPS_STATUS = new Message2() { index = 1, msg = MainV2.comPort.MAV.getPacket((byte) MAVLink.MAVLINK_MSG_ID.GPS_STATUS) .ToStructure<MAVLink.mavlink_gps_status_t>() }; if (MainV2.comPort.MAV.getPacket((byte) MAVLink.MAVLINK_MSG_ID.STATUSTEXT) != null) message.STATUSTEXT = new Message2() { index = 1, msg = MainV2.comPort.MAV.getPacket((byte) MAVLink.MAVLINK_MSG_ID.STATUSTEXT) .ToStructure<MAVLink.mavlink_statustext_t>() }; if (MainV2.comPort.MAV.getPacket((byte) MAVLink.MAVLINK_MSG_ID.SYS_STATUS) != null) message.SYS_STATUS = new Message2() { index = 1, msg = MainV2.comPort.MAV.getPacket((byte)MAVLink.MAVLINK_MSG_ID.SYS_STATUS) .ToStructure<MAVLink.mavlink_sys_status_t>() }; message.META_LINKQUALITY = message.SYS_STATUS = new Message2() { index = packetindex, time_usec = 0, msg = new META_LINKQUALITY() { master_in = (int) MainV2.comPort.MAV.packetsnotlost, mavpackettype = "META_LINKQUALITY", master_out = MainV2.comPort.packetcount, packet_loss = 100 - MainV2.comPort.MAV.cs.linkqualitygcs, mav_loss = 0 } }; packetindex++; string output = serializer.Serialize(message); string header = "HTTP/1.1 200 OK\r\nContent-Type: application/json\r\nContent-Length: " + output.Length + "\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); temp = asciiEncoding.GetBytes(output); stream.Write(temp, 0, temp.Length); goto again; //stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.ToLower().Contains("/mav/")) { //C:\Users\hog\Desktop\DIYDrones\mavelous\modules\lib\mavelous_web Regex rex = new Regex(@"([^\s]+)\s(.+)\sHTTP/1", RegexOptions.IgnoreCase); Match match = rex.Match(url); if (match.Success) { string fileurl = match.Groups[2].Value; fileurl = fileurl.Replace("/mav/", ""); if (fileurl == "" || fileurl == "/") fileurl = "index.html"; string header = "HTTP/1.1 200 OK\r\n"; if (fileurl.Contains(".html")) header += "Content-Type: text/html\r\n\r\n"; else if (fileurl.Contains(".js")) header += "Content-Type: application/x-javascript\r\n\r\n"; else if (fileurl.Contains(".css")) header += "Content-Type: text/css\r\n\r\n"; else header += "Content-Type: text/plain\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); BinaryReader file = new BinaryReader(File.Open(mavelous_web + fileurl, FileMode.Open, FileAccess.Read, FileShare.Read)); byte[] buffer = new byte[1024]; while (file.BaseStream.Position < file.BaseStream.Length) { int leng = file.Read(buffer, 0, buffer.Length); stream.Write(buffer, 0, leng); } file.Close(); stream.Close(); } ///////////////////////////////////////////////////////////////// else { string header = "HTTP/1.1 404 not found\r\nContent-Type: image/jpg\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); stream.Close(); } } ///////////////////////////////////////////////////////////////// else { Console.WriteLine(url); string header = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); string content = @" <a href=/mav/>Mavelous</a> <a href=/mavlink/>Mavelous traffic</a> <a href=/hud.jpg>Hud image</a> <a href=/map.jpg>Map image </a> <a href=/both.jpg>Map & hud image</a> <a href=/hud.html>hud html5</a> <a href=/network.kml>network kml</a> <a href=/georefnetwork.kml>georef kml</a> "; temp = asciiEncoding.GetBytes(content); stream.Write(temp, 0, temp.Length); } stream.Close(); log.Info("Close http " + url); } catch (Exception ee) { log.Error("Failed http ", ee); } } }
public virtual void saveKmlDocument(Document kmlDoc) { throw new NotImplementedException(); }
public virtual void addElementToKmlDocument(JoinedProspect joinedProspect, Document kmlDoc) { throw new NotImplementedException(); }
public string GetKml() { var matchId = _currentMatchProvider.GetMatchId(); SharpKml.Dom.Kml kml = new SharpKml.Dom.Kml(); var document = new Document(); kml.Feature = document; var c = System.Drawing.ColorTranslator.FromHtml("#33FF33"); var postStyle = new Style(); postStyle.Id = "post_vanlig"; postStyle.Icon = new IconStyle { Color = new Color32(c.A, c.R, c.G, c.B), Icon = new IconStyle.IconLink(new Uri("http://maps.google.com/mapfiles/kml/paddle/wht-blank.png")), Scale = 0.5 }; document.AddStyle(postStyle); var lagFolder = new Folder { Name = "Lag" }; var postFolder = new Folder { Name = "Poster" }; document.AddFeature(lagFolder); document.AddFeature(postFolder); using (var context = _dataContextFactory.Create()) { var match = context.Matcher.Single(x => x.MatchId == matchId); var maxLat = match.GeoboxNWLatitude.GetValueOrDefault(); var minLat = match.GeoboxSELatitude.GetValueOrDefault(); var minLon = match.GeoboxNWLongitude.GetValueOrDefault(); var maxLon = match.GeoboxSELongitude.GetValueOrDefault(); var poster = (from pim in context.PosterIMatch where pim.Match.MatchId == matchId select new { pim.SynligFraTid, pim.SynligTilTid, pim.Post.Navn, pim.Post.Latitude, pim.Post.Longitude }).ToList(); foreach (var p in poster) { var placemark = new Placemark(); placemark.StyleUrl = new Uri("#post_vanlig", UriKind.Relative); placemark.Time = new TimeSpan { Begin = p.SynligFraTid, End = p.SynligTilTid }; placemark.Name = p.Navn; placemark.Geometry = new Point { Coordinate = new Vector(p.Latitude, p.Longitude) }; postFolder.AddFeature(placemark); } var lag = context.Lag.ToList(); var lagDictionary = new Dictionary<string, Folder>(); foreach (var lag1 in lag) { var color = System.Drawing.ColorTranslator.FromHtml("#" + lag1.Farge); var style = new Style(); style.Id = LagStyleKey(lag1.LagId); style.Icon = new IconStyle { Color = new Color32(color.A, color.R, color.G, color.B), Icon = new IconStyle.IconLink(new Uri("http://maps.google.com/mapfiles/kml/paddle/wht-blank-lv.png")), Scale = 0.3 }; document.AddStyle(style); var folder = new Folder { Name = lag1.Navn }; lagDictionary.Add(lag1.LagId, folder); lagFolder.AddFeature(folder); } var førsteRegistering = (from r in context.PostRegisteringer select r.RegistertTidspunkt).Min().AddMinutes(-5); var avsluttet = (from r in poster select r.SynligTilTid).Min().AddMinutes(5); var deltakerPosisjoner = (from p in context.DeltakerPosisjoner join d in context.Deltakere on p.DeltakerId equals d.DeltakerId where førsteRegistering < p.Tidspunkt && p.Tidspunkt < avsluttet select new { p.Latitude, p.Longitude, p.DeltakerId, d.Navn, d.Lag.Farge, d.Lag.LagId, p.Tidspunkt }).GroupBy(x => x.DeltakerId).ToDictionary(x => x.Key, y => y); foreach (var deltaker in deltakerPosisjoner) { //if (deltaker.Key != "MS_3-2") // continue; var førstePosisjon = deltaker.Value.FirstOrDefault(); var placemark = new Placemark(); placemark.StyleUrl = new Uri("#" + LagStyleKey(førstePosisjon.LagId), UriKind.Relative); placemark.Name = førstePosisjon.Navn; var posisjoner = deltaker.Value.OrderBy(x => x.Tidspunkt).ToList(); var track = new Track(); var forrigePosisjon = førstePosisjon; foreach (var pos in posisjoner) { // Utafor boksen if (pos.Latitude > maxLat || pos.Latitude < minLat || pos.Longitude > maxLon || pos.Longitude < minLon) { continue; } var meter = DistanseKalkulator.MeterMellom(forrigePosisjon.Latitude, forrigePosisjon.Longitude, pos.Latitude, pos.Longitude); var sekunder = pos.Tidspunkt.Subtract(forrigePosisjon.Tidspunkt).TotalSeconds; if (sekunder > 0) { var fart = meter / sekunder; if (fart > 8.333) // raskere enn 12 blank på 100m { continue; } } track.AddWhen(pos.Tidspunkt); track.AddCoordinate(new Vector(pos.Latitude, pos.Longitude)); forrigePosisjon = pos; } placemark.Geometry = track; lagDictionary[førstePosisjon.LagId].AddFeature(placemark); } } Serializer serializer = new Serializer(); serializer.Serialize(kml); return serializer.Xml; }
TreeViewItem ProcessDocument(Document document) { string name = document.Name; KMLFeatureTreeViewItem item = new KMLFeatureTreeViewItem() { Header = name, Feature = document }; IEnumerable<Feature> features = document.Features; features.ToList().ForEach(feature => { TreeViewItem node = ProcessFeature(feature); if (node != null) { item.Items.Add(node); } }); return item; }
public virtual void addAddresstoKmlDocument(KmlPrepData prepData, Document KmlDoc) { throw new NotImplementedException(); }
public void DoAcceptTcpClientCallback(IAsyncResult ar) { // Get the listener that handles the client request. TcpListener listener = (TcpListener)ar.AsyncState; // End the operation and display the received data on // the console. using ( TcpClient client = listener.EndAcceptTcpClient(ar)) { // Signal the calling thread to continue. tcpClientConnected.Set(); try { // Get a stream object for reading and writing log.Info("Accepted Client " + client.Client.RemoteEndPoint.ToString()); //client.SendBufferSize = 100 * 1024; // 100kb //client.LingerState.Enabled = true; //client.NoDelay = true; // makesure we have valid image GCSViews.FlightData.myhud.streamjpgenable = true; NetworkStream stream = client.GetStream(); // 3 seconds stream.ReadTimeout = 3000; again: var asciiEncoding = new ASCIIEncoding(); var request = new byte[1024]; int len = stream.Read(request, 0, request.Length); string head = System.Text.Encoding.ASCII.GetString(request, 0, len); log.Info(head); int index = head.IndexOf('\n'); string url = head.Substring(0, index - 1); //url = url.Replace("\r", ""); //url = url.Replace("GET ",""); //url = url.Replace(" HTTP/1.0", ""); //url = url.Replace(" HTTP/1.1", ""); Tracking.AddEvent("HTTPServer", "Get", url, ""); ///////////////////////////////////////////////////////////////// if (url.Contains("websocket")) { using (var writer = new StreamWriter(stream, Encoding.Default)) { writer.WriteLine("HTTP/1.1 101 WebSocket Protocol Handshake"); writer.WriteLine("Upgrade: WebSocket"); writer.WriteLine("Connection: Upgrade"); writer.WriteLine("WebSocket-Location: ws://localhost:56781/websocket/server"); int start = head.IndexOf("Sec-WebSocket-Key:") + 19; int end = head.IndexOf('\r', start); if (end == -1) { end = head.IndexOf('\n', start); } string accept = ComputeWebSocketHandshakeSecurityHash09(head.Substring(start, end - start)); writer.WriteLine("Sec-WebSocket-Accept: " + accept); writer.WriteLine("Server: APM Planner"); writer.WriteLine(""); writer.Flush(); while (client.Connected) { Thread.Sleep(200); log.Debug(stream.DataAvailable + " " + client.Available); while (client.Available > 0) { Console.Write(stream.ReadByte()); } byte[] packet = new byte[256]; string sendme = MainV2.comPort.MAV.cs.roll + "," + MainV2.comPort.MAV.cs.pitch + "," + MainV2.comPort.MAV.cs.yaw; packet[0] = 0x81; // fin - binary packet[1] = (byte)sendme.Length; int i = 2; foreach (char ch in sendme) { packet[i++] = (byte)ch; } stream.Write(packet, 0, i); //break; } } } ///////////////////////////////////////////////////////////////// else if (url.Contains("georefnetwork.kml")) { string header = "HTTP/1.1 200 OK\r\nContent-Type: application/vnd.google-earth.kml+xml\r\nContent-Length: " + georefkml.Length + "\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); byte[] buffer = Encoding.ASCII.GetBytes(georefkml); stream.Write(buffer, 0, buffer.Length); goto again; //stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.Contains("network.kml")) { SharpKml.Dom.Document kml = new SharpKml.Dom.Document(); SharpKml.Dom.Placemark pmplane = new SharpKml.Dom.Placemark(); pmplane.Name = "P/Q " + MainV2.comPort.MAV.cs.altasl; pmplane.Visibility = true; SharpKml.Dom.Location loc = new SharpKml.Dom.Location(); loc.Latitude = MainV2.comPort.MAV.cs.lat; loc.Longitude = MainV2.comPort.MAV.cs.lng; loc.Altitude = MainV2.comPort.MAV.cs.altasl; if (loc.Altitude < 0) { loc.Altitude = 0.01; } SharpKml.Dom.Orientation ori = new SharpKml.Dom.Orientation(); ori.Heading = MainV2.comPort.MAV.cs.yaw; ori.Roll = -MainV2.comPort.MAV.cs.roll; ori.Tilt = -MainV2.comPort.MAV.cs.pitch; SharpKml.Dom.Scale sca = new SharpKml.Dom.Scale(); sca.X = 2; sca.Y = 2; sca.Z = 2; SharpKml.Dom.Model model = new SharpKml.Dom.Model(); model.Location = loc; model.Orientation = ori; model.AltitudeMode = SharpKml.Dom.AltitudeMode.Absolute; model.Scale = sca; SharpKml.Dom.Link link = new SharpKml.Dom.Link(); link.Href = new Uri("block_plane_0.dae", UriKind.Relative); model.Link = link; pmplane.Geometry = model; SharpKml.Dom.LookAt la = new SharpKml.Dom.LookAt() { Altitude = loc.Altitude.Value, Latitude = loc.Latitude.Value, Longitude = loc.Longitude.Value, Tilt = 80, Heading = MainV2.comPort.MAV.cs.yaw, AltitudeMode = SharpKml.Dom.AltitudeMode.Absolute, Range = 50 }; if (loc.Latitude.Value != 0 && loc.Longitude.Value != 0) { kml.Viewpoint = la; kml.AddFeature(pmplane); } SharpKml.Dom.CoordinateCollection coords = new SharpKml.Dom.CoordinateCollection(); //if (loc.Latitude.Value != 0 && loc.Longitude.Value != 0) { //foreach (var point in MainV2.comPort.MAV.wps.Values) { // coords.Add(new SharpKml.Base.Vector(point.x, point.y, point.z)); } } //else { PointLatLngAlt home = null; // draw track try { foreach (var point in GCSViews.FlightPlanner.instance.fullpointlist) { if (point.Tag.ToLower().Contains("home")) { home = point; } if (point != null) { coords.Add(new SharpKml.Base.Vector(point.Lat, point.Lng, point.Alt)); } } } catch { } foreach (var point in GCSViews.FlightPlanner.instance.fullpointlist) { if (point == null) { continue; } SharpKml.Dom.Placemark wp = new SharpKml.Dom.Placemark(); wp.Name = "WP " + point.Tag + " Alt: " + point.Alt; SharpKml.Dom.Point wppoint = new SharpKml.Dom.Point(); var altmode = SharpKml.Dom.AltitudeMode.RelativeToGround; wppoint.AltitudeMode = altmode; wppoint.Coordinate = new Vector() { Latitude = point.Lat, Longitude = point.Lng, Altitude = point.Alt }; wp.Geometry = wppoint; kml.AddFeature(wp); } } SharpKml.Dom.LineString ls = new SharpKml.Dom.LineString(); ls.AltitudeMode = SharpKml.Dom.AltitudeMode.RelativeToGround; ls.Coordinates = coords; ls.Extrude = false; ls.Tessellate = true; Style style = new Style(); style.Id = "yellowLineGreenPoly"; style.Line = new LineStyle(new Color32(HexStringToColor("ff00ffff")), 4); Style style2 = new Style(); style2.Id = "yellowLineGreenPoly"; style2.Line = new LineStyle(new Color32(HexStringToColor("7f00ffff")), 4); // above ground SharpKml.Dom.Placemark pm = new SharpKml.Dom.Placemark() { Geometry = ls, Name = "WPs", StyleSelector = style }; kml.AddFeature(pm); // on ground SharpKml.Dom.LineString ls2 = new SharpKml.Dom.LineString(); ls2.Coordinates = coords; ls2.Extrude = false; ls2.Tessellate = true; ls2.AltitudeMode = SharpKml.Dom.AltitudeMode.ClampToGround; SharpKml.Dom.Placemark pm2 = new SharpKml.Dom.Placemark() { Geometry = ls2, Name = "onground", StyleSelector = style2 }; kml.AddFeature(pm2); SharpKml.Base.Serializer serializer = new SharpKml.Base.Serializer(); serializer.Serialize(kml); byte[] buffer = Encoding.ASCII.GetBytes(serializer.Xml); string header = "HTTP/1.1 200 OK\r\nContent-Type: application/vnd.google-earth.kml+xml\r\nContent-Length: " + buffer.Length + "\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); stream.Write(buffer, 0, buffer.Length); goto again; //stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.Contains("block_plane_0.dae")) { string header = "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); BinaryReader file = new BinaryReader(File.Open("block_plane_0.dae", FileMode.Open, FileAccess.Read, FileShare.Read)); byte[] buffer = new byte[1024]; while (file.PeekChar() != -1) { int leng = file.Read(buffer, 0, buffer.Length); stream.Write(buffer, 0, leng); } file.Close(); stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.Contains("hud.html")) { string header = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); BinaryReader file = new BinaryReader(File.Open("hud.html", FileMode.Open, FileAccess.Read, FileShare.Read)); byte[] buffer = new byte[1024]; while (file.PeekChar() != -1) { int leng = file.Read(buffer, 0, buffer.Length); stream.Write(buffer, 0, leng); } file.Close(); stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.ToLower().Contains("hud.jpg") || url.ToLower().Contains("map.jpg") || url.ToLower().Contains("both.jpg")) { refreshmap(); string header = "HTTP/1.1 200 OK\r\nContent-Type: multipart/x-mixed-replace;boundary=APMPLANNER\r\n\r\n--APMPLANNER\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); while (client.Connected) { System.Threading.Thread.Sleep(200); // 5hz byte[] data = null; if (url.ToLower().Contains("hud")) { GCSViews.FlightData.myhud.streamjpgenable = true; data = GCSViews.FlightData.myhud.streamjpg.ToArray(); } else if (url.ToLower().Contains("map")) { data = GetControlJpegRaw(GCSViews.FlightData.mymap); } else { GCSViews.FlightData.myhud.streamjpgenable = true; Image img1 = Image.FromStream(GCSViews.FlightData.myhud.streamjpg); Image img2 = GetControlJpeg(GCSViews.FlightData.mymap); int bigger = img1.Height > img2.Height ? img1.Height : img2.Height; Image imgout = new Bitmap(img1.Width + img2.Width, bigger); Graphics grap = Graphics.FromImage(imgout); grap.DrawImageUnscaled(img1, 0, 0); grap.DrawImageUnscaled(img2, img1.Width, 0); MemoryStream streamjpg = new MemoryStream(); imgout.Save(streamjpg, System.Drawing.Imaging.ImageFormat.Jpeg); data = streamjpg.ToArray(); } header = "Content-Type: image/jpeg\r\nContent-Length: " + data.Length + "\r\n\r\n"; temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); stream.Write(data, 0, data.Length); header = "\r\n--APMPLANNER\r\n"; temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); } GCSViews.FlightData.myhud.streamjpgenable = false; stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.Contains("/guided?")) { //http://127.0.0.1:56781/guided?lat=-34&lng=117.8&alt=30 Regex rex = new Regex(@"lat=([\-\.0-9]+)&lng=([\-\.0-9]+)&alt=([\.0-9]+)", RegexOptions.IgnoreCase); Match match = rex.Match(url); if (match.Success) { Locationwp gwp = new Locationwp() { lat = double.Parse(match.Groups[1].Value), lng = double.Parse(match.Groups[2].Value), alt = float.Parse(match.Groups[3].Value) }; try { MainV2.comPort.setGuidedModeWP(gwp); } catch { } string header = "HTTP/1.1 200 OK\r\n\r\nSent Guide Mode Wp"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); } else { string header = "HTTP/1.1 200 OK\r\n\r\nFailed Guide Mode Wp"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); } stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.ToLower().Contains(".jpg")) { Regex rex = new Regex(@"([^\s]+)\s(.+)\sHTTP/1", RegexOptions.IgnoreCase); Match match = rex.Match(url); if (match.Success) { string fileurl = match.Groups[2].Value; using (Image orig = Image.FromFile(georefimagepath + fileurl)) using (Image resi = ResizeImage(orig, new Size(640, 480))) using (MemoryStream memstream = new MemoryStream()) { resi.Save(memstream, System.Drawing.Imaging.ImageFormat.Jpeg); memstream.Position = 0; string header = "HTTP/1.1 200 OK\r\nContent-Type: image/jpg\r\nContent-Length: " + memstream.Length + "\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); using (BinaryReader file = new BinaryReader(memstream)) { byte[] buffer = new byte[1024]; while (file.BaseStream.Position < file.BaseStream.Length) { int leng = file.Read(buffer, 0, buffer.Length); stream.Write(buffer, 0, leng); } } } goto again; //stream.Close(); } ///////////////////////////////////////////////////////////////// else { string header = "HTTP/1.1 404 not found\r\nContent-Type: image/jpg\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); } stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.ToLower().Contains("post /guide")) { Regex rex = new Regex(@"lat"":([\-\.0-9]+),""lon"":([\-\.0-9]+),""alt"":([\.0-9]+)", RegexOptions.IgnoreCase); Match match = rex.Match(head); if (match.Success) { Locationwp gwp = new Locationwp() { lat = double.Parse(match.Groups[1].Value), lng = double.Parse(match.Groups[2].Value), alt = float.Parse(match.Groups[3].Value) }; try { MainV2.comPort.setGuidedModeWP(gwp); } catch { } string header = "HTTP/1.1 200 OK\r\n\r\nSent Guide Mode Wp"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); } else { string header = "HTTP/1.1 200 OK\r\n\r\nFailed Guide Mode Wp"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); } stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.ToLower().Contains("/command_long")) { string header = "HTTP/1.1 404 not found\r\nContent-Type: image/jpg\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.ToLower().Contains("/rcoverride")) { string header = "HTTP/1.1 404 not found\r\nContent-Type: image/jpg\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.ToLower().Contains("/get_mission")) { string header = "HTTP/1.1 404 not found\r\nContent-Type: image/jpg\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.ToLower().Contains("/mavlink/")) { /* * GET /mavlink/ATTITUDE+VFR_HUD+NAV_CONTROLLER_OUTPUT+META_WAYPOINT+GPS_RAW_INT+HEARTBEAT+META_LINKQUALITY+GPS_STATUS+STATUSTEXT+SYS_STATUS?_=1355828718540 HTTP/1.1 * Host: ubuntu:9999 * Connection: keep-alive * X-Requested-With: XMLHttpRequest * User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11 * Accept: * Referer: http://ubuntu:9999/index.html * Accept-Encoding: gzip,deflate,sdch * Accept-Language: en-GB,en-US;q=0.8,en;q=0.6 * Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 * * HTTP/1.1 200 OK * Content-Type: application/json * Content-Length: 2121 * Date: Thu, 29 Nov 2012 12:13:38 GMT * Server: ubuntu * * { * "VFR_HUD": {"msg": {"throttle": 0, "groundspeed": 0.0, "airspeed": 0.0, "climb": 0.0, "mavpackettype": "VFR_HUD", "alt": -0.47999998927116394, "heading": 108}, "index": 687, "time_usec": 0}, * "STATUSTEXT": {"msg": {"mavpackettype": "STATUSTEXT", "severity": 1, "text": "Initialising APM..."}, "index": 2, "time_usec": 0}, * "SYS_STATUS": {"msg": {"onboard_control_sensors_present": 4294966287, "load": 0, "battery_remaining": -1, "errors_count4": 0, "drop_rate_comm": 0, "errors_count2": 0, "errors_count3": 0, "errors_comm": 0, "current_battery": -1, "errors_count1": 0, "onboard_control_sensors_health": 4294966287, "mavpackettype": "SYS_STATUS", "onboard_control_sensors_enabled": 4294945807, "voltage_battery": 10080}, "index": 693, "time_usec": 0}, * "META_LINKQUALITY": {"msg": {"master_in": 11110, "mav_loss": 0, "mavpackettype": "META_LINKQUALITY", "master_out": 194, "packet_loss": 0.0}, "index": 194, "time_usec": 0}, * "ATTITUDE": {"msg": {"pitchspeed": -0.000976863200776279, "yaw": 1.8878594636917114, "rollspeed": -0.0030046366155147552, "time_boot_ms": 194676, "pitch": -0.09986469894647598, "mavpackettype": "ATTITUDE", "yawspeed": -0.0015030358918011189, "roll": -0.029391441494226456}, "index": 687, "time_usec": 0}, * "GPS_RAW_INT": {"msg": {"fix_type": 1, "cog": 0, "epv": 65535, "lon": 0, "time_usec": 0, "eph": 9999, "satellites_visible": 0, "lat": 0, "mavpackettype": "GPS_RAW_INT", "alt": 137000, "vel": 0}, "index": 687, "time_usec": 0}, * "HEARTBEAT": {"msg": {"custom_mode": 0, "system_status": 4, "base_mode": 81, "autopilot": 3, "mavpackettype": "HEARTBEAT", "type": 2, "mavlink_version": 3}, "index": 190, "time_usec": 0}, * "GPS_STATUS": {"msg": {"satellite_snr": "", "satellite_azimuth": "", "satellite_prn": "", "satellite_elevation": "", "satellites_visible": 0, "satellite_used": "", "mavpackettype": "GPS_STATUS"}, "index": 2, "time_usec": 0}, * "NAV_CONTROLLER_OUTPUT": {"msg": {"wp_dist": 0, "nav_pitch": 0.0, "target_bearing": 0, "nav_roll": 0.0, "aspd_error": 0.0, "alt_error": 0.0, "mavpackettype": "NAV_CONTROLLER_OUTPUT", "xtrack_error": 0.0, "nav_bearing": 0}, "index": 687, "time_usec": 0}} */ JavaScriptSerializer serializer = new JavaScriptSerializer(); object[] data = new object[20]; Messagejson message = new Messagejson(); if (MainV2.comPort.MAV.packets[(byte)MAVLink.MAVLINK_MSG_ID.ATTITUDE] != null) { message.ATTITUDE = new Message2() { index = MainV2.comPort.MAV.packetseencount[(byte)MAVLink.MAVLINK_MSG_ID.ATTITUDE], msg = MainV2.comPort.MAV.packets[(byte)MAVLink.MAVLINK_MSG_ID.ATTITUDE].ByteArrayToStructure <MAVLink.mavlink_attitude_t>(6) } } ; if (MainV2.comPort.MAV.packets[(byte)MAVLink.MAVLINK_MSG_ID.VFR_HUD] != null) { message.VFR_HUD = new Message2() { index = MainV2.comPort.MAV.packetseencount[(byte)MAVLink.MAVLINK_MSG_ID.VFR_HUD], msg = MainV2.comPort.MAV.packets[(byte)MAVLink.MAVLINK_MSG_ID.VFR_HUD].ByteArrayToStructure <MAVLink.mavlink_vfr_hud_t>(6) } } ; if (MainV2.comPort.MAV.packets[(byte)MAVLink.MAVLINK_MSG_ID.NAV_CONTROLLER_OUTPUT] != null) { message.NAV_CONTROLLER_OUTPUT = new Message2() { index = MainV2.comPort.MAV.packetseencount[(byte)MAVLink.MAVLINK_MSG_ID.NAV_CONTROLLER_OUTPUT], msg = MainV2.comPort.MAV.packets[(byte)MAVLink.MAVLINK_MSG_ID.NAV_CONTROLLER_OUTPUT].ByteArrayToStructure <MAVLink.mavlink_nav_controller_output_t>(6) } } ; if (MainV2.comPort.MAV.packets[(byte)MAVLink.MAVLINK_MSG_ID.GPS_RAW_INT] != null) { message.GPS_RAW_INT = new Message2() { index = MainV2.comPort.MAV.packetseencount[(byte)MAVLink.MAVLINK_MSG_ID.GPS_RAW_INT], msg = MainV2.comPort.MAV.packets[(byte)MAVLink.MAVLINK_MSG_ID.GPS_RAW_INT].ByteArrayToStructure <MAVLink.mavlink_gps_raw_int_t>(6) } } ; if (MainV2.comPort.MAV.packets[(byte)MAVLink.MAVLINK_MSG_ID.HEARTBEAT] != null) { message.HEARTBEAT = new Message2() { index = MainV2.comPort.MAV.packetseencount[(byte)MAVLink.MAVLINK_MSG_ID.HEARTBEAT], msg = MainV2.comPort.MAV.packets[(byte)MAVLink.MAVLINK_MSG_ID.HEARTBEAT].ByteArrayToStructure <MAVLink.mavlink_heartbeat_t>(6) } } ; if (MainV2.comPort.MAV.packets[(byte)MAVLink.MAVLINK_MSG_ID.GPS_STATUS] != null) { message.GPS_STATUS = new Message2() { index = MainV2.comPort.MAV.packetseencount[(byte)MAVLink.MAVLINK_MSG_ID.GPS_STATUS], msg = MainV2.comPort.MAV.packets[(byte)MAVLink.MAVLINK_MSG_ID.GPS_STATUS].ByteArrayToStructure <MAVLink.mavlink_gps_status_t>(6) } } ; if (MainV2.comPort.MAV.packets[(byte)MAVLink.MAVLINK_MSG_ID.STATUSTEXT] != null) { message.STATUSTEXT = new Message2() { index = MainV2.comPort.MAV.packetseencount[(byte)MAVLink.MAVLINK_MSG_ID.STATUSTEXT], msg = MainV2.comPort.MAV.packets[(byte)MAVLink.MAVLINK_MSG_ID.STATUSTEXT].ByteArrayToStructure <MAVLink.mavlink_statustext_t>(6) } } ; if (MainV2.comPort.MAV.packets[(byte)MAVLink.MAVLINK_MSG_ID.SYS_STATUS] != null) { message.SYS_STATUS = new Message2() { index = MainV2.comPort.MAV.packetseencount[(byte)MAVLink.MAVLINK_MSG_ID.SYS_STATUS], msg = MainV2.comPort.MAV.packets[(byte)MAVLink.MAVLINK_MSG_ID.SYS_STATUS].ByteArrayToStructure <MAVLink.mavlink_sys_status_t>(6) } } ; message.META_LINKQUALITY = message.SYS_STATUS = new Message2() { index = packetindex, time_usec = 0, msg = new META_LINKQUALITY() { master_in = (int)MainV2.comPort.packetsnotlost, mavpackettype = "META_LINKQUALITY", master_out = MainV2.comPort.packetcount, packet_loss = 100 - MainV2.comPort.MAV.cs.linkqualitygcs, mav_loss = 0 } }; packetindex++; string output = serializer.Serialize(message); string header = "HTTP/1.1 200 OK\r\nContent-Type: application/json\r\nContent-Length: " + output.Length + "\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); temp = asciiEncoding.GetBytes(output); stream.Write(temp, 0, temp.Length); goto again; //stream.Close(); } ///////////////////////////////////////////////////////////////// else if (url.ToLower().Contains("/mav/")) { //C:\Users\hog\Desktop\DIYDrones\mavelous\modules\lib\mavelous_web Regex rex = new Regex(@"([^\s]+)\s(.+)\sHTTP/1", RegexOptions.IgnoreCase); Match match = rex.Match(url); if (match.Success) { string fileurl = match.Groups[2].Value; fileurl = fileurl.Replace("/mav/", ""); if (fileurl == "" || fileurl == "/") { fileurl = "index.html"; } string header = "HTTP/1.1 200 OK\r\n"; if (fileurl.Contains(".html")) { header += "Content-Type: text/html\r\n\r\n"; } else if (fileurl.Contains(".js")) { header += "Content-Type: application/x-javascript\r\n\r\n"; } else if (fileurl.Contains(".css")) { header += "Content-Type: text/css\r\n\r\n"; } else { header += "Content-Type: text/plain\r\n\r\n"; } byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); BinaryReader file = new BinaryReader(File.Open(mavelous_web + fileurl, FileMode.Open, FileAccess.Read, FileShare.Read)); byte[] buffer = new byte[1024]; while (file.BaseStream.Position < file.BaseStream.Length) { int leng = file.Read(buffer, 0, buffer.Length); stream.Write(buffer, 0, leng); } file.Close(); stream.Close(); } ///////////////////////////////////////////////////////////////// else { string header = "HTTP/1.1 404 not found\r\nContent-Type: image/jpg\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); stream.Close(); } } ///////////////////////////////////////////////////////////////// else { Console.WriteLine(url); string header = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"; byte[] temp = asciiEncoding.GetBytes(header); stream.Write(temp, 0, temp.Length); string content = @" <a href=/mav/>Mavelous</a> <a href=/mavlink/>Mavelous traffic</a> <a href=/hud.jpg>Hud image</a> <a href=/map.jpg>Map image </a> <a href=/both.jpg>Map & hud image</a> <a href=/hud.html>hud html5</a> <a href=/network.kml>network kml</a> "; temp = asciiEncoding.GetBytes(content); stream.Write(temp, 0, temp.Length); } stream.Close(); } catch (Exception ee) { log.Error("Failed http ", ee); } } }
public ActionResult Refresh() { IEnumerable<Prospect> prospectList = _prospectSerivce.getList(); int counter = 0; Document document = new Document(); // get lat and long for each prospect foreach (Prospect prospect in prospectList) { // some api's will only allow x calls per second this sleeper helps to space out the calls made to the web service counter = counter + 1; if (counter % 10 == 0) { System.Diagnostics.Debug.WriteLine("Sleeping" + counter); System.Threading.Thread.Sleep(5000); } String responseFromServer = _prospectSerivce.makePrepData(prospect); KmlPrepData kmlPrepData = new KmlPrepData(); //System.Diagnostics.Debug.WriteLine(responseFromServer); kmlPrepData = _kmlPrepDataService.convertAddress(responseFromServer); // update lat long to the database _prospectSerivce.updateProspect(prospect); } //run stored procedure to update db IEnumerable<JoinedProspect> joinedPospects = _joinedProspectService.getList(); // get results //create styles for placemarkers var doNotContactStyle = new Style(); doNotContactStyle.Id = "doNoContact"; doNotContactStyle.Icon = new IconStyle(); doNotContactStyle.Icon.Color = new Color32(255, 0, 255, 0); doNotContactStyle.Icon.ColorMode = ColorMode.Normal; doNotContactStyle.Icon.Icon = new IconStyle.IconLink(new Uri("http://maps.google.com/mapfiles/kml/pal3/icon47.png")); doNotContactStyle.Icon.Scale = 1.1; var currentCustomerStyle = new Style(); currentCustomerStyle.Id = "currentCustomer"; currentCustomerStyle.Icon = new IconStyle(); currentCustomerStyle.Icon.Color = new Color32(255, 0, 255, 0); currentCustomerStyle.Icon.ColorMode = ColorMode.Normal; currentCustomerStyle.Icon.Icon = new IconStyle.IconLink(new Uri("http://maps.google.com/mapfiles/kml/pal3/icon23.png")); currentCustomerStyle.Icon.Scale = 1.1; var cancelledCustomerStyle = new Style(); cancelledCustomerStyle.Id = "cancelledCustomer"; cancelledCustomerStyle.Icon = new IconStyle(); cancelledCustomerStyle.Icon.Color = new Color32(255, 0, 255, 0); cancelledCustomerStyle.Icon.ColorMode = ColorMode.Normal; cancelledCustomerStyle.Icon.Icon = new IconStyle.IconLink(new Uri("http://maps.google.com/mapfiles/kml/pal3/icon51.png")); cancelledCustomerStyle.Icon.Scale = 1.1; //add results to document foreach (JoinedProspect jp in joinedPospects) { // loop through and add information to kmldocument KmlPrepData kmlPrepData = new KmlPrepData(); _kmlDocumentService.addElementToKmlDocument(jp, document); } document.AddStyle(doNotContactStyle); document.AddStyle(currentCustomerStyle); document.AddStyle(cancelledCustomerStyle); //var serializer = new Serializer(); //serializer.Serialize(document); //System.Diagnostics.Debug.WriteLine(serializer.Xml); _kmlDocumentService.saveKmlDocument(document); return View(); }