منفذ C++ لمكتبة الشبكات الشهيرة LiteNetLib مكتوب بلغة C#
اعتبارًا من الآن، يمكن إنشاء المكتبة باستخدام MSVC على نظام التشغيل Windows ومع مجلس التعاون الخليجي على Linux. تم التخطيط لدعم OS X في الإصدارات المستقبلية.
من أجل إنشاء مشروع نموذجي وتشغيله، استخدم الأوامر التالية في Powershell لنظام التشغيل Windows:
git clone [email protected]:Revan600/LiteNetLibPP.git
cd LiteNetLibPP
mkdir build
cd build
cmake ../
cmake --build .
.Debuglnl_example_server.exe
.Debuglnl_example_client.exe
أو في باش لنظام التشغيل Linux:
git clone [email protected]:Revan600/LiteNetLibPP.git
cd LiteNetLibPP
mkdir build
cd build
cmake ../
make
./lnl_example_server
./lnl_example_client
بعد ذلك يجب أن تكون قادرًا على الاتصال بخادم الاختبار عبر المضيف المحلي:4499 (أو عبر عنوان IP العام الخاص بك)
تم تنفيذ جميع ميزات LiteNetLib باستثناء ما يلي:
لعبة بينج بونج بسيطة مع 1000 عميل (معيار الخادم): لم تتم ملاحظة أي انقطاع في الحزم أو الاتصال أثناء الاختبارات (لكنني متأكد من وجود بعض الأخطاء، لذا لا تتردد في ملء المشكلة)
فيما يلي مثال بسيط للعميل والخادم والذي تم استخدامه في اختبارات الأداء. يمكن العثور على المزيد من الأمثلة هنا
# include < lnl/lnl.h >
class my_listener : public lnl ::net_event_listener {
public:
void on_network_receive (std::shared_ptr<lnl::net_peer>& peer, lnl::net_data_reader& reader, uint8_t channelNumber,
lnl::DELIVERY_METHOD deliveryMethod) override {
static lnl::net_data_writer writer;
int32_t value;
if (!reader. try_read (value)) {
printf ( " cannot read value n " );
return ;
}
writer. reset ();
value++;
writer. write (value);
peer-> send (writer, lnl::DELIVERY_METHOD::RELIABLE_ORDERED);
}
void on_connection_request (std::shared_ptr<lnl::net_connection_request>& request) override {
request-> accept ();
}
};
int main () {
lnl::initialize ();
my_listener listener;
lnl::net_manager server (&listener);
server. start ( 4499 );
while (server. is_running ()) {
server. poll_events ();
}
return 0 ;
}
# include < lnl/lnl.h >
class my_listener : public lnl ::net_event_listener {
public:
void on_network_receive (std::shared_ptr<lnl::net_peer>& peer, lnl::net_data_reader& reader, uint8_t channelNumber,
lnl::DELIVERY_METHOD deliveryMethod) override {
static lnl::net_data_writer writer;
int32_t value;
if (!reader. try_read (value)) {
printf ( " cannot read value n " );
return ;
}
writer. reset ();
printf ( " %i n " , value);
value++;
writer. write (value);
peer-> send (writer, lnl::DELIVERY_METHOD::RELIABLE_ORDERED);
}
void on_connection_request (std::shared_ptr<lnl::net_connection_request>& request) override {
request-> accept ();
}
};
int main () {
lnl::initialize ();
my_listener listener;
lnl::net_manager client (&listener);
lnl::net_address address ( " localhost " , 4499 );
lnl::net_data_writer writer;
client. start ();
client. connect (address, writer);
while (client. is_running ()) {
client. poll_events ();
}
return 0 ;
}