Немного предыстории.
Однажды вечером мой сын подошел ко мне и сказал, что хочет поиграть в Марио.
Летом на даче у бабушки он любил «рубиться» в дождливую погоду.
А за окном просто дождь.
Не долго думая, я скачал первый 8-битный эмулятор консоли и игру для него.
Однако оказалось, что удовольствие от игры на клавиатуре было совсем не то.
Идти покупать джойстик было уже поздно.
И тогда я подумал, что смогу обойтись без этого.
У нас под рукой была старенькая Nokia Lumia; его размер и форма примерно соответствовали нашим потребностям.
Было решено написать джойстик.
Сын пошел рисовать рисунок на листе клетчатой бумаги, а папа пошел варить кофе и думать, как реализовать эту идею с наименьшими затратами времени.
Я решил пойти по пути наименьшего (с моей точки зрения) сопротивления.
Симулятору консоли необходимо указывать в настройках нажимаемые кнопки, а значит наше приложение должно нажимать кнопки.
Нажатия кнопок можно эмулировать с помощью старого доброго WINAPI. Последней идеей было клиент-серверное приложение.
Когда клиент (телефон) нажимает кнопку, он отправляет запрос на сервер, который, в свою очередь, в зависимости от того, что получено, эмулирует нажатие или отпускание кнопки клавиатуры.
Связь осуществляется через сокеты.
Все кажется простым.
Давайте начнем это делать.
Серверная часть
Мы разместили на форме текстовое поле с тем же именем textBox. В нем мы покажем, что происходит с телефона.
Начнем работать с сокетами.
Первым делом соединяем их:
Создаем сокет и буфер, в который все будет поступать:using System.Net; using System.Net.Sockets;
public partial class ServerForm : Form
{
private Socket _serverSocket, _clientSocket;
private byte[] _buffer;
Мы пишем функцию, которая запускает наш сервер.
private void StartServer()
{
try
{
_serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
_serverSocket.Bind(new IPEndPoint(IPAddress.Any, 3333));
_serverSocket.Listen(0);
_serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), null);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
И соответственно, начинаем с самого начала.
public ServerForm()
{
InitializeComponent();
Теги: #C++ #джойстик #программирование #.
NET #C++
-
Случайные Числа. Возьми Два
19 Oct, 24 -
Android, Huawei И Логи
19 Oct, 24 -
И Все Же Спам Работает
19 Oct, 24