Переписанная рабочая версия

Переделал код c++/cli на новый лад как в c# client
This commit is contained in:
Dizel 2025-04-09 15:49:27 +03:00
parent 1558429ad0
commit 26fc24ae0d
33 changed files with 576 additions and 217 deletions

216
DroneClientCpp/Drone.h Normal file
View File

@ -0,0 +1,216 @@
#pragma once
#include "DroneData.h"
#include <Windows.h>
#include <vcclr.h>
#using <System.dll>
#using <mscorlib.dll>
using namespace System;
using namespace System::Collections::Generic;
using namespace System::Runtime::InteropServices;
namespace DroneClient {
public ref class Drone
{
public:
float AccX, AccY, AccZ;
float GyrX, GyrY, GyrZ;
float PosX, PosY;
float LaserRange;
float MotorUL, MotorUR, MotorDL, MotorDR;
static array<Byte>^ GetBytes(Object^ data)
{
int size = Marshal::SizeOf(data);
array<Byte>^ arr = gcnew array<Byte>(size);
IntPtr ptr = IntPtr::Zero;
try
{
ptr = Marshal::AllocHGlobal(size);
Marshal::StructureToPtr(data, ptr, true);
Marshal::Copy(ptr, arr, 0, size);
}
finally
{
Marshal::FreeHGlobal(ptr);
}
return arr;
}
static Object^ FromBytes(array<Byte>^ arr, Type^ type)
{
Object^ mem = gcnew Object();
int size = Marshal::SizeOf(type);
IntPtr ptr = IntPtr::Zero;
try
{
ptr = Marshal::AllocHGlobal(size);
Marshal::Copy(arr, 0, ptr, size);
mem = Marshal::PtrToStructure(ptr, type);
}
finally
{
Marshal::FreeHGlobal(ptr);
}
return mem;
}
private:
array<Byte>^ SendDataMotor4()
{
DroneData::DataMotor4 mot4;
mot4.Head.Size = Marshal::SizeOf(DroneData::DataMotor4::typeid);
mot4.Head.Mode = DroneData::DataMode::Response;
mot4.Head.Type = DroneData::DataType::DataMotor4;
mot4.UL = MotorUL;
mot4.UR = MotorUR;
mot4.DL = MotorDL;
mot4.DR = MotorDR;
return GetBytes(mot4);
}
array<Byte>^ RecvDataIMU(array<Byte>^ data)
{
DroneData::DataIMU imu = (DroneData::DataIMU)FromBytes(data, DroneData::DataIMU::typeid);
AccX = imu.Acc.X; AccY = imu.Acc.Y; AccZ = imu.Acc.Z;
GyrX = imu.Gyr.X; GyrY = imu.Gyr.Y; GyrZ = imu.Gyr.Z;
return gcnew array<Byte>(0);
}
array<Byte>^ RecvDataPos(array<Byte>^ data)
{
DroneData::DataPos pos = (DroneData::DataPos)FromBytes(data, DroneData::DataPos::typeid);
PosX = pos.Local.X; PosY = pos.Local.Y;
LaserRange = pos.LiDAR;
return gcnew array<Byte>(0);
}
array<Byte>^ ClientRequestResponse(DroneData::DataHead head, array<Byte>^ body)
{
array<Byte>^ zero = gcnew array<Byte>(0);
switch (head.Type)
{
case DroneData::DataType::DataIMU:
if (head.Mode == DroneData::DataMode::Request)
{
return zero; // Запрос данных (не реализовано)
}
else
{
return RecvDataIMU(body); // Пришли данные
}
case DroneData::DataType::DataPos:
if (head.Mode == DroneData::DataMode::Request)
{
return zero; // Запрос данных (не реализовано)
}
else
{
return RecvDataPos(body); // Пришли данные
}
case DroneData::DataType::DataMotor4:
if (head.Mode == DroneData::DataMode::Request)
{
return SendDataMotor4(); // Запрос данных
}
else
{
return zero; // Пришли данные (не реализовано)
}
}
return zero;
}
literal int DroneStreamCount = 512;
array<Byte>^ DroneStreamData = gcnew array<Byte>(DroneStreamCount);
int DroneStreamIndex = 0;
DroneData::DataHead DroneStreamHead; // Исправлено: без явной инициализации
public:
// Конструктор для явной инициализации
Drone()
{
DroneStreamHead.Mode = DroneData::DataMode::None;
DroneStreamHead.Size = 0;
DroneStreamHead.Type = DroneData::DataType::None;
}
System::Collections::Generic::List<array<Byte>^>^ DataStream(array<Byte>^ data, int size)
{
System::Collections::Generic::List<array<Byte>^>^ ret = gcnew System::Collections::Generic::List<array<Byte>^>();
if (data == nullptr) return ret; // Последовательность не сформирована
if (size + DroneStreamIndex > DroneStreamCount) return nullptr; // Ошибка переполнения
Array::Copy(data, 0, DroneStreamData, DroneStreamIndex, size);
DroneStreamIndex += size;
while (true)
{
if (DroneStreamHead.Size == 0) // Заголовок еще не получен
{
if (DroneStreamIndex < DroneData::DataHead::StrLen) return ret;
DroneStreamHead = (DroneData::DataHead)FromBytes(DroneStreamData, DroneData::DataHead::typeid);
}
if (DroneStreamHead.Size > DroneStreamIndex) break; // Пакет еще не полный
array<Byte>^ body = gcnew array<Byte>(DroneStreamHead.Size);
Array::Copy(DroneStreamData, 0, body, 0, DroneStreamHead.Size);
int shift = DroneStreamHead.Size;
DroneStreamIndex -= shift;
Array::Copy(DroneStreamData, shift, DroneStreamData, 0, DroneStreamIndex); // Сдвиг массива
DroneStreamHead.Size = 0; // Сброс заголовка
ret->Add(ClientRequestResponse(DroneStreamHead, body));
}
return ret;
}
array<Byte>^ SendRequest()
{
DroneData::DataHead imu;
imu.Size = DroneData::DataHead::StrLen;
imu.Mode = DroneData::DataMode::Request;
imu.Type = DroneData::DataType::DataIMU;
DroneData::DataHead pos;
pos.Size = DroneData::DataHead::StrLen;
pos.Mode = DroneData::DataMode::Request;
pos.Type = DroneData::DataType::DataPos;
array<Byte>^ si = GetBytes(imu);
array<Byte>^ sp = GetBytes(pos);
array<Byte>^ sm = SendDataMotor4();
array<Byte>^ send = gcnew array<Byte>(si->Length + sp->Length + sm->Length);
Array::Copy(si, 0, send, 0, si->Length);
Array::Copy(sp, 0, send, si->Length, sp->Length);
Array::Copy(sm, 0, send, si->Length + sp->Length, sm->Length);
return send;
}
};
}

View File

@ -5,8 +5,6 @@ VisualStudioVersion = 17.12.35527.113
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DroneClientCpp", "DroneClientCpp.vcxproj", "{690C304C-A70B-4B0F-BF61-8C51290BF444}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DroneClientCpp", "DroneClientCpp.vcxproj", "{690C304C-A70B-4B0F-BF61-8C51290BF444}"
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestClientConnection", "..\TestClientConnection\TestClientConnection.vcxproj", "{B7CC5245-B628-40E9-A9A0-A904E2BF25EA}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64 Debug|x64 = Debug|x64
@ -23,14 +21,6 @@ Global
{690C304C-A70B-4B0F-BF61-8C51290BF444}.Release|x64.Build.0 = Release|x64 {690C304C-A70B-4B0F-BF61-8C51290BF444}.Release|x64.Build.0 = Release|x64
{690C304C-A70B-4B0F-BF61-8C51290BF444}.Release|x86.ActiveCfg = Release|Win32 {690C304C-A70B-4B0F-BF61-8C51290BF444}.Release|x86.ActiveCfg = Release|Win32
{690C304C-A70B-4B0F-BF61-8C51290BF444}.Release|x86.Build.0 = Release|Win32 {690C304C-A70B-4B0F-BF61-8C51290BF444}.Release|x86.Build.0 = Release|Win32
{B7CC5245-B628-40E9-A9A0-A904E2BF25EA}.Debug|x64.ActiveCfg = Debug|x64
{B7CC5245-B628-40E9-A9A0-A904E2BF25EA}.Debug|x64.Build.0 = Debug|x64
{B7CC5245-B628-40E9-A9A0-A904E2BF25EA}.Debug|x86.ActiveCfg = Debug|Win32
{B7CC5245-B628-40E9-A9A0-A904E2BF25EA}.Debug|x86.Build.0 = Debug|Win32
{B7CC5245-B628-40E9-A9A0-A904E2BF25EA}.Release|x64.ActiveCfg = Release|x64
{B7CC5245-B628-40E9-A9A0-A904E2BF25EA}.Release|x64.Build.0 = Release|x64
{B7CC5245-B628-40E9-A9A0-A904E2BF25EA}.Release|x86.ActiveCfg = Release|Win32
{B7CC5245-B628-40E9-A9A0-A904E2BF25EA}.Release|x86.Build.0 = Release|Win32
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

View File

@ -121,7 +121,8 @@
<ClCompile Include="FormMain.cpp" /> <ClCompile Include="FormMain.cpp" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="DroneClient.h" /> <ClInclude Include="Drone.h" />
<ClInclude Include="DroneData.h" />
<ClInclude Include="FormMain.h"> <ClInclude Include="FormMain.h">
<FileType>CppForm</FileType> <FileType>CppForm</FileType>
</ClInclude> </ClInclude>

View File

@ -26,7 +26,10 @@
<ClInclude Include="NetClient.h"> <ClInclude Include="NetClient.h">
<Filter>Файлы заголовков</Filter> <Filter>Файлы заголовков</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="DroneClient.h"> <ClInclude Include="DroneData.h">
<Filter>Файлы заголовков</Filter>
</ClInclude>
<ClInclude Include="Drone.h">
<Filter>Файлы заголовков</Filter> <Filter>Файлы заголовков</Filter>
</ClInclude> </ClInclude>
</ItemGroup> </ItemGroup>

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<ProjectOutputs>
<ProjectOutput>
<FullPath>C:\Projects\Simulator\DroneClientCpp\x64\Debug\DroneClientCpp.exe</FullPath>
</ProjectOutput>
</ProjectOutputs>
<ContentFiles />
<SatelliteDlls />
<NonRecipeFileRefs />
</Project>

View File

@ -0,0 +1,3 @@
 FormMain.cpp
FormMain.obj : обнаружен модуль MSIL; для MSIL последовательная компоновка отключена; выполняется полная компоновка
DroneClientCpp.vcxproj -> C:\Projects\Simulator\DroneClientCpp\x64\Debug\DroneClientCpp.exe

View File

@ -0,0 +1,2 @@
C:\Projects\Simulator\DroneClientCpp\FormMain.cpp;C:\Projects\Simulator\DroneClientCpp\DroneClientCpp\x64\Debug\FormMain.obj
C:\Projects\Simulator\DroneClientCpp\DroneClientCpp\x64\Debug\.NETFramework,Version=v4.7.2.AssemblyAttributes.cpp;C:\Projects\Simulator\DroneClientCpp\DroneClientCpp\x64\Debug\.NETFramework,Version=v4.7.2.AssemblyAttributes.obj

View File

@ -0,0 +1,2 @@
PlatformToolSet=v143:VCToolArchitecture=Native64Bit:VCToolsVersion=14.42.34433:TargetPlatformVersion=10.0.22621.0:TargetFrameworkVersion=v4.7.2::EnableManagedIncrementalBuild=true:
Debug|x64|C:\Projects\Simulator\DroneClientCpp\|

View File

@ -0,0 +1,4 @@
^C:\PROJECTS\SIMULATOR\DRONECLIENTCPP\FORMMAIN.RESX
C:\Projects\Simulator\DroneClientCpp\DroneClientCpp.vcxproj
^C:\PROJECTS\SIMULATOR\DRONECLIENTCPP\FORMMAIN.RESX
C:\Projects\Simulator\DroneClientCpp\DroneClientCpp.vcxproj

View File

@ -0,0 +1,4 @@
^C:\PROJECTS\SIMULATOR\DRONECLIENTCPP\FORMMAIN.RESX
C:\PROJECTS\SIMULATOR\DRONECLIENTCPP\DRONECLIENTCPP.VCXPROJ
^C:\PROJECTS\SIMULATOR\DRONECLIENTCPP\FORMMAIN.RESX
C:\PROJECTS\SIMULATOR\DRONECLIENTCPP\DRONECLIENTCPP.VCXPROJ

View File

@ -0,0 +1,4 @@
^C:\PROJECTS\SIMULATOR\DRONECLIENTCPP\FORMMAIN.RESX
C:\PROJECTS\SIMULATOR\DRONECLIENTCPP\X64\DEBUG\DRONECLIENTCPP.EXE
^C:\PROJECTS\SIMULATOR\DRONECLIENTCPP\FORMMAIN.RESX
C:\PROJECTS\SIMULATOR\DRONECLIENTCPP\X64\DEBUG\DRONECLIENTCPP.EXE

View File

@ -0,0 +1 @@
^C:\PROJECTS\SIMULATOR\DRONECLIENTCPP\DRONECLIENTCPP\X64\DEBUG\.NETFRAMEWORK,VERSION=V4.7.2.ASSEMBLYATTRIBUTES.OBJ|C:\PROJECTS\SIMULATOR\DRONECLIENTCPP\DRONECLIENTCPP\X64\DEBUG\FORMMAIN.OBJ

View File

@ -0,0 +1,3 @@
C:\Projects\Simulator\DroneClientCpp\DroneClientCpp\x64\Debug\DroneClientCpp.vcxproj.AssemblyReference.cache
C:\Projects\Simulator\DroneClientCpp\DroneClientCpp\x64\Debug\DroneClientCpp.FormMain.resources
C:\Projects\Simulator\DroneClientCpp\DroneClientCpp\x64\Debug\DroneClientCpp.vcxproj.GenerateResource.cache

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,77 @@
#pragma once
#include <Windows.h>
#include <vcclr.h>
using namespace System;
using namespace System::Runtime::InteropServices;
namespace DroneData {
public enum class DataMode : unsigned short
{
None = 0, Response = 1, Request = 2
};
public enum class DataType : unsigned short
{
None = 0, Head = 1,
DataIMU = 1001, DataPos = 1002,
DataMotor4 = 2001, DataMotor6 = 2002
};
public value struct DataHead
{
public:
int Size;
DataMode Mode;
DataType Type;
static const int StrLen = sizeof(DataHead);
};
public value struct XYZ
{
public:
float X, Y, Z;
};
public value struct DataIMU
{
public:
DataHead Head;
XYZ Acc, Gyr, Mag;
static const int StrLen = sizeof(DataIMU);
};
public value struct DataPos
{
public:
DataHead Head;
XYZ Local;
float LiDAR;
static const int StrLen = sizeof(DataPos);
};
public value struct DataMotor4
{
public:
DataHead Head;
unsigned long long Count;
float UL, UR, DL, DR;
static const int StrLen = sizeof(DataMotor4);
};
public value struct DataMotor6
{
public:
DataHead Head;
unsigned long long Count;
float UL, UR, LL, RR, DL, DR;
static const int StrLen = sizeof(DataMotor6);
};
}

Binary file not shown.

View File

@ -1,5 +1,4 @@
// NetClient.h #pragma once
#pragma once
#include <Windows.h> #include <Windows.h>
#include <vcclr.h> #include <vcclr.h>
@ -10,247 +9,140 @@
using namespace System; using namespace System;
using namespace System::Net; using namespace System::Net;
using namespace System::Net::Sockets; using namespace System::Net::Sockets;
using namespace System::Runtime::InteropServices;
namespace DroneSimulator namespace DroneSimulator {
{
public ref class NetClient public ref class NetClient
{ {
public: public:
// Вложенный класс для данных подключения
ref class ConnectData ref class ConnectData
{ {
public: public:
property bool Connect; bool Connect;
property Socket^ Server; Socket^ Server;
// Добавлен конструктор
ConnectData(bool connect, Socket^ server)
{
Connect = connect;
Server = server;
}
}; };
// Вложенный класс для данных приема
ref class ReceiveData ref class ReceiveData
{ {
public: public:
property array<Byte>^ Buffer; array<Byte>^ Buffer;
property int Size; int Size;
property Socket^ Server; Socket^ Server;
// Добавлен конструктор
ReceiveData(array<Byte>^ buffer, int size, Socket^ server)
{
Buffer = buffer;
Size = size;
Server = server;
}
}; };
// Состояния клиента
enum class ClientState { Error, Connected, Stop };
// Делегат для callback-функций
delegate void ClientCallback(Object^ o);
NetClient()
{
Connected = false;
ServerSocket = nullptr;
DataServer = gcnew ServerData();
}
~NetClient()
{
// Вызываем Close() для корректного закрытия соединения
Close();
// Дополнительная очистка ресурсов
if (DataServer != nullptr)
{
// Очищаем буфер данных
DataServer->buffer = nullptr;
DataServer = nullptr;
}
// Обнуляем callback-делегаты
ConnectionCallback = nullptr;
ReceiveCallback = nullptr;
}
ClientState Connect(String^ addr, int port, ClientCallback^ connectionCallback, ClientCallback^ receiveCallback)
{
if (Connected)
{
Disconnect();
return ClientState::Stop;
}
ConnectionCallback = connectionCallback;
ReceiveCallback = receiveCallback;
try
{
IPEndPoint^ ep = gcnew IPEndPoint(IPAddress::Parse(addr), port);
ServerSocket = gcnew Socket(AddressFamily::InterNetwork, SocketType::Stream, ProtocolType::Tcp);
ServerSocket->Connect(ep);
Connected = true;
// Уведомление о подключении
ConnectData^ connectData = gcnew ConnectData();
connectData->Connect = true;
connectData->Server = ServerSocket;
ConnectionCallback(connectData);
// Начало приема данных
ReceiveData^ receiveData = gcnew ReceiveData();
receiveData->Buffer = DataServer->buffer;
receiveData->Size = ServerData::size;
receiveData->Server = ServerSocket;
ServerSocket->BeginReceive(DataServer->buffer, 0, ServerData::size, SocketFlags::None, gcnew AsyncCallback(this, &NetClient::ReadCallback), receiveData);
return ClientState::Connected;
}
catch (Exception^)
{
if (ServerSocket != nullptr)
{
ServerSocket->Close();
}
return ClientState::Error;
}
}
void Close()
{
Disconnect();
}
private: private:
ref class ServerData ref class ServerData
{ {
public: public:
static const int size = 1024; literal int size = 1024;
array<Byte>^ buffer = gcnew array<Byte>(size); array<Byte>^ buffer = gcnew array<Byte>(size);
}; };
bool Connected; bool Connected = false;
Socket^ ServerSocket; Socket^ ServerSocket = nullptr;
ServerData^ DataServer; ServerData^ DataServer = gcnew ServerData();
public:
delegate void ClientCallback(Object^ o);
private:
ClientCallback^ ConnectionCallback; ClientCallback^ ConnectionCallback;
ClientCallback^ ReceiveCallback; ClientCallback^ ReceiveCallback;
void Disconnect() public:
enum class ClientState { Error, Connected, Stop };
ClientState Connect(String^ Addr, int Port, ClientCallback^ Connection, ClientCallback^ Receive)
{ {
if (ServerSocket != nullptr) if (Connected)
{ {
try { ServerSocket->Shutdown(SocketShutdown::Both); } Close();
catch (...) {} return ClientState::Stop;
ServerSocket->Close();
ServerSocket = nullptr;
} }
ConnectionCallback = Connection;
ReceiveCallback = Receive;
IPEndPoint^ ep = gcnew IPEndPoint(IPAddress::Parse(Addr), Port);
ServerSocket = gcnew Socket(AddressFamily::InterNetwork, SocketType::Stream, ProtocolType::Tcp);
try { ServerSocket->Connect(ep); }
catch (...) { ServerSocket->Close(); return ClientState::Error; }
Connected = true;
// Исправленный вызов с конструктором
ConnectionCallback(gcnew ConnectData(true, ServerSocket));
// Исправленный вызов с конструктором
ReceiveData^ receiveData = gcnew ReceiveData(DataServer->buffer, ServerData::size, ServerSocket);
try { ServerSocket->BeginReceive(DataServer->buffer, 0, ServerData::size, SocketFlags::None, gcnew AsyncCallback(this, &NetClient::ReadCallback), receiveData); }
catch (...) {}
return ClientState::Connected;
}
void Close()
{
try { ServerSocket->Shutdown(SocketShutdown::Both); }
catch (...) {}
ServerSocket->Close();
Connected = false; Connected = false;
} }
void Send(array<Byte>^ data)
{
if (ServerSocket != nullptr && Connected)
{
try { ServerSocket->Send(data); }
catch (...) {}
}
}
private:
void ReadCallback(IAsyncResult^ ar) void ReadCallback(IAsyncResult^ ar)
{ {
try ReceiveData^ cd = (ReceiveData^)ar->AsyncState;
if (cd == nullptr) return;
int bytes = 0;
try { bytes = ServerSocket->EndReceive(ar); }
catch (...) {}
if (bytes == 0)
{ {
// Проверка на null входного параметра ServerSocket->Close();
if (ar == nullptr) return; Connected = false;
// Безопасное приведение типа if (ServerSocket != nullptr)
ReceiveData^ cd = dynamic_cast<ReceiveData^>(ar->AsyncState);
if (cd == nullptr || ServerSocket == nullptr || !ServerSocket->Connected)
{ {
Disconnect(); // Исправленный вызов с конструктором
return; ConnectionCallback(gcnew ConnectData(false, nullptr));
} }
int bytes = 0; return;
try
{
bytes = ServerSocket->EndReceive(ar);
}
catch (ObjectDisposedException^)
{
// Сокет был закрыт
Disconnect();
return;
}
catch (SocketException^ ex)
{
// Логирование ошибки сокета
System::Diagnostics::Debug::WriteLine(
"Socket receive error: " + ex->Message);
Disconnect();
return;
}
catch (...)
{
Disconnect();
return;
}
// Проверка на разрыв соединения
if (bytes == 0)
{
Disconnect();
if (ConnectionCallback != nullptr)
{
ConnectData^ disconnectData = gcnew ConnectData();
disconnectData->Connect = false;
disconnectData->Server = nullptr;
ConnectionCallback(disconnectData);
}
return;
}
// Вызов callback получения данных
if (ReceiveCallback != nullptr && cd->Buffer != nullptr)
{
try
{
ReceiveCallback(cd);
}
catch (Exception^ ex)
{
System::Diagnostics::Debug::WriteLine(
"ReceiveCallback error: " + ex->Message);
}
}
// Продолжаем прием данных
if (ServerSocket != nullptr && ServerSocket->Connected)
{
try
{
IAsyncResult^ result = ServerSocket->BeginReceive(
cd->Buffer,
0,
ServerData::size,
SocketFlags::None,
gcnew AsyncCallback(this, &NetClient::ReadCallback),
cd);
// Проверка на ошибку асинхронной операции
if (result == nullptr)
{
Disconnect();
}
}
catch (ObjectDisposedException^)
{
Disconnect();
}
catch (SocketException^ ex)
{
System::Diagnostics::Debug::WriteLine(
"BeginReceive error: " + ex->Message);
Disconnect();
}
catch (...)
{
Disconnect();
}
}
}
catch (Exception^ ex)
{
System::Diagnostics::Debug::WriteLine(
"ReadCallback general error: " + ex->Message);
Disconnect();
} }
// Исправленный вызов с конструктором
ReceiveCallback(gcnew ReceiveData(cd->Buffer, bytes, ServerSocket));
try { ServerSocket->BeginReceive(cd->Buffer, 0, ServerData::size, SocketFlags::None, gcnew AsyncCallback(this, &NetClient::ReadCallback), cd); }
catch (...) {}
} }
}; };
} }

Binary file not shown.

View File

@ -0,0 +1,140 @@
DroneClientCpp.FormMain.resources - Embedded, ContainedInManifestFile,
ImageRuntimeVersion: v4.0.30319
Assembly DroneClientCpp, Version=0.0.*, Culture=Инвариантный язык (Инвариантная страна):
hash=SHA1, flags=PublicKey
Assembly mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:
hash=None, flags=None
Assembly System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:
hash=None, flags=None
Assembly System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:
hash=None, flags=None
Assembly System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a:
hash=None, flags=None
Assembly System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:
hash=None, flags=None
Assembly System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:
hash=None, flags=None
Assembly System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a:
hash=None, flags=None
Struct DroneData.DataHead: AutoLayout, AnsiClass, Class, Public, SequentialLayout, Sealed, BeforeFieldInit
:System.ValueType
Fields:
Int32 Size : Public
DroneData.DataMode Mode : Public
DroneData.DataType Type : Public
Int32 StrLen IsConst : Public, Static
Struct DroneData.XYZ: AutoLayout, AnsiClass, Class, Public, SequentialLayout, Sealed, BeforeFieldInit
:System.ValueType
Fields:
Single X : Public
Single Y : Public
Single Z : Public
Struct DroneData.DataIMU: AutoLayout, AnsiClass, Class, Public, SequentialLayout, Sealed, BeforeFieldInit
:System.ValueType
Fields:
DroneData.DataHead Head : Public
DroneData.XYZ Acc : Public
DroneData.XYZ Gyr : Public
DroneData.XYZ Mag : Public
Int32 StrLen IsConst : Public, Static
Struct DroneData.DataPos: AutoLayout, AnsiClass, Class, Public, SequentialLayout, Sealed, BeforeFieldInit
:System.ValueType
Fields:
DroneData.DataHead Head : Public
DroneData.XYZ Local : Public
Single LiDAR : Public
Int32 StrLen IsConst : Public, Static
Struct DroneData.DataMotor4: AutoLayout, AnsiClass, Class, Public, SequentialLayout, Sealed, BeforeFieldInit
:System.ValueType
Fields:
DroneData.DataHead Head : Public
UInt64 Count : Public
Single UL : Public
Single UR : Public
Single DL : Public
Single DR : Public
Int32 StrLen IsConst : Public, Static
Struct DroneData.DataMotor6: AutoLayout, AnsiClass, Class, Public, SequentialLayout, Sealed, BeforeFieldInit
:System.ValueType
Fields:
DroneData.DataHead Head : Public
UInt64 Count : Public
Single UL : Public
Single UR : Public
Single LL : Public
Single RR : Public
Single DL : Public
Single DR : Public
Int32 StrLen IsConst : Public, Static
Class DroneClient.Drone: AutoLayout, AnsiClass, Class, Public, BeforeFieldInit
Void .ctor(): PrivateScope, Public, HideBySig, SpecialName, RTSpecialName
Fields:
Single AccX : Public
Single AccY : Public
Single AccZ : Public
Single GyrX : Public
Single GyrY : Public
Single GyrZ : Public
Single PosX : Public
Single PosY : Public
Single LaserRange : Public
Single MotorUL : Public
Single MotorUR : Public
Single MotorDL : Public
Single MotorDR : Public
Methods:
GetBytes(Object): PrivateScope, Public, Static, HideBySig
FromBytes(Byte[], Type): PrivateScope, Public, Static, HideBySig
DataStream(Byte[], Int32): PrivateScope, Public, HideBySig
SendRequest(): PrivateScope, Public, HideBySig
Class DroneSimulator.NetClient: AutoLayout, AnsiClass, Class, Public, BeforeFieldInit
Void .ctor(): PrivateScope, Public, HideBySig, SpecialName, RTSpecialName
Methods:
Connect(String, Int32, ClientCallback, ClientCallback): PrivateScope, Public, HideBySig
Close(): PrivateScope, Public, HideBySig
Send(Byte[]): PrivateScope, Public, HideBySig
Class DroneSimulator.NetClient+ConnectData: AutoLayout, AnsiClass, Class, NestedPublic, BeforeFieldInit
Void .ctor(Boolean, System.Net.Sockets.Socket): PrivateScope, Public, HideBySig, SpecialName, RTSpecialName
Fields:
Boolean Connect : Public
System.Net.Sockets.Socket Server : Public
Class DroneSimulator.NetClient+ReceiveData: AutoLayout, AnsiClass, Class, NestedPublic, BeforeFieldInit
Void .ctor(Byte[], Int32, System.Net.Sockets.Socket): PrivateScope, Public, HideBySig, SpecialName, RTSpecialName
Fields:
Byte[] Buffer : Public
Int32 Size : Public
System.Net.Sockets.Socket Server : Public
Class DroneSimulator.NetClient+ClientCallback: AutoLayout, AnsiClass, Class, NestedPublic, Sealed, BeforeFieldInit
:System.MulticastDelegate
Void .ctor(System.Object, IntPtr): PrivateScope, Public, SpecialName, RTSpecialName
Methods:
Invoke(Object): PrivateScope, Public, Final, Virtual, VtableLayoutMask
BeginInvoke(Object, AsyncCallback, Object): PrivateScope, Public, Final, Virtual, VtableLayoutMask
EndInvoke(IAsyncResult): PrivateScope, Public, Final, Virtual, VtableLayoutMask
Struct DroneSimulator.NetClient+ClientState: AutoLayout, AnsiClass, Class, NestedPublic, Sealed, BeforeFieldInit
:System.Enum
Fields:
Int32 value__ : Public, SpecialName, RTSpecialName
ClientState Error = 0 : Public, Static, Literal, HasDefault
ClientState Connected = 1 : Public, Static, Literal, HasDefault
ClientState Stop = 2 : Public, Static, Literal, HasDefault
Class DroneClientCpp.FormMain: AutoLayout, AnsiClass, Class, Public, BeforeFieldInit
:System.Windows.Forms.Form
Void .ctor(): PrivateScope, Public, HideBySig, SpecialName, RTSpecialName
Struct DroneData.DataMode: AutoLayout, AnsiClass, Class, Public, Sealed, BeforeFieldInit
:System.Enum
Fields:
UInt16 value__ : Public, SpecialName, RTSpecialName
DroneData.DataMode None = 0 : Public, Static, Literal, HasDefault
DroneData.DataMode Response = 1 : Public, Static, Literal, HasDefault
DroneData.DataMode Request = 2 : Public, Static, Literal, HasDefault
Struct DroneData.DataType: AutoLayout, AnsiClass, Class, Public, Sealed, BeforeFieldInit
:System.Enum
Fields:
UInt16 value__ : Public, SpecialName, RTSpecialName
DroneData.DataType None = 0 : Public, Static, Literal, HasDefault
DroneData.DataType Head = 1 : Public, Static, Literal, HasDefault
DroneData.DataType DataIMU = 1001 : Public, Static, Literal, HasDefault
DroneData.DataType DataPos = 1002 : Public, Static, Literal, HasDefault
DroneData.DataType DataMotor4 = 2001 : Public, Static, Literal, HasDefault
DroneData.DataType DataMotor6 = 2002 : Public, Static, Literal, HasDefault

Binary file not shown.