Guest User

Untitled

a guest
Jul 19th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.99 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Net.Sockets;
  5. using System.IO;
  6. using System.Threading;
  7.  
  8. namespace EurosimNetworkClient
  9. {
  10.     class ProgramItem
  11.     {
  12.         public double Distance;
  13.         public double Angle;
  14.         public double Time;
  15.         public string ActuatorCommand;
  16.         public string Exec()
  17.         {
  18.             if (ActuatorCommand == null)
  19.                 return
  20.                 "<Action>" +
  21.                 "<NextRequestInterval>" + Time + "</NextRequestInterval>" +
  22.                 "<ArcMovement><item0>" +
  23.  
  24.                 "<Distance>" + Distance + "</Distance>" +
  25.                 "<Rotation>" + Angle + "</Rotation>" +
  26.                 "<TotalTime>" + Time + "</TotalTime>" +
  27.                 "</item0></ArcMovement>"+
  28.                 "</Action>";
  29.             return
  30.                 "<Action>"+
  31.                 "<NextRequestInterval>" + Time +"</NextRequestInterval>"+
  32.                 "<ActuatorCommands><item0>" + ActuatorCommand +"</item0></ActuatorCommands>"+
  33.                 "</Action>";
  34.         }
  35.     }
  36.  
  37.  
  38.     class EurosimNetworkClient
  39.     {  
  40.         #region Простейшая программа для робота
  41.         static readonly List<ProgramItem> program = new List<ProgramItem>();
  42.         private const double linSpeed = 19.99;
  43.         private const double andSpeed = 44;
  44.  
  45.  
  46.         static void Mov(double distance)
  47.         {
  48.             program.Add(new ProgramItem { Distance = distance, Time = Math.Abs(distance / linSpeed )});
  49.         }
  50.  
  51.         static void Rot(double angle)
  52.         {
  53.             program.Add(new ProgramItem { Angle = angle, Time = Math.Abs(angle / andSpeed) });
  54.         }
  55.  
  56.         static void Act(string cmd)
  57.         {
  58.             program.Add(new ProgramItem { ActuatorCommand = cmd, Time = 0.5 });
  59.         }
  60.  
  61.         static void End()
  62.         {
  63.             program.Add(new ProgramItem { Time = 10000 });
  64.         }
  65.  
  66.         #endregion
  67.  
  68.         static Socket socket;
  69.  
  70.         public static string Read()
  71.         {
  72.             var buffer = new byte[1000000];
  73.             var length = socket.Receive(buffer);
  74.             var str = Encoding.UTF8.GetString(buffer, 0, length);
  75.             return str;
  76.         }
  77.  
  78.         public static void Write(string str)
  79.         {
  80.             socket.Send(Encoding.UTF8.GetBytes(str));
  81.         }
  82.    
  83.         static void Main(string[] args)
  84.         {
  85.             var add = args[0];
  86.             var port = int.Parse(args[1]);
  87.             Console.Write("Sending hello request... ");
  88.             socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  89.             while (true)
  90.             {
  91.                 try
  92.                 {
  93.                     socket.Connect(add, port);
  94.                     break;
  95.                 }
  96.                 catch
  97.                 {
  98.                     Thread.Sleep(100);
  99.                 }
  100.             }
  101.             Write(string.Format(
  102.                 "<HelloEurosim>" +
  103.                     "<Name>{0}</Name>"+
  104.                     "<Affiliation>{1}</Affiliation>"+
  105.                     "<Email>{2}</Email>"+
  106.                     "<City>{3}</City>"+
  107.                     "<Position>Left</Position>" +
  108.                     "<Opponent>Nocturnal</Opponent>" +
  109.                 "</HelloEurosim>",
  110.                    "", "", "", ""));//TODO.
  111.             Console.WriteLine("OK");
  112.  
  113.             var helloReply = Read();
  114.             Console.WriteLine("Reply:\n" + helloReply);
  115.  
  116.             Mov(50);
  117.             Rot(-90);
  118.             Mov(56);
  119.             Rot(-90);
  120.             Mov(35);
  121.             Act("Grip");
  122.             Act("Raise");
  123.             Mov(-40);
  124.             Rot(90);
  125.             Mov(10);
  126.             Act("Release");
  127.             End();
  128.  
  129.             while (true)
  130.             {
  131.                 var str = Read();
  132.                 var begin = str.IndexOf("<");
  133.                 var end = str.IndexOf(">");
  134.                 var header = str.Substring(begin+1,end-begin-1);
  135.                
  136.                 if (header == "Feedback")
  137.                 {
  138.                     Console.ForegroundColor = ConsoleColor.Green;
  139.                     Console.WriteLine("Finished!");
  140.                     using (var fs = new StreamWriter("feedback.txt"))
  141.                     {
  142.                         fs.Write(str);
  143.                     }
  144.                     break;
  145.                 }
  146.                 if (header == "Error")
  147.                 {
  148.                     Console.ForegroundColor = ConsoleColor.Red;
  149.                     Console.WriteLine(str);
  150.                     break;
  151.                 }
  152.                 Console.WriteLine(str);
  153.  
  154.                 if (program.Count>0)
  155.                 {
  156.                     var com = program[0].Exec();
  157.                     Console.WriteLine(com);
  158.                     socket.Send(Encoding.UTF8.GetBytes(com));
  159.                     program.Remove(program[0]);
  160.                 }
  161.             }
  162.  
  163.             Console.ReadLine();
  164.         }
  165.     }
  166. }
Add Comment
Please, Sign In to add comment