مكتبة خفيفة الوزن للغاية وسهلة الاستخدام لتطبيقات عميل خادم عميل أو ببساطة في Java تقوم بجميع العمل من أجلك: إعداد الاتصال ، إعادة الاتصال ، المهلة ، الاحتفاظ بها في الخلفية. ما عليك سوى إخبار التطبيق بما يجب إرساله وتلقيه ، وسيحدث الباقي في حد ذاته. هذا هو السحر تقريبا!
جودة الكود وحالة البناء
import java . net . Socket ;
public class MyServer extends Server {
public MyServer ( int port ) {
super ( port );
}
@ Override
public void preStart () {
registerMethod ( "SOME_MESSAGE" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
doSomethingWith ( msg );
sendReply ( socket , "Hey, thanks for your message. Greetings!" )
}
});
}
}ما عليك سوى جعل الفصل الدراسي الخاص بك ، على سبيل المثال myserver تمديد الخادم ، ما عليك سوى استخدام المنشئ الأصلي وقم بتنفيذ طريقة PrestArt (). في طريقة بريستارت فقط أضف
registerMethod ( "IDENTIFIER" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
doSomethingWith ( msg , socket );
sendReply ( socket , "Some Reply" );
}
});لكل معرف من datapackge الخادم المستلم ، تريد الرد عليه.
مثال: لذلك إذا قمت بتسجيل "Ping" ورد قابلة للتنفيذ "Pong" للعميل ، فما عليك سوى التسجيل
registerMethod ( "PING" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
sendReply ( socket , "Pong" );
}
});وهذا كل شيء.
لمزيد من المعرفات للرد عليها ، فقط ضع هذه الخطوط عدة مرات في PrestArt (). لا تنس إرسال رد على العملاء الذين حصلت عليهم من Datapackge ، لأنهم سينتظرون حتى ينتهي العالم للرد منك.
مثال على خادم يبث وسيلة دردشة لجميع العملاء المتصلين:
registerMethod ( "Message" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
System . out . println ( "[Message] New chat message arrived, delivering to all the clients..." );
broadcastMessage ( msg ); //The broadcast to all the receivers
sendReply ( socket , String . valueOf ( reveicerCount )); //The reply (NECESSARY! unless you want the client to block while waiting for this package)
}
}); import java . net . Socket ;
public class MyClient extends Client {
public MyClient ( String id , String address , int port ) {
super ( id , address , port );
registerMethod ( "SOME_MESSAGE" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
System . out . println ( "Look! I got a new message from the server: " + msg . get ( 1 ));
}
});
start (); // Do not forget to start the client!
}
}فقط اجعل الفصل الخاص بك ، على سبيل المثال MyClient تمديد العميل ، ما عليك سوى استخدام المنشئ الأصلي. كلما كنت جاهزًا للعميل لتسجيل الدخول ، اتصل على (). سيقوم العميل بالاتصال بالخادم اعتمادًا على المعلمات المُنشأة وتسجيل نفسه على الخادم. من الآن فصاعدًا ، يمكن أن تتلقى رسائل من الخادم والبقاء على اتصال (وإعادة الاتصال إذا لزم الأمر) حتى تتصل بـ STOP ().
للرد على رسالة واردة ، فقط أضف
registerMethod ( "IDENTIFIER" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
doSomethingWith ( msg , socket );
}
});في مكان ما ، أقترح المنشئ نفسه ، لكل معرف رسالة تريد التعامل معها.
Exmaple لرسالة دردشة واردة من الخادم:
registerMethod ( "PING" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
System . out . println ( "Look! I got a new message from the server: " + msg . get ( 1 ));
// msg.get(1); should now return "Pong" in our example.
}
});يختلف عن العميل ، لن يتوقع الخادم الرد بشكل افتراضي. لذلك لا ترسل له دائمًا حزمة رد ، لأنه يحتاج إلى طراز غير محدد مسجل لذلك.
كخادم:
كعميل:
هناك بعض معالجات الأحداث (مثل OnConnectionGood () ، OnConnectionProblem () ، onclientregistered (...) ، وما إلى ذلك) يمكنك الكتابة فوق هذه الأحداث.
توفر فئات العميل والخادم كلاهما معالجات أحداث Onlog و OnLogerror ، والتي يمكن تجاوزها في التنفيذ إذا لم يكن (فقط) إخراج رسائل المعلومات ورسائل الخطأ (فقط) في وحدة التحكم.