Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Net.Sockets;
- using System.IO;
- using System.Threading;
- namespace EurosimNetworkClient
- {
- class ProgramItem
- {
- public double Distance;
- public double Angle;
- public double Time;
- public string ActuatorCommand;
- public string Exec()
- {
- if (ActuatorCommand == null)
- return
- "<Action>" +
- "<NextRequestInterval>" + Time + "</NextRequestInterval>" +
- "<ArcMovement><item0>" +
- "<Distance>" + Distance + "</Distance>" +
- "<Rotation>" + Angle + "</Rotation>" +
- "<TotalTime>" + Time + "</TotalTime>" +
- "</item0></ArcMovement>"+
- "</Action>";
- return
- "<Action>"+
- "<NextRequestInterval>" + Time +"</NextRequestInterval>"+
- "<ActuatorCommands><item0>" + ActuatorCommand +"</item0></ActuatorCommands>"+
- "</Action>";
- }
- }
- class EurosimNetworkClient
- {
- #region Простейшая программа для робота
- static readonly List<ProgramItem> program = new List<ProgramItem>();
- private const double linSpeed = 19.99;
- private const double andSpeed = 44;
- static void Mov(double distance)
- {
- program.Add(new ProgramItem { Distance = distance, Time = Math.Abs(distance / linSpeed )});
- }
- static void Rot(double angle)
- {
- program.Add(new ProgramItem { Angle = angle, Time = Math.Abs(angle / andSpeed) });
- }
- static void Act(string cmd)
- {
- program.Add(new ProgramItem { ActuatorCommand = cmd, Time = 0.5 });
- }
- static void End()
- {
- program.Add(new ProgramItem { Time = 10000 });
- }
- #endregion
- static Socket socket;
- public static string Read()
- {
- var buffer = new byte[1000000];
- var length = socket.Receive(buffer);
- var str = Encoding.UTF8.GetString(buffer, 0, length);
- return str;
- }
- public static void Write(string str)
- {
- socket.Send(Encoding.UTF8.GetBytes(str));
- }
- static void Main(string[] args)
- {
- var add = args[0];
- var port = int.Parse(args[1]);
- Console.Write("Sending hello request... ");
- socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- while (true)
- {
- try
- {
- socket.Connect(add, port);
- break;
- }
- catch
- {
- Thread.Sleep(100);
- }
- }
- Write(string.Format(
- "<HelloEurosim>" +
- "<Name>{0}</Name>"+
- "<Affiliation>{1}</Affiliation>"+
- "<Email>{2}</Email>"+
- "<City>{3}</City>"+
- "<Position>Left</Position>" +
- "<Opponent>Nocturnal</Opponent>" +
- "</HelloEurosim>",
- "", "", "", ""));//TODO.
- Console.WriteLine("OK");
- var helloReply = Read();
- Console.WriteLine("Reply:\n" + helloReply);
- Mov(50);
- Rot(-90);
- Mov(56);
- Rot(-90);
- Mov(35);
- Act("Grip");
- Act("Raise");
- Mov(-40);
- Rot(90);
- Mov(10);
- Act("Release");
- End();
- while (true)
- {
- var str = Read();
- var begin = str.IndexOf("<");
- var end = str.IndexOf(">");
- var header = str.Substring(begin+1,end-begin-1);
- if (header == "Feedback")
- {
- Console.ForegroundColor = ConsoleColor.Green;
- Console.WriteLine("Finished!");
- using (var fs = new StreamWriter("feedback.txt"))
- {
- fs.Write(str);
- }
- break;
- }
- if (header == "Error")
- {
- Console.ForegroundColor = ConsoleColor.Red;
- Console.WriteLine(str);
- break;
- }
- Console.WriteLine(str);
- if (program.Count>0)
- {
- var com = program[0].Exec();
- Console.WriteLine(com);
- socket.Send(Encoding.UTF8.GetBytes(com));
- program.Remove(program[0]);
- }
- }
- Console.ReadLine();
- }
- }
- }
Add Comment
Please, Sign In to add comment