Cheerp, WebRTC āĻāĻŦāĻ‚ Firebase āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ C++ āĻĨā§‡āĻ•ā§‡ āĻ“āĻ¯āĻŧā§‡āĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ˛ā§āĻŸāĻŋāĻĒā§āĻ˛ā§‡āĻ¯āĻŧāĻžāĻ° āĻ—ā§‡āĻŽ āĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻž

āĻ­ā§‚āĻŽāĻŋāĻ•āĻž

āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻˇā§āĻ āĻžāĻ¨ āĻ˛ā§€āĻ¨āĻŋāĻ‚ āĻŸā§‡āĻ•āĻ¨ā§‹āĻ˛āĻœāĻŋāĻ¸ āĻ“āĻ¯āĻŧā§‡āĻŦā§‡ āĻāĻ¤āĻŋāĻšā§āĻ¯āĻ—āĻ¤ āĻĄā§‡āĻ¸ā§āĻ•āĻŸāĻĒ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻ†āĻŽāĻžāĻĻā§‡āĻ° C++ āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛āĻžāĻ° āĻ‰āĻ˛ā§āĻ˛āĻžāĻ¸ WebAssembly āĻāĻŦāĻ‚ JavaScript āĻāĻ° āĻ¸āĻŽāĻ¨ā§āĻŦāĻ¯āĻŧ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡, āĻ¯āĻž āĻ‰āĻ­āĻ¯āĻŧāĻ‡ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡ āĻ¸āĻšāĻœ āĻŦā§āĻ°āĻžāĻ‰āĻœāĻžāĻ° āĻŽāĻŋāĻĨāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž, āĻāĻŦāĻ‚ āĻ‰āĻšā§āĻš āĻ•āĻ°ā§āĻŽāĻ•ā§āĻˇāĻŽāĻ¤āĻž.

āĻāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ—ā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻšāĻŋāĻ¸āĻžāĻŦā§‡, āĻ†āĻŽāĻ°āĻž āĻ“āĻ¯āĻŧā§‡āĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ˛ā§āĻŸāĻŋāĻĒā§āĻ˛ā§‡āĻ¯āĻŧāĻžāĻ° āĻ—ā§‡āĻŽ āĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋ āĻāĻŦāĻ‚ āĻŦā§‡āĻ›ā§‡ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋ Teeworlds. Teeworlds āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ˛ā§āĻŸāĻŋāĻĒā§āĻ˛ā§‡āĻ¯āĻŧāĻžāĻ° XNUMXD āĻ°ā§‡āĻŸā§āĻ°ā§‹ āĻ—ā§‡āĻŽ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ āĻ›ā§‹āĻŸ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¸āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ–ā§‡āĻ˛ā§‹āĻ¯āĻŧāĻžāĻĄāĻŧāĻĻā§‡āĻ° āĻ¸āĻŽā§āĻĒā§āĻ°āĻĻāĻžāĻ¯āĻŧ (āĻ†āĻŽāĻŋ āĻ¸āĻš!) āĻāĻŸāĻŋ āĻĄāĻžāĻ‰āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻž āĻ¸āĻŽā§āĻĒāĻĻ āĻāĻŦāĻ‚ CPU āĻāĻŦāĻ‚ GPU āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧāĻ¤āĻž āĻ‰āĻ­āĻ¯āĻŧ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡āĻ‡ āĻ›ā§‹āĻŸ - āĻāĻ•āĻœāĻ¨ āĻ†āĻĻāĻ°ā§āĻļ āĻĒā§āĻ°āĻžāĻ°ā§āĻĨā§€āĨ¤

Cheerp, WebRTC āĻāĻŦāĻ‚ Firebase āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ C++ āĻĨā§‡āĻ•ā§‡ āĻ“āĻ¯āĻŧā§‡āĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ˛ā§āĻŸāĻŋāĻĒā§āĻ˛ā§‡āĻ¯āĻŧāĻžāĻ° āĻ—ā§‡āĻŽ āĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻž
Teeworlds āĻŦā§āĻ°āĻžāĻ‰āĻœāĻžāĻ°ā§‡ āĻšāĻ˛āĻ›ā§‡

āĻ†āĻŽāĻ°āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ‡ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋ āĻ“āĻ¯āĻŧā§‡āĻŦā§‡ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻ•ā§‹āĻĄ āĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨. āĻāĻŸāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ‰āĻĒāĻžāĻ¯āĻŧā§‡ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ:

  • XMLHttpāĻ…āĻ¨ā§āĻ°ā§‹āĻ§/āĻ†āĻ¨āĻ¯āĻŧāĻ¨, āĻ¯āĻĻāĻŋ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻ…āĻ‚āĻļā§‡ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° HTTP āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻĨāĻžāĻ•ā§‡, āĻŦāĻž
  • āĻ“āĻ¯āĻŧā§‡āĻŦāĻ¸āĻ•ā§‡āĻŸ.

āĻ‰āĻ­āĻ¯āĻŧ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡āĻ° āĻĒāĻžāĻļā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻšā§‹āĻ¸ā§āĻŸ āĻ•āĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨, āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻĒāĻ°āĻŋāĻŦāĻšāĻ¨ āĻĒā§āĻ°ā§‹āĻŸā§‹āĻ•āĻ˛ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§‡āĻ¯āĻŧ āĻ¨āĻž āĻāĻ° āĻĢāĻ˛ā§‡ UDP. āĻāĻŸāĻŋ āĻ­āĻŋāĻĄāĻŋāĻ“ āĻ•āĻ¨āĻĢāĻžāĻ°ā§‡āĻ¨ā§āĻ¸āĻŋāĻ‚ āĻ¸āĻĢā§āĻŸāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻāĻŦāĻ‚ āĻ—ā§‡āĻŽāĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ¤ā§‹ āĻ°āĻŋāĻ¯āĻŧā§‡āĻ˛-āĻŸāĻžāĻ‡āĻŽ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ, āĻ•āĻžāĻ°āĻŖ āĻāĻŸāĻŋ āĻĒā§āĻ°ā§‹āĻŸā§‹āĻ•āĻ˛ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸāĻ—ā§āĻ˛āĻŋāĻ° āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻāĻŦāĻ‚ āĻ…āĻ°ā§āĻĄāĻžāĻ°ā§‡āĻ° āĻ—ā§āĻ¯āĻžāĻ°āĻžāĻ¨ā§āĻŸāĻŋ āĻĻā§‡āĻ¯āĻŧ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ TCP āĻ•āĻŽ āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§‡ āĻŦāĻžāĻ§āĻž āĻšāĻ¯āĻŧā§‡ āĻ‰āĻ āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

āĻāĻ•āĻŸāĻŋ āĻ¤ā§ƒāĻ¤ā§€āĻ¯āĻŧ āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻ†āĻ›ā§‡ - āĻŦā§āĻ°āĻžāĻ‰āĻœāĻžāĻ° āĻĨā§‡āĻ•ā§‡ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§āĻ¨: WebRTC āĻāĻ°.

RTCDataChannel āĻāĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻ¯ā§‹āĻ—ā§āĻ¯ āĻāĻŦāĻ‚ āĻ…āĻŦāĻŋāĻļā§āĻŦāĻ¸ā§āĻ¤ āĻ‰āĻ­āĻ¯āĻŧ āĻŸā§āĻ°āĻžāĻ¨ā§āĻ¸āĻŽāĻŋāĻļāĻ¨ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°ā§‡ (āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻāĻŸāĻŋ āĻ¯āĻ–āĻ¨āĻ‡ āĻ¸āĻŽā§āĻ­āĻŦ āĻāĻ•āĻŸāĻŋ āĻĒāĻ°āĻŋāĻŦāĻšāĻ¨ āĻĒā§āĻ°ā§‹āĻŸā§‹āĻ•āĻ˛ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ UDP āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°ā§‡), āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻĻā§‚āĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻāĻŦāĻ‚ āĻŦā§āĻ°āĻžāĻ‰āĻœāĻžāĻ°āĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ‰āĻ­āĻ¯āĻŧāĻ‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻāĻ° āĻŽāĻžāĻ¨ā§‡ āĻšāĻ˛ āĻ¯ā§‡ āĻ†āĻŽāĻ°āĻž āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻ•āĻŽā§āĻĒā§‹āĻ¨ā§‡āĻ¨ā§āĻŸ āĻ¸āĻš āĻĒā§āĻ°ā§‹ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻŸāĻŋāĻ•ā§‡ āĻŦā§āĻ°āĻžāĻ‰āĻœāĻžāĻ°ā§‡ āĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ!

āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻ…āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻ†āĻ¸ā§‡: āĻĻā§āĻ‡ WebRTC āĻ¸āĻšāĻ•āĻ°ā§āĻŽā§€ āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ— āĻ•āĻ°āĻžāĻ° āĻ†āĻ—ā§‡, āĻ¤āĻžāĻĻā§‡āĻ° āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ¤ā§āĻ˛āĻ¨āĻžāĻŽā§‚āĻ˛āĻ•āĻ­āĻžāĻŦā§‡ āĻœāĻŸāĻŋāĻ˛ āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻļā§‡āĻ• āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡, āĻ¯āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻ¤ā§ƒāĻ¤ā§€āĻ¯āĻŧ āĻĒāĻ•ā§āĻˇā§‡āĻ° āĻ¸āĻ¤ā§āĻ¤āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ (āĻāĻ•āĻŸāĻŋ āĻ¸āĻŋāĻ—āĻ¨ā§āĻ¯āĻžāĻ˛āĻŋāĻ‚ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻāĻŦāĻ‚ āĻāĻ• āĻŦāĻž āĻāĻ•āĻžāĻ§āĻŋāĻ• āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°) STUN/āĻšāĻžāĻ˛ā§).

āĻ†āĻĻāĻ°ā§āĻļāĻ­āĻžāĻŦā§‡, āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• API āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ‡ āĻ¯ā§‡āĻŸāĻŋ āĻ…āĻ­ā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§€āĻŖāĻ­āĻžāĻŦā§‡ WebRTC āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ•āĻŸāĻŋ UDP āĻ¸āĻ•ā§‡āĻŸ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ā§‡āĻ° āĻ¯āĻ¤āĻŸāĻž āĻ¸āĻŽā§āĻ­āĻŦ āĻ•āĻžāĻ›āĻžāĻ•āĻžāĻ›āĻŋ āĻ¯āĻžāĻ° āĻ•ā§‹āĻ¨ā§‹ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ¨ā§‡āĻ‡āĨ¤

āĻāĻŸāĻŋ āĻ†āĻŽāĻžāĻĻā§‡āĻ°āĻ•ā§‡ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ•ā§‹āĻĄā§‡ āĻœāĻŸāĻŋāĻ˛ āĻŦāĻŋāĻļāĻĻ āĻĒā§āĻ°āĻ•āĻžāĻļ āĻ¨āĻž āĻ•āĻ°ā§‡āĻ‡ WebRTC-āĻāĻ° āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻ—ā§āĻ°āĻšāĻŖ āĻ•āĻ°āĻžāĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§‡āĻŦā§‡ (āĻ¯āĻž āĻ†āĻŽāĻ°āĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡ āĻ¯āĻ¤āĻŸāĻž āĻ¸āĻŽā§āĻ­āĻŦ āĻ•āĻŽ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšā§‡āĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ)āĨ¤

āĻ¨ā§āĻ¯ā§‚āĻ¨āĻ¤āĻŽ WebRTC

WebRTC āĻšāĻ˛ āĻŦā§āĻ°āĻžāĻ‰āĻœāĻžāĻ°ā§‡ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ API-āĻāĻ° āĻāĻ•āĻŸāĻŋ āĻ¸ā§‡āĻŸ āĻ¯āĻž āĻ…āĻĄāĻŋāĻ“, āĻ­āĻŋāĻĄāĻŋāĻ“ āĻāĻŦāĻ‚ āĻ¨āĻŋāĻ°ā§āĻŦāĻŋāĻšāĻžāĻ°ā§‡ āĻĄā§‡āĻŸāĻžāĻ° āĻĒāĻŋāĻ¯āĻŧāĻžāĻ°-āĻŸā§-āĻĒāĻŋāĻ¯āĻŧāĻžāĻ° āĻŸā§āĻ°āĻžāĻ¨ā§āĻ¸āĻŽāĻŋāĻļāĻ¨ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡āĨ¤

āĻ†āĻ‡āĻ¸āĻŋāĻ‡ āĻ¨āĻžāĻŽāĻ• āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ STUN āĻāĻŦāĻ‚/āĻ…āĻĨāĻŦāĻž āĻŸāĻžāĻ°ā§āĻ¨ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ¸āĻŽāĻŦāĻ¯āĻŧāĻ¸ā§€āĻĻā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ (āĻāĻŽāĻ¨āĻ•āĻŋ āĻāĻ• āĻŦāĻž āĻ‰āĻ­āĻ¯āĻŧ āĻĻāĻŋāĻ•ā§‡ NAT āĻĨāĻžāĻ•āĻ˛ā§‡āĻ“)āĨ¤ āĻ¸āĻšāĻ•āĻ°ā§āĻŽā§€āĻ°āĻž SDP āĻĒā§āĻ°ā§‹āĻŸā§‹āĻ•āĻ˛ā§‡āĻ° āĻ…āĻĢāĻžāĻ° āĻāĻŦāĻ‚ āĻ‰āĻ¤ā§āĻ¤āĻ°ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ ICE āĻ¤āĻĨā§āĻ¯ āĻāĻŦāĻ‚ āĻšā§āĻ¯āĻžāĻ¨ā§‡āĻ˛ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ° āĻŦāĻŋāĻ¨āĻŋāĻŽāĻ¯āĻŧ āĻ•āĻ°ā§‡āĨ¤

āĻ•āĻŋ āĻĻāĻžāĻ°ā§āĻ¨! āĻāĻ• āĻ¸āĻŽāĻ¯āĻŧā§‡ āĻ•āĻ¯āĻŧāĻŸāĻŋ āĻ¸āĻ‚āĻ•ā§āĻˇāĻŋāĻĒā§āĻ¤ āĻ°ā§‚āĻĒ? āĻ†āĻ¸ā§āĻ¨ āĻ¸āĻ‚āĻ•ā§āĻˇā§‡āĻĒā§‡ āĻŦā§āĻ¯āĻžāĻ–ā§āĻ¯āĻž āĻ•āĻ°āĻŋ āĻāĻ‡ āĻĒāĻĻāĻ—ā§āĻ˛āĻŋāĻ° āĻ…āĻ°ā§āĻĨ āĻ•ā§€:

  • NAT-āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸ā§‡āĻļāĻ¨ āĻŸā§āĻ°āĻžāĻ­āĻžāĻ°ā§āĻ¸āĻžāĻ˛ āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ (STUN) — NAT āĻŦāĻžāĻ‡āĻĒāĻžāĻ¸ āĻ•āĻ°āĻžāĻ° āĻāĻŦāĻ‚ āĻšā§‹āĻ¸ā§āĻŸā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻĄā§‡āĻŸāĻž āĻ†āĻĻāĻžāĻ¨-āĻĒā§āĻ°āĻĻāĻžāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻœā§‹āĻĄāĻŧāĻž (IP, āĻĒā§‹āĻ°ā§āĻŸ) āĻĒāĻžāĻ“āĻ¯āĻŧāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°ā§‹āĻŸā§‹āĻ•āĻ˛āĨ¤ āĻ¯āĻĻāĻŋ āĻ¤āĻŋāĻ¨āĻŋ āĻ¤āĻžāĻ° āĻ•āĻžāĻœāĻŸāĻŋ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻž āĻ•āĻ°ā§‡āĻ¨, āĻ¤āĻŦā§‡ āĻ¸āĻšāĻ•āĻ°ā§āĻŽā§€āĻ°āĻž āĻāĻ•ā§‡ āĻ…āĻĒāĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸ā§āĻŦāĻžāĻ§ā§€āĻ¨āĻ­āĻžāĻŦā§‡ āĻĄā§‡āĻŸāĻž āĻŦāĻŋāĻ¨āĻŋāĻŽāĻ¯āĻŧ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤
  • NAT āĻāĻ° āĻšāĻžāĻ°āĻĒāĻžāĻļā§‡ āĻ°āĻŋāĻ˛ā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻŸā§āĻ°āĻžāĻ­āĻžāĻ°ā§āĻ¸āĻžāĻ˛ (āĻšāĻžāĻ˛ā§) NAT āĻŸā§āĻ°āĻžāĻ­āĻžāĻ°ā§āĻ¸āĻžāĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯āĻ“ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ•ā§āĻ¸āĻŋāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻĄā§‡āĻŸāĻž āĻĢāĻ°āĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻ•āĻ°āĻžāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻāĻŸāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°ā§‡ āĻ¯āĻž āĻ‰āĻ­āĻ¯āĻŧ āĻ¸āĻŽāĻ•āĻ•ā§āĻˇā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻĻā§ƒāĻļā§āĻ¯āĻŽāĻžāĻ¨āĨ¤ āĻāĻŸāĻŋ āĻ˛ā§‡āĻŸā§‡āĻ¨ā§āĻ¸āĻŋ āĻ¯ā§‹āĻ— āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ STUN āĻāĻ° āĻ¤ā§āĻ˛āĻ¨āĻžāĻ¯āĻŧ āĻāĻŸāĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ•āĻ°āĻž āĻ†āĻ°āĻ“ āĻŦā§āĻ¯āĻ¯āĻŧāĻŦāĻšā§āĻ˛ (āĻ•āĻžāĻ°āĻŖ āĻāĻŸāĻŋ āĻ¸āĻŽāĻ—ā§āĻ° āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ— āĻ¸ā§‡āĻļāĻ¨ āĻœā§āĻĄāĻŧā§‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ), āĻ¤āĻŦā§‡ āĻ•āĻ–āĻ¨āĻ“ āĻ•āĻ–āĻ¨āĻ“ āĻāĻŸāĻŋ āĻāĻ•āĻŽāĻžāĻ¤ā§āĻ° āĻŦāĻŋāĻ•āĻ˛ā§āĻĒāĨ¤
  • āĻ‡āĻ¨ā§āĻŸāĻžāĻ°ā§‡āĻ•ā§āĻŸāĻŋāĻ­ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ (āĻŦāĻ°āĻĢ) āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻ¸āĻ‚āĻ¯ā§‹āĻ—āĻ•āĻžāĻ°ā§€ āĻ¸āĻŽāĻŦāĻ¯āĻŧāĻ¸ā§€āĻĻā§‡āĻ° āĻĨā§‡āĻ•ā§‡ āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻ¤āĻĨā§āĻ¯, āĻ¸ā§‡āĻ‡āĻ¸āĻžāĻĨā§‡ āĻ¯ā§‡āĻ•ā§‹āĻ¨ āĻ¸āĻ‚āĻ–ā§āĻ¯āĻ• STUN āĻāĻŦāĻ‚ TURN āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡āĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻ¤āĻĨā§āĻ¯ā§‡āĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡ āĻĻā§āĻŸāĻŋ āĻĒāĻŋāĻ¯āĻŧāĻžāĻ°āĻ•ā§‡ āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻžāĻ° āĻ¸āĻ°ā§āĻŦā§‹āĻ¤ā§āĻ¤āĻŽ āĻ¸āĻŽā§āĻ­āĻžāĻŦā§āĻ¯ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤ āĻšāĻ¯āĻŧāĨ¤
  • āĻ¸ā§‡āĻļāĻ¨ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻĒā§āĻ°ā§‹āĻŸā§‹āĻ•āĻ˛ (āĻ†āĻ­ā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§€āĻ¨ āĻ‰ā§ŽāĻĒāĻžāĻĻāĻ¨) āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻšā§āĻ¯āĻžāĻ¨ā§‡āĻ˛ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸, āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, ICE āĻĒā§āĻ°āĻžāĻ°ā§āĻĨā§€, āĻŽāĻžāĻ˛ā§āĻŸāĻŋāĻŽāĻŋāĻĄāĻŋāĻ¯āĻŧāĻž āĻ•ā§‹āĻĄā§‡āĻ• (āĻāĻ•āĻŸāĻŋ āĻ…āĻĄāĻŋāĻ“/āĻ­āĻŋāĻĄāĻŋāĻ“ āĻšā§āĻ¯āĻžāĻ¨ā§‡āĻ˛ā§‡āĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡), āĻ‡āĻ¤ā§āĻ¯āĻžāĻĻāĻŋ... āĻ¸āĻšāĻ•āĻ°ā§āĻŽā§€āĻĻā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻœāĻ¨ āĻāĻ•āĻŸāĻŋ SDP āĻ…āĻĢāĻžāĻ° āĻĒāĻžāĻ āĻžāĻ¯āĻŧ, āĻāĻŦāĻ‚ āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ SDP āĻ‰āĻ¤ā§āĻ¤āĻ° āĻĻāĻŋāĻ¯āĻŧā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻœāĻžāĻ¨āĻžāĻ¯āĻŧ .. āĻāĻ° āĻĒāĻ°ā§‡, āĻāĻ•āĻŸāĻŋ āĻšā§āĻ¯āĻžāĻ¨ā§‡āĻ˛ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤

āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡, āĻ¸āĻšāĻ•āĻ°ā§āĻŽā§€āĻĻā§‡āĻ° STUN āĻāĻŦāĻ‚ TURN āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻĨā§‡āĻ•ā§‡ āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻ¤āĻĨā§āĻ¯ āĻ¸āĻ‚āĻ—ā§āĻ°āĻš āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻāĻŦāĻ‚ āĻāĻ•ā§‡ āĻ…āĻĒāĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻŦāĻŋāĻ¨āĻŋāĻŽāĻ¯āĻŧ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤

āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻšāĻ˛ āĻ¯ā§‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻāĻ–āĻ¨āĻ“ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ— āĻ•āĻ°āĻžāĻ° āĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻ¨ā§‡āĻ‡, āĻ¤āĻžāĻ‡ āĻāĻ‡ āĻĄā§‡āĻŸāĻž āĻ†āĻĻāĻžāĻ¨-āĻĒā§āĻ°āĻĻāĻžāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ†āĻ‰āĻŸ-āĻ…āĻĢ-āĻŦā§āĻ¯āĻžāĻ¨ā§āĻĄ āĻŽā§‡āĻ•āĻžāĻ¨āĻŋāĻœāĻŽ āĻĨāĻžāĻ•āĻ¤ā§‡ āĻšāĻŦā§‡: āĻāĻ•āĻŸāĻŋ āĻ¸āĻŋāĻ—āĻ¨ā§āĻ¯āĻžāĻ˛āĻŋāĻ‚ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°āĨ¤

āĻāĻ•āĻŸāĻŋ āĻ¸āĻŋāĻ—āĻ¨ā§āĻ¯āĻžāĻ˛āĻŋāĻ‚ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻ–ā§āĻŦ āĻ¸āĻšāĻœ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ•āĻžāĻ°āĻŖ āĻāĻ° āĻāĻ•āĻŽāĻžāĻ¤ā§āĻ° āĻ•āĻžāĻœ āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻļā§‡āĻ• āĻĒāĻ°ā§āĻŦā§‡ āĻ¸āĻšāĻ•āĻ°ā§āĻŽā§€āĻĻā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻĄā§‡āĻŸāĻž āĻĢāĻ°āĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻ•āĻ°āĻž (āĻ¨āĻŋāĻšā§‡āĻ° āĻšāĻŋāĻ¤ā§āĻ°ā§‡ āĻĻā§‡āĻ–āĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡)āĨ¤

Cheerp, WebRTC āĻāĻŦāĻ‚ Firebase āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ C++ āĻĨā§‡āĻ•ā§‡ āĻ“āĻ¯āĻŧā§‡āĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ˛ā§āĻŸāĻŋāĻĒā§āĻ˛ā§‡āĻ¯āĻŧāĻžāĻ° āĻ—ā§‡āĻŽ āĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻž
āĻ¸āĻ°āĻ˛ā§€āĻ•ā§ƒāĻ¤ WebRTC āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻļā§‡āĻ• āĻ¸āĻŋāĻ•ā§‹āĻ¯āĻŧā§‡āĻ¨ā§āĻ¸ āĻĄāĻžāĻ¯āĻŧāĻžāĻ—ā§āĻ°āĻžāĻŽ

Teeworlds āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻŽāĻĄā§‡āĻ˛ āĻ“āĻ­āĻžāĻ°āĻ­āĻŋāĻ‰

Teeworlds āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻ†āĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āĻšāĻžāĻ° āĻ–ā§āĻŦāĻ‡ āĻ¸āĻšāĻœ:

  • āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻāĻŦāĻ‚ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻĻā§āĻŸāĻŋ āĻ­āĻŋāĻ¨ā§āĻ¨ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĨ¤
  • āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸāĻ°āĻž āĻāĻ•āĻžāĻ§āĻŋāĻ• āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡āĻ° āĻāĻ•āĻŸāĻŋāĻ¤ā§‡ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ•āĻ°ā§‡ āĻ—ā§‡āĻŽāĻŸāĻŋāĻ¤ā§‡ āĻĒā§āĻ°āĻŦā§‡āĻļ āĻ•āĻ°ā§‡, āĻ¯āĻžāĻ° āĻĒā§āĻ°āĻ¤ā§āĻ¯ā§‡āĻ•āĻŸāĻŋ āĻāĻ•āĻŦāĻžāĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ¤ā§āĻ° āĻ—ā§‡āĻŽ āĻšā§‹āĻ¸ā§āĻŸ āĻ•āĻ°ā§‡āĨ¤
  • āĻ—ā§‡āĻŽā§‡āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĄā§‡āĻŸāĻž āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤
  • āĻ—ā§‡āĻŽ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸā§‡ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻŋāĻ¤ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ• āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻ¸āĻ‚āĻ—ā§āĻ°āĻš āĻ•āĻ°āĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻļā§‡āĻˇ āĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ° āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤

āĻĄā§‡āĻŸāĻž āĻ†āĻĻāĻžāĻ¨-āĻĒā§āĻ°āĻĻāĻžāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ WebRTC āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ§āĻ¨ā§āĻ¯āĻŦāĻžāĻĻ, āĻ†āĻŽāĻ°āĻž āĻ—ā§‡āĻŽā§‡āĻ° āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻŸāĻŋ āĻŦā§āĻ°āĻžāĻ‰āĻœāĻžāĻ°ā§‡ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ…āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤āĨ¤ āĻāĻŸāĻŋ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻĻā§āĻ°ā§āĻĻāĻžāĻ¨ā§āĻ¤ āĻ¸ā§āĻ¯ā§‹āĻ— āĻĻā§‡āĻ¯āĻŧ ...

āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻĨā§‡āĻ•ā§‡ āĻĒāĻ°āĻŋāĻ¤ā§āĻ°āĻžāĻŖ āĻĒāĻžāĻ¨

āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻ˛āĻœāĻŋāĻ•ā§‡āĻ° āĻ…āĻ­āĻžāĻŦā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻšāĻŽā§ŽāĻ•āĻžāĻ° āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡: āĻ†āĻŽāĻ°āĻž āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻŸāĻŋāĻ•ā§‡ āĻ¸ā§āĻĨāĻŋāĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ Github āĻĒā§ƒāĻˇā§āĻ āĻžāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻŦāĻž Cloudflare-āĻāĻ° āĻĒāĻŋāĻ›āĻ¨ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻšāĻžāĻ°ā§āĻĄāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ°ā§‡ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ, āĻāĻ‡āĻ­āĻžāĻŦā§‡ āĻŦāĻŋāĻ¨āĻžāĻŽā§‚āĻ˛ā§āĻ¯ā§‡ āĻĻā§āĻ°ā§āĻ¤ āĻĄāĻžāĻ‰āĻ¨āĻ˛ā§‹āĻĄ āĻāĻŦāĻ‚ āĻ‰āĻšā§āĻš āĻ†āĻĒāĻŸāĻžāĻ‡āĻŽ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋāĨ¤ āĻ†āĻ¸āĻ˛ā§‡, āĻ†āĻŽāĻ°āĻž āĻ¤āĻžāĻĻā§‡āĻ° āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ­ā§āĻ˛ā§‡ āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ, āĻāĻŦāĻ‚ āĻ¯āĻĻāĻŋ āĻ†āĻŽāĻ°āĻž āĻ­āĻžāĻ—ā§āĻ¯āĻŦāĻžāĻ¨ āĻšāĻ‡ āĻāĻŦāĻ‚ āĻ—ā§‡āĻŽāĻŸāĻŋ āĻœāĻ¨āĻĒā§āĻ°āĻŋāĻ¯āĻŧ āĻšāĻ¯āĻŧā§‡ āĻ“āĻ ā§‡, āĻ¤āĻŦā§‡ āĻ…āĻŦāĻ•āĻžāĻ āĻžāĻŽā§‹ āĻ†āĻ§ā§āĻ¨āĻŋāĻ•ā§€āĻ•āĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ¨āĻžāĨ¤

āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽāĻŸāĻŋ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻāĻ–āĻ¨āĻ“ āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻšā§āĻ¯āĻŋāĻ• āĻ†āĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āĻšāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡:

  • āĻāĻ• āĻŦāĻž āĻāĻ•āĻžāĻ§āĻŋāĻ• STUN āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°: āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻŦā§‡āĻ›ā§‡ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻ¨ā§‡āĻ•āĻ—ā§āĻ˛āĻŋ āĻŦāĻŋāĻ¨āĻžāĻŽā§‚āĻ˛ā§āĻ¯ā§‡āĻ° āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ā§ˇ
  • āĻ•āĻŽāĻĒāĻ•ā§āĻˇā§‡ āĻāĻ•āĻŸāĻŋ āĻŸāĻžāĻ°ā§āĻ¨ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°: āĻāĻ–āĻžāĻ¨ā§‡ āĻ•ā§‹āĻ¨ āĻŦāĻŋāĻ¨āĻžāĻŽā§‚āĻ˛ā§āĻ¯ā§‡āĻ° āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻ¨ā§‡āĻ‡, āĻ¤āĻžāĻ‡ āĻ†āĻŽāĻ°āĻž āĻšāĻ¯āĻŧ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻ¸ā§‡āĻŸ āĻ†āĻĒ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ āĻŦāĻž āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻ°ā§āĻĨ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋā§ˇ āĻ¸ā§ŒāĻ­āĻžāĻ—ā§āĻ¯āĻŦāĻļāĻ¤, āĻŦā§‡āĻļāĻŋāĻ°āĻ­āĻžāĻ— āĻ¸āĻŽāĻ¯āĻŧ STUN āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ (āĻāĻŦāĻ‚ āĻ¸āĻ¤ā§āĻ¯āĻŋāĻ•āĻžāĻ°ā§‡āĻ° p2p āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡), āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ•āĻŸāĻŋ āĻĢāĻ˛āĻŦā§āĻ¯āĻžāĻ• āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻŸāĻžāĻ°ā§āĻ¨ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨āĨ¤
  • āĻ¸āĻŋāĻ—āĻ¨ā§āĻ¯āĻžāĻ˛āĻŋāĻ‚ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°: āĻ…āĻ¨ā§āĻ¯ āĻĻā§āĻŸāĻŋ āĻĻāĻŋāĻ• āĻĨā§‡āĻ•ā§‡ āĻ­āĻŋāĻ¨ā§āĻ¨, āĻ¸āĻŋāĻ—āĻ¨ā§āĻ¯āĻžāĻ˛āĻŋāĻ‚ āĻŽāĻžāĻ¨āĻ¸āĻŽā§āĻŽāĻ¤ āĻ¨āĻ¯āĻŧāĨ¤ āĻ¸āĻŋāĻ—āĻ¨ā§āĻ¯āĻžāĻ˛āĻŋāĻ‚ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻ†āĻ¸āĻ˛ā§‡ āĻ•āĻŋ āĻœāĻ¨ā§āĻ¯ āĻĻāĻžāĻ¯āĻŧā§€ āĻšāĻŦā§‡ āĻ¤āĻž āĻ•āĻŋāĻ›ā§āĻŸāĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ—ā§‡āĻ° āĻ‰āĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻ­āĻ° āĻ•āĻ°ā§‡āĨ¤ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡, āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻžāĻ° āĻ†āĻ—ā§‡, āĻ…āĻ˛ā§āĻĒ āĻĒāĻ°āĻŋāĻŽāĻžāĻŖā§‡ āĻĄā§‡āĻŸāĻž āĻŦāĻŋāĻ¨āĻŋāĻŽāĻ¯āĻŧ āĻ•āĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨āĨ¤
  • āĻŸāĻŋāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ˛ā§āĻĄāĻ¸ āĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ° āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°: āĻāĻŸāĻŋ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¤āĻžāĻĻā§‡āĻ° āĻ…āĻ¸ā§āĻ¤āĻŋāĻ¤ā§āĻŦā§‡āĻ° āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāĻ¨ āĻĻāĻŋāĻ¤ā§‡ āĻāĻŦāĻ‚ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸāĻĻā§‡āĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸āĻ°ā§āĻŦāĻœāĻ¨ā§€āĻ¨ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°āĻ—ā§āĻ˛āĻŋ āĻ–ā§āĻāĻœā§‡ āĻĒā§‡āĻ¤ā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻ¯āĻĻāĻŋāĻ“ āĻāĻŸāĻŋāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻ¯āĻŧ āĻ¨āĻž (āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸāĻ°āĻž āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¯āĻž āĻ¤āĻžāĻ°āĻž āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛āĻŋ āĻœāĻžāĻ¨ā§‡), āĻāĻŸāĻŋ āĻ­āĻžāĻ˛ āĻšāĻŦā§‡ āĻ¯āĻžāĻ¤ā§‡ āĻ–ā§‡āĻ˛ā§‹āĻ¯āĻŧāĻžāĻĄāĻŧāĻ°āĻž āĻāĻ˛ā§‹āĻŽā§‡āĻ˛ā§‹ āĻ˛ā§‹āĻ•āĻĻā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ—ā§‡āĻŽāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ…āĻ‚āĻļāĻ—ā§āĻ°āĻšāĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

āĻ†āĻŽāĻ°āĻž Google-āĻāĻ° āĻŦāĻŋāĻ¨āĻžāĻŽā§‚āĻ˛ā§āĻ¯ā§‡āĻ° STUN āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°āĻ—ā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋ, āĻāĻŦāĻ‚ āĻ¨āĻŋāĻœā§‡āĻ°āĻžāĻ‡ āĻāĻ•āĻŸāĻŋ āĻŸāĻžāĻ°ā§āĻ¨ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§‡āĻ›āĻŋā§ˇ

āĻļā§‡āĻˇ āĻĻā§āĻŸāĻŋ āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ›āĻŋ Firebase:

  • Teeworlds āĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ° āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°āĻŸāĻŋ āĻ–ā§āĻŦ āĻ¸āĻšāĻœāĻ­āĻžāĻŦā§‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡: āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ¸āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡āĻ° āĻ¤āĻĨā§āĻ¯ (āĻ¨āĻžāĻŽ, āĻ†āĻ‡āĻĒāĻŋ, āĻŽāĻžāĻ¨āĻšāĻŋāĻ¤ā§āĻ°, āĻŽā§‹āĻĄ, ...) āĻ§āĻžāĻ°āĻŖāĻ•āĻžāĻ°ā§€ āĻŦāĻ¸ā§āĻ¤ā§āĻ° āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻšāĻŋāĻ¸āĻžāĻŦā§‡āĨ¤ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°āĻ—ā§āĻ˛āĻŋ āĻ¤āĻžāĻĻā§‡āĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻŦāĻ¸ā§āĻ¤ā§ āĻĒā§āĻ°āĻ•āĻžāĻļ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ†āĻĒāĻĄā§‡āĻŸ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸāĻ°āĻž āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻ¨ā§‡āĻ¯āĻŧ āĻāĻŦāĻ‚ āĻĒā§āĻ˛ā§‡āĻ¯āĻŧāĻžāĻ°ā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“ āĻ†āĻŽāĻ°āĻž āĻšā§‹āĻŽ āĻĒā§‡āĻœā§‡ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻžāĻŸāĻŋ HTML āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻ•āĻ°āĻŋ āĻ¯āĻžāĻ¤ā§‡ āĻ–ā§‡āĻ˛ā§‹āĻ¯āĻŧāĻžāĻĄāĻŧāĻ°āĻž āĻ•ā§‡āĻŦāĻ˛ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡ āĻ•ā§āĻ˛āĻŋāĻ• āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻāĻŦāĻ‚ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻ—ā§‡āĻŽā§‡ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤
  • āĻ¸āĻŋāĻ—āĻ¨ā§āĻ¯āĻžāĻ˛āĻŋāĻ‚ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸āĻ•ā§‡āĻŸ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ˜āĻ¨āĻŋāĻˇā§āĻ āĻ­āĻžāĻŦā§‡ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•āĻŋāĻ¤, āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻŦāĻŋāĻ­āĻžāĻ—ā§‡ āĻŦāĻ°ā§āĻŖāĻŋāĻ¤āĨ¤

Cheerp, WebRTC āĻāĻŦāĻ‚ Firebase āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ C++ āĻĨā§‡āĻ•ā§‡ āĻ“āĻ¯āĻŧā§‡āĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ˛ā§āĻŸāĻŋāĻĒā§āĻ˛ā§‡āĻ¯āĻŧāĻžāĻ° āĻ—ā§‡āĻŽ āĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻž
āĻ—ā§‡āĻŽā§‡āĻ° āĻ­āĻŋāĻ¤āĻ°ā§‡ āĻāĻŦāĻ‚ āĻšā§‹āĻŽ āĻĒā§‡āĻœā§‡ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡āĻ° āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž

āĻ¸āĻ•ā§‡āĻŸ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨

āĻ†āĻŽāĻ°āĻž āĻāĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ API āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ‡ āĻ¯āĻž Posix UDP āĻ¸āĻ•ā§‡āĻŸā§‡āĻ° āĻ¯āĻ¤āĻŸāĻž āĻ¸āĻŽā§āĻ­āĻŦ āĻ•āĻžāĻ›āĻžāĻ•āĻžāĻ›āĻŋ, āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻ•āĻŽāĻŋāĻ¯āĻŧā§‡ āĻ†āĻ¨āĻ¤ā§‡āĨ¤

āĻ†āĻŽāĻ°āĻž āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ¸āĻšāĻœāĻ¤āĻŽ āĻĄā§‡āĻŸāĻž āĻŦāĻŋāĻ¨āĻŋāĻŽāĻ¯āĻŧā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ¨ā§āĻ¯ā§‚āĻ¨āĻ¤āĻŽ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧāĻ¤āĻž āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ‡āĨ¤

āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ•ā§ƒāĻ¤ āĻ°āĻžāĻ‰āĻŸāĻŋāĻ‚ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ¨ā§‡āĻ‡: āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸āĻšāĻ•āĻ°ā§āĻŽā§€āĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻĢāĻžāĻ¯āĻŧāĻžāĻ°āĻŦā§‡āĻ¸ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¯ā§āĻ•ā§āĻ¤ āĻāĻ•āĻ‡ "āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ LAN" āĻ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ā§ˇ

āĻ…āĻ¤āĻāĻŦ, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ…āĻ¨āĻ¨ā§āĻ¯ āĻ†āĻ‡āĻĒāĻŋ āĻ āĻŋāĻ•āĻžāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ¨ā§‡āĻ‡: āĻ…āĻ¨āĻ¨ā§āĻ¯ āĻĢāĻžāĻ¯āĻŧāĻžāĻ°āĻŦā§‡āĻ¸ āĻ•ā§€ āĻŽāĻžāĻ¨ (āĻĄā§‹āĻŽā§‡āĻ¨ āĻ¨āĻžāĻŽā§‡āĻ° āĻ…āĻ¨ā§āĻ°ā§‚āĻĒ) āĻ…āĻ¨āĻ¨ā§āĻ¯āĻ­āĻžāĻŦā§‡ āĻ¸āĻŽāĻ•āĻ•ā§āĻˇāĻĻā§‡āĻ° āĻ¸āĻ¨āĻžāĻ•ā§āĻ¤ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¯āĻĨā§‡āĻˇā§āĻŸ, āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻĒāĻŋāĻ¯āĻŧāĻžāĻ° āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ•ā§€āĻ•ā§‡ āĻ…āĻ¨ā§āĻŦāĻžāĻĻ āĻ•āĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§‡ "āĻœāĻžāĻ˛" āĻ†āĻ‡āĻĒāĻŋ āĻ āĻŋāĻ•āĻžāĻ¨āĻžāĻ—ā§āĻ˛āĻŋ āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻ•āĻ°ā§‡ā§ˇ āĻāĻŸāĻŋ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖāĻ°ā§‚āĻĒā§‡ āĻ—ā§āĻ˛ā§‹āĻŦāĻžāĻ˛ āĻ†āĻ‡āĻĒāĻŋ āĻ…ā§āĻ¯āĻžāĻĄā§āĻ°ā§‡āĻ¸ āĻ…ā§āĻ¯āĻžāĻ¸āĻžāĻ‡āĻ¨āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧāĻ¤āĻž āĻĻā§‚āĻ° āĻ•āĻ°ā§‡, āĻ¯āĻž āĻāĻ•āĻŸāĻŋ āĻ…-āĻ¤ā§āĻšā§āĻ› āĻ•āĻžāĻœāĨ¤

āĻāĻ–āĻžāĻ¨ā§‡ āĻ¨ā§āĻ¯ā§‚āĻ¨āĻ¤āĻŽ API āĻ¯āĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡:

// Create and destroy a socket
int socket();
int close(int fd);
// Bind a socket to a port, and publish it on Firebase
int bind(int fd, AddrInfo* addr);
// Send a packet. This lazily create a WebRTC connection to the 
// peer when necessary
int sendto(int fd, uint8_t* buf, int len, const AddrInfo* addr);
// Receive the packets destined to this socket
int recvfrom(int fd, uint8_t* buf, int len, AddrInfo* addr);
// Be notified when new packets arrived
int recvCallback(Callback cb);
// Obtain a local ip address for this peer key
uint32_t resolve(client::String* key);
// Get the peer key for this ip
String* reverseResolve(uint32_t addr);
// Get the local peer key
String* local_key();
// Initialize the library with the given Firebase database and 
// WebRTc connection options
void init(client::FirebaseConfig* fb, client::RTCConfiguration* ice);

āĻāĻĒāĻŋāĻ†āĻ‡ āĻ¸āĻšāĻœ āĻāĻŦāĻ‚ āĻĒāĻ¸āĻŋāĻ•ā§āĻ¸ āĻ¸āĻ•ā§‡āĻŸāĻ¸ āĻāĻĒāĻŋāĻ†āĻ‡ āĻāĻ° āĻŽāĻ¤ā§‹, āĻ¤āĻŦā§‡ āĻāĻ° āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āĻ¯ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡: āĻ•āĻ˛āĻŦā§āĻ¯āĻžāĻ• āĻ˛āĻ— āĻ•āĻ°āĻž, āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻ†āĻ‡āĻĒāĻŋ āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻ•āĻ°āĻž āĻāĻŦāĻ‚ āĻ…āĻ˛āĻ¸ āĻ¸āĻ‚āĻ¯ā§‹āĻ—.

āĻ•āĻ˛āĻŦā§āĻ¯āĻžāĻ• āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨

āĻāĻŽāĻ¨āĻ•āĻŋ āĻ¯āĻĻāĻŋ āĻŽā§‚āĻ˛ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŸāĻŋ āĻ¨āĻ¨-āĻŦā§āĻ˛āĻ•āĻŋāĻ‚ I/O āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡, āĻ•ā§‹āĻĄāĻŸāĻŋ āĻ“āĻ¯āĻŧā§‡āĻŦ āĻŦā§āĻ°āĻžāĻ‰āĻœāĻžāĻ°ā§‡ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ āĻ°āĻŋāĻĢā§āĻ¯āĻžāĻ•ā§āĻŸāĻ° āĻ•āĻ°āĻž āĻ†āĻŦāĻļā§āĻ¯āĻ•āĨ¤

āĻāĻ° āĻ•āĻžāĻ°āĻŖ āĻšāĻ˛ āĻŦā§āĻ°āĻžāĻ‰āĻœāĻžāĻ°ā§‡ āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸ āĻ˛ā§āĻĒ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻĨā§‡āĻ•ā§‡ āĻ˛ā§āĻ•āĻžāĻ¨ā§‹ āĻĨāĻžāĻ•ā§‡ (āĻ¸ā§‡āĻŸāĻŋ JavaScript āĻŦāĻž WebAssembly āĻšā§‹āĻ•)āĨ¤

āĻĻā§‡āĻļā§€āĻ¯āĻŧ āĻĒāĻ°āĻŋāĻŦā§‡āĻļā§‡ āĻ†āĻŽāĻ°āĻž āĻāĻ­āĻžāĻŦā§‡ āĻ•ā§‹āĻĄ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ

while(running) {
  select(...); // wait for I/O events
  while(true) {
    int r = readfrom(...); // try to read
    if (r < 0 && errno == EWOULDBLOCK) // no more data available
      break;
    ...
  }
  ...
}

āĻ¯āĻĻāĻŋ āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸ āĻ˛ā§āĻĒāĻŸāĻŋ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻ˛ā§āĻ•āĻžāĻ¨ā§‹ āĻĨāĻžāĻ•ā§‡, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻāĻŸāĻŋāĻ•ā§‡ āĻāĻ°āĻ•āĻŽ āĻ•āĻŋāĻ›ā§āĻ¤ā§‡ āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡:

auto cb = []() { // this will be called when new data is available
  while(true) {
    int r = readfrom(...); // try to read
    if (r < 0 && errno == EWOULDBLOCK) // no more data available
      break;
    ...
  }
  ...
};
recvCallback(cb); // register the callback

āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻ†āĻ‡āĻĒāĻŋ āĻ…ā§āĻ¯āĻžāĻ¸āĻžāĻ‡āĻ¨āĻŽā§‡āĻ¨ā§āĻŸ

āĻ†āĻŽāĻžāĻĻā§‡āĻ° "āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•"-āĻāĻ° āĻ¨ā§‹āĻĄ āĻ†āĻ‡āĻĄāĻŋāĻ—ā§āĻ˛āĻŋ āĻ†āĻ‡āĻĒāĻŋ āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻ¨āĻ¯āĻŧ, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻĢāĻžāĻ¯āĻŧāĻžāĻ°āĻŦā§‡āĻ¸ āĻ•ā§€ (āĻāĻ—ā§āĻ˛āĻŋ āĻāĻŽāĻ¨ āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚ āĻ¯āĻž āĻĻā§‡āĻ–āĻ¤ā§‡ āĻāĻ‡āĻ°āĻ•āĻŽ: -LmEC50PYZLCiCP-vqde ).

āĻāĻŸāĻŋ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻœāĻ¨āĻ• āĻ•āĻžāĻ°āĻŖ āĻ†āĻ‡āĻĒāĻŋ āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻ•āĻ°āĻž āĻāĻŦāĻ‚ āĻ¤āĻžāĻĻā§‡āĻ° āĻ¸ā§āĻŦāĻ¤āĻ¨ā§āĻ¤ā§āĻ°āĻ¤āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•ā§‹āĻ¨āĻ“ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ¨ā§‡āĻ‡ (āĻ¸ā§‡āĻ‡āĻ¸āĻžāĻĨā§‡ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻŦāĻŋāĻšā§āĻ›āĻŋāĻ¨ā§āĻ¨ āĻšāĻ“āĻ¯āĻŧāĻžāĻ° āĻĒāĻ°ā§‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻ¨āĻŋāĻˇā§āĻĒāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°āĻž), āĻ¤āĻŦā§‡ āĻāĻŸāĻŋ āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ‡ āĻāĻ•āĻŸāĻŋ āĻ¸āĻ‚āĻ–ā§āĻ¯āĻžāĻ¸ā§‚āĻšāĻ• āĻŽāĻžāĻ¨ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸āĻŽāĻŦāĻ¯āĻŧāĻ¸ā§€āĻĻā§‡āĻ° āĻ¸āĻ¨āĻžāĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨āĨ¤

āĻāĻŸāĻŋ āĻ āĻŋāĻ• āĻ•āĻŋ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻœāĻ¨ā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ. resolve и reverseResolve: āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻŸāĻŋ āĻ•ā§‹āĻ¨ā§‹āĻ­āĻžāĻŦā§‡ āĻ•ā§€āĻŸāĻŋāĻ° āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚ āĻŽāĻžāĻ¨ (āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻ‡āĻ¨āĻĒā§āĻŸ āĻŦāĻž āĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ° āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡) āĻ—ā§āĻ°āĻšāĻŖ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ…āĻ­ā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§€āĻŖ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻŸāĻŋāĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ†āĻ‡āĻĒāĻŋ āĻ āĻŋāĻ•āĻžāĻ¨āĻžāĻ¯āĻŧ āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻŦāĻžāĻ•āĻŋ āĻāĻĒāĻŋāĻ†āĻ‡āĻ“ āĻ¸āĻ°āĻ˛āĻ¤āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚āĻ¯āĻŧā§‡āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡ āĻāĻ‡ āĻŽāĻžāĻ¨āĻŸāĻŋ āĻ—ā§āĻ°āĻšāĻŖ āĻ•āĻ°ā§‡āĨ¤

āĻāĻŸāĻŋ DNS āĻ˛ā§āĻ•āĻ†āĻĒā§‡āĻ° āĻ…āĻ¨ā§āĻ°ā§‚āĻĒ, āĻ¤āĻŦā§‡ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸā§‡ āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻ¸āĻžā§āĻšāĻžāĻ˛āĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤

āĻ…āĻ°ā§āĻĨāĻžā§Ž, āĻ†āĻ‡āĻĒāĻŋ āĻ āĻŋāĻ•āĻžāĻ¨āĻžāĻ—ā§āĻ˛āĻŋ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ­āĻžāĻ— āĻ•āĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¨āĻž āĻāĻŦāĻ‚ āĻ¯āĻĻāĻŋ āĻ•āĻŋāĻ›ā§ āĻ§āĻ°āĻŖā§‡āĻ° āĻ—ā§āĻ˛ā§‹āĻŦāĻžāĻ˛ āĻ†āĻ‡āĻĄā§‡āĻ¨ā§āĻŸāĻŋāĻĢāĻžāĻ¯āĻŧāĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻ¯āĻŧ āĻ¤āĻŦā§‡ āĻāĻŸāĻŋ āĻ…āĻ¨ā§āĻ¯āĻ­āĻžāĻŦā§‡ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤

āĻ…āĻ˛āĻ¸ āĻ¸āĻ‚āĻ¯ā§‹āĻ—

UDP-āĻāĻ° āĻ•ā§‹āĻ¨ā§‹ āĻ¸āĻ‚āĻ¯ā§‹āĻ—ā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ¨ā§‡āĻ‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ†āĻŽāĻ°āĻž āĻ¯ā§‡āĻŽāĻ¨āĻŸāĻŋ āĻĻā§‡āĻ–ā§‡āĻ›āĻŋ, WebRTC-āĻāĻ° āĻĻā§āĻŸāĻŋ āĻ¸āĻŽāĻ•āĻ•ā§āĻˇā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻĄā§‡āĻŸāĻž āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻļā§āĻ°ā§ āĻ•āĻ°āĻžāĻ° āĻ†āĻ—ā§‡ āĻāĻ•āĻŸāĻŋ āĻĻā§€āĻ°ā§āĻ˜ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨āĨ¤

āĻ¯āĻĻāĻŋ āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻ‡ āĻ¸ā§āĻ¤āĻ°ā§‡āĻ° āĻŦāĻŋāĻŽā§‚āĻ°ā§āĻ¤āĻ¤āĻž āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ‡, (sendto/recvfrom āĻĒā§‚āĻ°ā§āĻŦā§‡āĻ° āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ›āĻžāĻĄāĻŧāĻžāĻ‡ āĻ¸ā§āĻŦā§‡āĻšā§āĻ›āĻžāĻšāĻžāĻ°ā§€ āĻ¸āĻšāĻ•āĻ°ā§āĻŽā§€āĻĻā§‡āĻ° āĻ¸āĻžāĻĨā§‡), āĻ¤āĻžāĻ°āĻĒāĻ° āĻ¤āĻžāĻĻā§‡āĻ° āĻ…āĻŦāĻļā§āĻ¯āĻ‡ API-āĻāĻ° āĻ­āĻŋāĻ¤āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ "āĻ…āĻ˛āĻ¸" (āĻŦāĻŋāĻ˛āĻŽā§āĻŦāĻŋāĻ¤) āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ā§ˇ

āĻ‡āĻ‰āĻĄāĻŋāĻĒāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ "āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°" āĻāĻŦāĻ‚ "āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ" āĻāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ• āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ—ā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻŸāĻŋ āĻ˜āĻŸā§‡ āĻāĻŦāĻ‚ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋāĻ° āĻ•ā§€ āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤:

  • āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻ•āĻ˛ bind()āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻŋāĻ‚ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽāĻ•ā§‡ āĻœāĻžāĻ¨āĻžāĻ¤ā§‡ āĻ¯ā§‡ āĻāĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻĒā§‹āĻ°ā§āĻŸā§‡ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸ āĻĒā§‡āĻ¤ā§‡ āĻšāĻžāĻ¯āĻŧāĨ¤

āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡, āĻ†āĻŽāĻ°āĻž āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻ•ā§€-āĻāĻ° āĻ…āĻ§ā§€āĻ¨ā§‡ āĻĢāĻžāĻ¯āĻŧāĻžāĻ°āĻŦā§‡āĻ¸ā§‡ āĻāĻ•āĻŸāĻŋ āĻ–ā§‹āĻ˛āĻž āĻĒā§‹āĻ°ā§āĻŸ āĻĒā§āĻ°āĻ•āĻžāĻļ āĻ•āĻ°āĻŦ āĻāĻŦāĻ‚ āĻāĻ° āĻ¸āĻžāĻŦāĻŸā§āĻ°āĻŋāĻ¤ā§‡ āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸāĻ—ā§āĻ˛āĻŋ āĻļā§āĻ¨āĻŦāĨ¤

  • āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻ•āĻ˛ recvfrom(), āĻāĻ‡ āĻĒā§‹āĻ°ā§āĻŸā§‡ āĻ¯ā§‡āĻ•ā§‹āĻ¨ āĻšā§‹āĻ¸ā§āĻŸ āĻĨā§‡āĻ•ā§‡ āĻ†āĻ¸āĻž āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸ āĻ—ā§āĻ°āĻšāĻŖ āĻ•āĻ°āĻžāĨ¤

āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻāĻ‡ āĻŦāĻ¨ā§āĻĻāĻ°ā§‡ āĻĒāĻžāĻ āĻžāĻ¨ā§‹ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸā§‡āĻ° āĻ‡āĻ¨āĻ•āĻžāĻŽāĻŋāĻ‚ āĻ¸āĻžāĻ°āĻŋ āĻšā§‡āĻ• āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤

āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻĒā§‹āĻ°ā§āĻŸā§‡āĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻ¸āĻžāĻ°āĻŋ āĻ†āĻ›ā§‡, āĻāĻŦāĻ‚ āĻ†āĻŽāĻ°āĻž WebRTC āĻĄā§‡āĻŸāĻžāĻ—ā§āĻ°āĻžāĻŽā§‡āĻ° āĻļā§āĻ°ā§āĻ¤ā§‡ āĻ‰ā§ŽāĻ¸ āĻāĻŦāĻ‚ āĻ—āĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻĒā§‹āĻ°ā§āĻŸ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻŋ āĻ¯āĻžāĻ¤ā§‡ āĻ†āĻŽāĻ°āĻž āĻœāĻžāĻ¨āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ āĻ¯ā§‡ āĻ¯āĻ–āĻ¨ āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸ āĻ†āĻ¸āĻŦā§‡ āĻ¤āĻ–āĻ¨ āĻ•ā§‹āĻ¨ āĻ¸āĻžāĻ°āĻŋāĻ¤ā§‡ āĻĢāĻ°āĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤

āĻ•āĻ˛āĻŸāĻŋ āĻ¨āĻ¨-āĻŦā§āĻ˛āĻ•āĻŋāĻ‚, āĻ¤āĻžāĻ‡ āĻ¯āĻĻāĻŋ āĻ•ā§‹āĻ¨āĻ“ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸ āĻ¨āĻž āĻĨāĻžāĻ•ā§‡, āĻ†āĻŽāĻ°āĻž āĻ•ā§‡āĻŦāĻ˛ -1 āĻĢā§‡āĻ°āĻ¤ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ¸ā§‡āĻŸ āĻ•āĻ°āĻŋ errno=EWOULDBLOCK.

  • āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ•āĻŋāĻ›ā§ āĻŦāĻžāĻšā§āĻ¯āĻŋāĻ• āĻ‰āĻĒāĻžāĻ¯āĻŧā§‡ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡āĻ° āĻ†āĻ‡āĻĒāĻŋ āĻāĻŦāĻ‚ āĻĒā§‹āĻ°ā§āĻŸ āĻ—ā§āĻ°āĻšāĻŖ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ•āĻ˛ āĻ•āĻ°ā§‡ sendto(). āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ…āĻ­ā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§€āĻŖ āĻ•āĻ˛āĻ“ āĻ•āĻ°ā§‡āĨ¤ bind(), āĻ¤āĻžāĻ‡ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ recvfrom() āĻ¸ā§āĻĒāĻˇā§āĻŸāĻ­āĻžāĻŦā§‡ āĻŦāĻžāĻ‡āĻ¨ā§āĻĄ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ¨āĻž āĻ•āĻ°ā§‡āĻ‡ āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻĒāĻžāĻŦā§‡āĻ¨āĨ¤

āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡, āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻŦāĻžāĻšā§āĻ¯āĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚ āĻ•ā§€ āĻ—ā§āĻ°āĻšāĻŖ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ resolve() āĻāĻ•āĻŸāĻŋ āĻ†āĻ‡āĻĒāĻŋ āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻĒā§‡āĻ¤ā§‡āĨ¤

āĻāĻ‡ āĻŽā§āĻšā§āĻ°ā§āĻ¤ā§‡, āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ WebRTC āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻļā§‡āĻ• āĻļā§āĻ°ā§ āĻ•āĻ°āĻŋ āĻ¯āĻĻāĻŋ āĻĻā§āĻŸāĻŋ āĻ¸āĻšāĻ•āĻ°ā§āĻŽā§€ āĻāĻ–āĻ¨āĻ“ āĻāĻ•ā§‡ āĻ…āĻĒāĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤ āĻ¨āĻž āĻĨāĻžāĻ•ā§‡āĨ¤ āĻāĻ•āĻ‡ āĻĒāĻŋāĻ¯āĻŧāĻžāĻ°ā§‡āĻ° āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻĒā§‹āĻ°ā§āĻŸā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻāĻ•āĻ‡ WebRTC DataChannel āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĨ¤

āĻ†āĻŽāĻ°āĻž āĻĒāĻ°ā§‹āĻ•ā§āĻˇ āĻ•āĻžāĻœāĻ“ āĻ•āĻ°āĻŋ bind()āĻ¯āĻžāĻ¤ā§‡ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€āĻ¤ā§‡ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ sendto() āĻ¯āĻĻāĻŋ āĻāĻŸāĻŋ āĻ•ā§‹āĻ¨ā§‹ āĻ•āĻžāĻ°āĻŖā§‡ āĻŦāĻ¨ā§āĻ§ āĻšāĻ¯āĻŧā§‡ āĻ¯āĻžāĻ¯āĻŧāĨ¤

āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°āĻ•ā§‡ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ…āĻŦāĻšāĻŋāĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻ¯āĻ–āĻ¨ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ Firebase-āĻ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻĒā§‹āĻ°ā§āĻŸ āĻ¤āĻĨā§āĻ¯ā§‡āĻ° āĻ…āĻ§ā§€āĻ¨ā§‡ āĻ¤āĻžāĻ° SDP āĻ…āĻĢāĻžāĻ°āĻŸāĻŋ āĻ˛ā§‡āĻ–ā§‡, āĻāĻŦāĻ‚ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻ¸ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ¤āĻžāĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻĻāĻŋāĻ¯āĻŧā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻœāĻžāĻ¨āĻžāĻ¯āĻŧāĨ¤

āĻ¨ā§€āĻšā§‡āĻ° āĻšāĻŋāĻ¤ā§āĻ°āĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ¸āĻ•ā§‡āĻŸ āĻ¸ā§āĻ•āĻŋāĻŽā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĒā§āĻ°āĻŦāĻžāĻšā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻāĻŦāĻ‚ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻĨā§‡āĻ•ā§‡ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡ āĻĒā§āĻ°āĻĨāĻŽ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĒā§āĻ°ā§‡āĻ°āĻŖā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻĻā§‡āĻ–āĻžāĻ¯āĻŧ:

Cheerp, WebRTC āĻāĻŦāĻ‚ Firebase āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ C++ āĻĨā§‡āĻ•ā§‡ āĻ“āĻ¯āĻŧā§‡āĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ˛ā§āĻŸāĻŋāĻĒā§āĻ˛ā§‡āĻ¯āĻŧāĻžāĻ° āĻ—ā§‡āĻŽ āĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻž
āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻāĻŦāĻ‚ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻĒāĻ°ā§āĻŦā§‡āĻ° āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻšāĻŋāĻ¤ā§āĻ°

āĻ‰āĻĒāĻ¸āĻ‚āĻšāĻžāĻ°

āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻ‡ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻĒāĻĄāĻŧā§‡ āĻĨāĻžāĻ•ā§‡āĻ¨, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ āĻ¤āĻ¤ā§āĻ¤ā§āĻŦāĻŸāĻŋ āĻ•āĻ°ā§āĻŽā§‡ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻ†āĻ—ā§āĻ°āĻšā§€āĨ¤ āĻ—ā§‡āĻŽāĻŸāĻŋ āĻ–ā§‡āĻ˛āĻž āĻ¯āĻžāĻŦā§‡ teeworlds.leaningtech.com, āĻāĻŸāĻž āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°ā§āĻ¨!


āĻ¸āĻšāĻ•āĻ°ā§āĻŽā§€āĻĻā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻĒā§āĻ°ā§€āĻ¤āĻŋ āĻŽā§āĻ¯āĻžāĻš

āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋ āĻ•ā§‹āĻĄ āĻŦāĻŋāĻ¨āĻžāĻŽā§‚āĻ˛ā§āĻ¯ā§‡ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧ āĻ—āĻŋāĻŸāĻšāĻžāĻŦ. āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻšā§āĻ¯āĻžāĻ¨ā§‡āĻ˛ā§‡ āĻ•āĻĨā§‹āĻĒāĻ•āĻĨāĻ¨ā§‡ āĻ¯ā§‹āĻ— āĻĻāĻŋāĻ¨ Gitter!

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨