คำเตือน: นี่คือโค้ดเวอร์ชันอัลฟ่า และไม่ควรนำไปใช้สำหรับการใช้งานจริง
ไลบรารีส่วนขยายสำหรับ Haxe เพื่อทำให้การตั้งค่าการเชื่อมต่อไคลเอนต์/เซิร์ฟเวอร์ง่ายขึ้น มีการสนับสนุนดังต่อไปนี้:
มีเลเยอร์การขนส่งที่รองรับสองเลเยอร์คือ TCP และ UDP ที่ hxnet ใช้ TCP มักใช้สำหรับบริการที่เชื่อถือได้ เช่น HTTP, FTP, Telnet และอื่นๆ อีกมากมาย UDP ไม่มีการเชื่อมต่อและใช้สำหรับข้อมูลที่ไม่น่าเชื่อถืออย่างรวดเร็วซึ่งเป็นประโยชน์สำหรับเกม
ด้านบนของเลเยอร์การขนส่งคือคลาสไคลเอนต์และเซิร์ฟเวอร์ สิ่งเหล่านี้จัดการกับการเชื่อมต่อแบบธรรมดา การส่ง/ดึงข้อมูล และข้อยกเว้น คลาส UDP ปลอมการเชื่อมต่อตามข้อมูลที่ได้รับจากที่อยู่ IP ที่แตกต่างกันและค่าการหมดเวลาเพื่อพิจารณาว่าเมื่อใดที่การเชื่อมต่อหลุด
เมื่อสร้างวัตถุไคลเอนต์หรือเซิร์ฟเวอร์คุณจะต้องส่งโปรโตคอลไป โปรโตคอลกำหนดการโต้ตอบเฉพาะระหว่างไคลเอนต์และเซิร์ฟเวอร์ ตัวอย่างเช่น คุณสามารถสร้างโปรโตคอลที่ใช้ RPC แบบกำหนดเองซึ่งจะเรียกใช้ฟังก์ชันบนเซิร์ฟเวอร์จากไคลเอ็นต์ได้อย่างง่ายดาย (หรือกลับกัน) อีกตัวอย่างหนึ่งของโปรโตคอลคือ HTTP ซึ่งสามารถสร้างการตอบกลับจากเซิร์ฟเวอร์ไปยังเบราว์เซอร์ได้
สมมติว่าคุณต้องการสร้างเซิร์ฟเวอร์ Telnet Echo พื้นฐาน เราสามารถทำได้โดยขยายโปรโตคอล Telnet และแทนที่ฟังก์ชัน lineReceived
class Echo extends hxnet.protocols. Telnet
{
override private function lineReceived ( line : String )
{
writeLine ( line );
}
static public function main ()
{
var server = new hxnet.tcp. Server ( new hxnet.base. Factory ( Echo ), 4000 );
server . start ();
}
}
ฟังก์ชันหลักจะสร้างอินสแตนซ์ของเซิร์ฟเวอร์ TCP (พอร์ต 4000) และใช้คลาส Factory พื้นฐานเพื่อสร้างอินสแตนซ์ใหม่ของ Echo สำหรับทุกการเชื่อมต่อไคลเอ็นต์ จากนั้นจะเรียก start
ซึ่งเป็นทางลัดสำหรับการฟังบนพอร์ตและอัปเดตอย่างไม่สิ้นสุด
คุณอาจต้องการเชื่อมต่อกับเซิร์ฟเวอร์เพื่อดึงข้อมูล ตามค่าเริ่มต้น hxnet จะบล็อกการเชื่อมต่อทั้งหมดซึ่งอาจเป็นปัญหากับแอปพลิเคชัน gui เนื่องจากจะล็อกการเรนเดอร์ เราสามารถแก้ไขได้โดยตั้งค่า blocking
เป็นเท็จ
class Client extends hxnet.protocols. Telnet
{
override private function lineReceived ( line : String )
{
trace ( line );
}
static public function main ()
{
var client = new hxnet.tcp. Client ();
client . protocol = new Client (); // set the protocol we want to use
client . connect ( " localhost " , 4000 );
client . blocking = false ; // important for gui clients
while ( true )
{
client . update ();
// add application logic here
}
}
}
ลิขสิทธิ์ (C) 2013-2014 แมตต์ Tuttle
อนุญาตให้บุคคลใดก็ตามที่ได้รับสำเนาของซอฟต์แวร์นี้และไฟล์เอกสารที่เกี่ยวข้อง ("ซอฟต์แวร์") อนุญาตโดยไม่เสียค่าใช้จ่าย เพื่อจัดการกับซอฟต์แวร์โดยไม่มีข้อจำกัด รวมถึงแต่ไม่จำกัดเพียงสิทธิ์ในการใช้ คัดลอก ปรับเปลี่ยน ผสาน เผยแพร่ แจกจ่าย ให้อนุญาตช่วง และ/หรือขายสำเนาของซอฟต์แวร์ และอนุญาตให้บุคคลที่ได้รับซอฟต์แวร์นี้สามารถทำได้ ภายใต้เงื่อนไขต่อไปนี้:
ประกาศเกี่ยวกับลิขสิทธิ์ข้างต้นและประกาศการอนุญาตนี้จะรวมอยู่ในสำเนาทั้งหมดหรือส่วนสำคัญของซอฟต์แวร์
ซอฟต์แวร์นี้มีให้ "ตามที่เป็น" โดยไม่มีการรับประกันใดๆ ทั้งโดยชัดแจ้งหรือโดยนัย ซึ่งรวมถึงแต่ไม่จำกัดเพียงการรับประกันความสามารถในการค้าขาย ความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ และการไม่ละเมิด ไม่ว่าในกรณีใดผู้เขียนหรือผู้ถือลิขสิทธิ์จะต้องรับผิดต่อการเรียกร้องค่าเสียหายหรือความรับผิดอื่นใดไม่ว่าในการกระทำของสัญญาการละเมิดหรืออย่างอื่นที่เกิดขึ้นจากหรือเกี่ยวข้องกับซอฟต์แวร์หรือการใช้งานหรือข้อตกลงอื่น ๆ ใน ซอฟต์แวร์.