рд╣рдо Che ++, WebRTC рдФрд░ Firebase рдХреЗ рд╕рд╛рде C ++ рд╕реЗ рд╡реЗрдм рдкрд░ рдорд▓реНрдЯреАрдкреНрд▓реЗрдпрд░ рдЧреЗрдо рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ

рдкрд░рд┐рдЪрдп


рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рд▓реАрдирд┐рдВрдЧ рдЯреЗрдХреНрдиреЛрд▓реЙрдЬреАрдЬ рд╡реЗрдм рдкрд░ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдбреЗрд╕реНрдХрдЯреЙрдк рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рд╣рдорд╛рд░рд╛ C ++ Cheerp рд╕рдВрдХрд▓рдХ WebAssembly рдФрд░ JavaScript рдХрд╛ рд╕рдВрдпреЛрдЬрди рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрд╕рд╛рди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдФрд░ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рджреЛрдиреЛрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ ред

рдЗрд╕рдХреЗ рдЖрд╡реЗрджрди рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдордиреЗ рд╡реЗрдм рдХреЗ рд▓рд┐рдП рдПрдХ рдорд▓реНрдЯреАрдкреНрд▓реЗрдпрд░ рдЧреЗрдо рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЯреЗрд╡рд░реЛрд░рд╕ рдХреЛ рдЪреБрдирд╛ред Teeworlds рдПрдХ рдмрд╣реБ-рдЦрд┐рд▓рд╛рдбрд╝реА, рджреЛ-рдЖрдпрд╛рдореА рд░реЗрдЯреНрд░реЛ рдЧреЗрдо рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд▓реЗрдХрд┐рди рд╕рдХреНрд░рд┐рдп рд╕рдореБрджрд╛рдп рд╣реИ (рдореЗрд░реЗ рд╕рд╣рд┐рдд!)ред рдпрд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдФрд░ рд╕реАрдкреАрдпреВ рдФрд░ рдЬреАрдкреАрдпреВ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рджреЛрдиреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЫреЛрдЯрд╛ рд╣реИ - рдПрдХ рдЖрджрд░реНрд╢ рдЙрдореНрдореАрджрд╡рд╛рд░ред


Teeworlds рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рд╣рдордиреЗ рд╡реЗрдм рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛрдб рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

  • XMLHttpRequest / fetch рдпрджрд┐ рдиреЗрдЯрд╡рд░реНрдХ рднрд╛рдЧ рдореЗрдВ рдХреЗрд╡рд▓ HTTP рдЕрдиреБрд░реЛрдз рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдпрд╛
  • WebSocketsред

рджреЛрдиреЛрдВ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рд╕рд░реНрд╡рд░ рдШрдЯрдХ рдкрд░ рд╕рд░реНрд╡рд░ рдШрдЯрдХ рдХреА рдореЗрдЬрдмрд╛рдиреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЖрдкрдХреЛ рдкрд░рд┐рд╡рд╣рди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдпреВрдбреАрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рд╡реАрдбрд┐рдпреЛ рдХреЙрдиреНрдлреНрд░реЗрдВрд╕рд┐рдВрдЧ рдФрд░ рдЧреЗрдорд┐рдВрдЧ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░, рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рд▓реАрд╡рд░реА рдХреА рдЧрд╛рд░рдВрдЯреА рдФрд░ рдЯреАрд╕реАрдкреА рдкреИрдХреЗрдЯ рдСрд░реНрдбрд░рд┐рдВрдЧ рдХреБрдЫ рд╡рд┐рд▓рдВрдм рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рддреАрд╕рд░рд╛ рддрд░реАрдХрд╛ рд╣реИ - рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: WebRTC ред

RTCDataChannel рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдФрд░ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди (рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ, рдпрд╣ рдкрд░рд┐рд╡рд╣рди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдпреВрдбреАрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ) рджреЛрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рдмреАрдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рд╕рд░реНрд╡рд░ рдХрдВрдкреЛрдиреЗрдВрдЯ рд╕рд╣рд┐рдд, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдкреВрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдард┐рдирд╛рдИ рд╣реИ: рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рджреЛ WebRTC рд╕рд╛рдереА рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХреЗрдВ, рдЙрдиреНрд╣реЗрдВ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЬрдЯрд┐рд▓ рд╣реИрдВрдбрд╢реЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХрдИ рддреГрддреАрдп-рдкрдХреНрд╖ рд╕рдВрд╕реНрдерд╛рдУрдВ (рдПрдХ рд╕рд┐рдЧреНрдирд▓ рд╕рд░реНрд╡рд░ рдФрд░ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ STUN / TURN рд╕рд░реНрд╡рд░) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рд╣рдо WebRTC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рдПрдкреАрдЖрдИ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ UDP рд╕реЙрдХреЗрдЯреНрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд░реАрдм, рдЬрд┐рд╕реЗ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рд╣рдореЗрдВ рдЖрд╡реЗрджрди рдХреЛрдб (рдЬреЛ рд╣рдо рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдпрдерд╛рд╕рдВрднрд╡ рдХрдо рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ) рдХреЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рд╡рд┐рд╡рд░рдг рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ WebRTC рдХрд╛ рд▓рд╛рдн рд▓реЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рдиреНрдпреВрдирддрдо WebRTC


WebRTC рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдПрдХ рдПрдкреАрдЖрдИ рд╕реВрдЯ рд╣реИ рдЬреЛ рдкреАрдпрд░-рдЯреВ-рдкреАрдпрд░ рдСрдбрд┐рдпреЛ, рд╡реАрдбрд┐рдпреЛ рдФрд░ рдордирдорд╛рдирд╛ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рд╕рд╛рдерд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рднрд▓реЗ рд╣реА рдПрдХ рдпрд╛ рджреЛрдиреЛрдВ рддрд░рдл NAT рд╣реЛ) ICE рдирд╛рдордХ рдПрдХ рддрдВрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ STUN рдФрд░ / рдпрд╛ TURN рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ред рдПрд╕рдбреАрдкреА рдкреНрд░рд╕реНрддрд╛рд╡ рдФрд░ рдЙрддреНрддрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреАрдпрд░ рдЖрдИрд╕реАрдИ рд╕реВрдЪрдирд╛ рдФрд░ рдЪреИрдирд▓ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред

рд╡рд╛рд╣! рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХрд┐рддрдиреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрддред рдЖрдЗрдП рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдЗрди рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ:

  • NAT ( STUN ) рдХреЗ рд▓рд┐рдП рд╕рддреНрд░ рддреНрд░реИрдорд╛рд╕рд┐рдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдПрдБ - NAT рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдиреЗ рдФрд░ рдореЗрдЬрдмрд╛рди рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдбреЗрдЯрд╛ рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЬреЛрдбрд╝реА (рдЖрдИрдкреА, рдкреЛрд░реНрдЯ) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ред рдпрджрд┐ рд╡рд╣ рдЕрдкрдирд╛ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╕рд╣рдХрд░реНрдореА рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  • NAT ( TURN ) рдХреЗ рдЖрд╕-рдкрд╛рд╕ рд░рд┐рд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ Traversal рдХрд╛ рдЙрдкрдпреЛрдЧ NAT рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдбреЗрдЯрд╛ рдХреЛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рдХреЗ рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рджреЛрдиреЛрдВ рд╕рд╛рдерд┐рдпреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд▓рдВрдм рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ STUN рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдорд╣рдВрдЧрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрдЪрд╛рд░ рд╕рддреНрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдпрд╣ рдПрдХрдорд╛рддреНрд░ рд╕рдВрднрд╡ рд╡рд┐рдХрд▓реНрдк рд╣реЛрддрд╛ рд╣реИред
  • рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡ рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рдЗрд╕реНрдЯреИрдмреНрд▓рд┐рд╢рдореЗрдВрдЯ ( ICE ) рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реАрдзреЗ рддреМрд░ рдкрд░ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рд╛рдерд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рджреЛ рд╕рд╛рдерд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡реЛрддреНрддрдо рд╕рдВрднрд╡ рддрд░реАрдХреЗ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ STUN рдФрд░ TURN рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реАред
  • рд╕рддреНрд░ рд╡рд┐рд╡рд░рдг рдкреНрд░реЛрдЯреЛрдХреЙрд▓ ( рдПрд╕рдбреАрдкреА ) рдХрдиреЗрдХреНрд╢рди рдЪреИрдирд▓ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╛рд░реВрдк рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдИрд╕реАрдИ рдЙрдореНрдореАрджрд╡рд╛рд░, рдорд▓реНрдЯреАрдореАрдбрд┐рдпрд╛ рдХреЛрдбрдХ (рдСрдбрд┐рдпреЛ / рд╡реАрдбрд┐рдпреЛ рдЪреИрдирд▓ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ), рдЖрджрд┐ ... рд╕рд╛рдерд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдПрд╕рдбреАрдкреА рдкреНрд░рд╕реНрддрд╛рд╡ ("рдкреНрд░рд╕реНрддрд╛рд╡") рднреЗрдЬрддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдПрд╕рдбреАрдкреА рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИред рдЙрддреНрддрд░ ("рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛")ред рдЙрд╕рдХреЗ рдмрд╛рдж, рдПрдХ рдЪреИрдирд▓ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрдмрдВрдз рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╛рдерд┐рдпреЛрдВ рдХреЛ STUN рдФрд░ TURN рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдПрдХрддреНрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╡рд┐рдирд┐рдордп рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рд╕реАрдзреЗ рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдбреЗрдЯрд╛ рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдЙрдЯ-рдСрдл-рдмреИрдВрдб рддрдВрддреНрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдПрдХ рд╕рд┐рдЧреНрдирд▓ рд╕рд░реНрд╡рд░ред

рдПрдХ рд╕рд┐рдЧреНрдирд▓ рд╕рд░реНрд╡рд░ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдХрд╛рд░реНрдп "рд╣реИрдВрдбрд╢реЗрдХ" рдЪрд░рдг рдореЗрдВ рд╕рд╛рдерд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдирд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рдЪрд┐рддреНрд░ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред


WebRTC рд╕рд░рд▓реАрдХреГрдд рд╣рд╛рде рдорд┐рд▓рд╛рдирд╛ рдЕрдиреБрдХреНрд░рдо

Teeworlds рдиреЗрдЯрд╡рд░реНрдХ рдореЙрдбрд▓ рдЕрд╡рд▓реЛрдХрди


Teeworlds рдХреА рдиреЗрдЯрд╡рд░реНрдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:

  • рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдШрдЯрдХ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИрдВред
  • рдЧреНрд░рд╛рд╣рдХ рдХрдИ рд╕рд░реНрд╡рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдЧреЗрдо рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЧреЗрдо рд╣реЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реИред
  • рдЧреЗрдо рдореЗрдВ рд╕рд╛рд░рд╛ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдЬрд░рд┐рдП рд╣реЛрддрд╛ рд╣реИред
  • рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рд╕реНрдЯрд░ рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рд╕рднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рд░реНрд╡рд░реЛрдВ рдХреА рд╕реВрдЪреА рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЧреЗрдо рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред

рдбреЗрдЯрд╛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЗ рд▓рд┐рдП рд╡реЗрдмрдЖрд░рдЯреАрд╕реА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг, рд╣рдо рдЧреЗрдо рдХреЗ рд╕рд░реНрд╡рд░ рдШрдЯрдХ рдХреЛ рдЙрд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдерд┐рдд рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдПрдХ рдорд╣рд╛рди рдЕрд╡рд╕рд░ рджреЗрддрд╛ рд╣реИ ...

рд╕рд░реНрд╡рд░ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдВ


рд╕рд░реНрд╡рд░ рд▓реЙрдЬрд┐рдХ рдХреА рдХрдореА рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдлрд╛рдпрджрд╛ рд╣реИ: рд╣рдо рдкреВрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЧрд┐рдердм рдкреЗрдЬ рдкрд░ рдпрд╛ рдХреНрд▓рд╛рдЙрдбрдлрд╝реЗрдпрд░ рдХреЗ рдкреАрдЫреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рд╕реНрдерд┐рд░ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдирд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдпрд╣ рдореБрдлрд╝реНрдд рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЙрдЪреНрдЪ рдЕрдкрдЯрд╛рдЗрдо рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЕрдЧрд░ рд╣рдо рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реИрдВ рдФрд░ рдЦреЗрд▓ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХрд╛ рдЖрдзреБрдирд┐рдХреАрдХрд░рдг рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрднреА рднреА рдПрдХ рдмрд╛рд╣рд░реА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

  • рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ STUN рд╕рд░реНрд╡рд░: рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рдореБрдлреНрдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред
  • рдХрдо рд╕реЗ рдХрдо рдПрдХ TURN рд╕рд░реНрд╡рд░: рдпрд╣рд╛рдВ рдХреЛрдИ рдореБрдлреНрдд рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдпрд╛ рддреЛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рдХрдиреЗрдХреНрд╢рди STUN рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рд╕рдЪреНрдЪрд╛ P2p рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди TURN рдХреЛ рдПрдХ рдХрдордмреИрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
  • рд╕рд┐рдЧреНрдирд▓ рд╕рд░реНрд╡рд░: рдЕрдиреНрдп рджреЛ рдкрд╣рд▓реБрдУрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕рд┐рдЧреНрдирд▓рд┐рдВрдЧ рдорд╛рдирдХреАрдХреГрдд рдирд╣реАрдВ рд╣реИред рд╕рд┐рдЧреНрдирд▓ рд╕рд░реНрд╡рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛ рдпрд╣ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдереЛрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
  • Teeworlds рдорд╛рд╕реНрдЯрд░ рд╕рд░реНрд╡рд░: рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рд╕рд░реНрд╡рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдФрд░ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рдХреНрд▓рд╛рдЗрдВрдЯ рд╣рдореЗрд╢рд╛ рдРрд╕реЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╡реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ), рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рдореЗрдВ рднрд╛рдЧ рд▓реЗ рд╕рдХреЗрдВред

рд╣рдордиреЗ Google рдХреЗ рдореБрдлреНрдд STUN рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдФрд░ рдЕрдкрдиреЗ рджрдо рдкрд░ рдПрдХ TURN рд╕рд░реНрд╡рд░ рдХреЛ рддреИрдирд╛рдд рдХрд┐рдпрд╛ред

рдкрд┐рдЫрд▓реЗ рджреЛ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рдлрд╛рдпрд░рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛:

  • Teeworlds рдорд╛рд╕реНрдЯрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓рддрд╛ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдкреНрд░рддреНрдпреЗрдХ рд╕рдХреНрд░рд┐рдп рд╕рд░реНрд╡рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА (рдирд╛рдо, IP, рдореИрдк, рдореЛрдб, ...) рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВред рд╕рд░реНрд╡рд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреВрд░реА рд╕реВрдЪреА рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рд╣реЛрдо рдкреЗрдЬ рдкрд░ рд╕реВрдЪреА рдХреЛ HTML рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХреЗрдВ рдФрд░ рд╕реАрдзреЗ рдЧреЗрдо рдореЗрдВ рдЬрд╛ рд╕рдХреЗрдВред
  • рд╕рд┐рдЧреНрдирд▓рд┐рдВрдЧ рд╣рдорд╛рд░реЗ рд╕реЙрдХреЗрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдирд┐рдХрдЯрддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред


рдЧреЗрдо рдХреЗ рдЕрдВрджрд░ рдФрд░ рд╣реЛрдо рдкреЗрдЬ рдкрд░ рд╕рд░реНрд╡рд░ рдХреА рд╕реВрдЪреА

рд╕реЙрдХреЗрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Posix рдпреВрдбреАрдкреА рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ рдПрдХ рдПрдкреАрдЖрдИ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рд╣рдо рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдбреЗрдЯрд╛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдиреНрдпреВрдирддрдо рдиреНрдпреВрдирддрдо рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реВрдЯрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ: рд╕рднреА рдкреАрдпрд░ рдлрд╛рдпрд░рдмреЗрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЬреБрдбрд╝реЗ рдПрдХ рд╣реА "рд╡рд░реНрдЪреБрдЕрд▓ рд▓реИрди" рдореЗрдВ рд╣реИрдВред

рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ IP рдкрддреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ: рд╕рд╛рдерд┐рдпреЛрдВ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП, Firebase рдХреБрдВрдЬрд┐рдпреЛрдВ (рдбреЛрдореЗрди рдирд╛рдо рдХреЗ рд╕рдорд╛рди) рдХреЗ рдЕрдиреВрдареЗ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕рд╣рдХрд░реНрдореА рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреБрдВрдЬреА рдХреЛ "рдирдХрд▓реА" рдЖрдИрдкреА рдкрддреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЖрдИрдкреА рдПрдбреНрд░реЗрд╕ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдЧреИрд░-рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп рд╣реИред

рдпрд╣рд╛рдВ рдиреНрдпреВрдирддрдо рдПрдкреАрдЖрдИ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

// 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 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдХреЛрдб рдХреЛ рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдИрд╡реЗрдВрдЯ рд▓реВрдк рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реЗ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ (рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ 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 )ред

рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЖрдИрдкреА рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдФрд░ рдЙрдирдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рд╕рд╛рде рд╣реА рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЙрдирдХрд╛ рдирд┐рдкрдЯрд╛рди), рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдерд┐рдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдЗрд╕рдХреЗ рд▓рд┐рдП, reverseResolve рдФрд░ reverseResolve рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреБрдВрдЬреА рдХрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ рдорд╛рд╕реНрдЯрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ), рдФрд░ рдЗрд╕реЗ рдЖрдВрддрд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЖрдИрдкреА рдкрддреЗ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдмрд╛рдХреА рдПрдкреАрдЖрдИ рднреА рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред

рдпрд╣ DNS рд▓реБрдХрдЕрдк рдХреЗ рд╕рдорд╛рди рд╣реИ, рдХреЗрд╡рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрд░реНрдерд╛рддреН, рдЖрдИрдкреА рдкрддреЗ рд╡рд┐рднрд┐рдиреНрди рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рдмреАрдЪ рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡реИрд╢реНрд╡рд┐рдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЖрд▓рд╕реА рдорд┐рд╢реНрд░рдг


UDP рдХреЛ рдХрдиреЗрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рджреЗрдЦрд╛, рджреЛ рд╕рд╛рдерд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, WebRTC рдХреЛ рдПрдХ рд▓рдВрдмреА рдХрдиреЗрдХреНрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЕрдЧрд░ рд╣рдо рдЕрдореВрд░реНрддрддрд╛ рдХрд╛ рд╕рдорд╛рди рд╕реНрддрд░ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, (рдкрд╣рд▓реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд╕рд╣рдХрд░реНрдореА рдХреЗ рд╕рд╛рде recvfrom / recvfrom ), рддреЛ рд╣рдореЗрдВ рдПрдкреАрдЖрдИ рдХреЗ рдЕрдВрджрд░ рдПрдХ "рдЖрд▓рд╕реА" (рд╡рд┐рд▓рдВрдмрд┐рдд) рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред

рдпреВрдбреАрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ "рд╕рд░реНрд╡рд░" рдФрд░ "рдХреНрд▓рд╛рдЗрдВрдЯ" рдХреЗ рдмреАрдЪ рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рд╡рд┐рдирд┐рдордп рдХреЗ рджреМрд░рд╛рди рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

  • рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ bind() рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреЛрд░реНрдЯ рдкрд░ рдкреИрдХреЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рд╕рд░реНрд╡рд░ рдХреБрдВрдЬреА рдХреЗ рддрд╣рдд рдлрд╛рдпрд░рдмреЗрд╕ рдореЗрдВ рдЦреБрд▓реЗ рдмрдВрджрд░рдЧрд╛рд╣ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕рдХреЗ рдЙрдкрд╢реАрд░реНрд╖рдХ рдореЗрдВ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реБрдиреЗрдВрдЧреЗред

  • рд╕рд░реНрд╡рд░ recvfrom() рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдХрд┐рд╕реА рднреА рд╣реЛрд╕реНрдЯ рд╕реЗ рдкреИрдХреЗрдЯ рдХреЛ рдЗрд╕ рдкреЛрд░реНрдЯ рдкрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдЗрд╕ рдкреЛрд░реНрдЯ рдкрд░ рднреЗрдЬреЗ рдЧрдП рдкреИрдХреЗрдЯреЛрдВ рдХреА рдЖрдиреЗ рд╡рд╛рд▓реА рдХрддрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдкреНрд░рддреНрдпреЗрдХ рдкреЛрд░реНрдЯ рдХреА рдЕрдкрдиреА рдХрддрд╛рд░ рд╣реЛрддреА рд╣реИ, рдФрд░ рд╣рдо WebRTC рдбреЗрдЯрд╛рдЧреНрд░рд╛рдо рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕реНрд░реЛрдд рдФрд░ рдЧрдВрддрд╡реНрдп рдкреЛрд░реНрдЯреНрд╕ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓ рд╕рдХреЗ рдХрд┐ рдПрдХ рдирдпрд╛ рдкреИрдХреЗрдЯ рдЖрдиреЗ рдкрд░ рдХреМрди рд╕реА рдХрддрд╛рд░ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдирд╛ рд╣реИред

рдХреЙрд▓ рдиреЙрди-рдмреНрд▓реЙрдХрд┐рдВрдЧ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдХреЛрдИ рдкреИрдХреЗрдЯ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рд╣рдо рдмрд╕ -1 рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ errno=EWOULDBLOCK рд╕реЗрдЯ errno=EWOULDBLOCK ред

  • рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдХреБрдЫ рдмрд╛рд╣рд░реА рдорд╛рдзреНрдпрдореЛрдВ рд╕реЗ, рд╕рд░реНрд╡рд░ рдХреЗ IP рдФрд░ рдкреЛрд░реНрдЯ, рдФрд░ sendto() рдХреЙрд▓ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, bind() рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдВрддрд░рд┐рдХ рдХреЙрд▓ bind() рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмрд╛рдж рдореЗрдВ recvfrom() рдХреЛ рдмрд╛рдЗрдВрдб рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреАред

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдИрдкреА рдПрдбреНрд░реЗрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП resolve() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рд╣рдо WebRTC рдХреЗ "рд╣реИрдВрдбрд╢реЗрдХ" рдХреА рд╢реБрд░реБрдЖрдд рдХрд░рддреЗ рд╣реИрдВ рдпрджрд┐ рджреЛ рд╕рд╛рдерд┐рдпреЛрдВ рдХреЛ рдЕрднреА рддрдХ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рд╣реА рд╕рд╣рдХрд░реНрдореА рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХреЗ рдХрдиреЗрдХреНрд╢рди рдПрдХ рд╣реА DataRannel WebRTC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рд╣рдо рдЕрдкреНрд░рддреНрдпрдХреНрд╖ bind() рднреА рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╕рд░реНрд╡рд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ sendto() рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЕрдЧрд▓реЗ sendto() рдореЗрдВ рдкреБрди: рдХрдиреЗрдХреНрдЯ рд╣реЛ рд╕рдХреЗред

рд╕рд░реНрд╡рд░ рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХреНрд▓рд╛рдЗрдВрдЯ рдлрд╛рдпрд░рдмреЗрд╕ рдореЗрдВ рд╕рд░реНрд╡рд░ рдкреЛрд░реНрдЯ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рддрд╣рдд рдЕрдкрдирд╛ рдПрд╕рдбреАрдкреА рдСрдлрд░ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдФрд░ рд╕рд░реНрд╡рд░ рдЕрдкрдиреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИред



рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЖрд░реЗрдЦ рдПрдХ рд╕реЙрдХреЗрдЯ рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдЧрддрд┐ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рд╕рд░реНрд╡рд░ рддрдХ рдкрд╣рд▓реЗ рд╕рдВрджреЗрд╢ рдХреЗ рдкреНрд░рд╕рд╛рд░рдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ:


рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рдкреВрд░рд╛ рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреЗрдк рдЖрд░реЗрдЦ

рдирд┐рд╖реНрдХрд░реНрд╖


рдпрджрд┐ рдЖрдк рдЕрдВрдд рддрдХ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╢рд╛рдпрдж рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рджреЗрдЦрдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдЦреЗрд▓ teeworlds.leaningtech.com рдкрд░ рдЦреЗрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВ!


рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рджреЛрд╕реНрддрд╛рдирд╛ рдореИрдЪ

Github рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛрдб рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИред рдЧрдЯрд░ рдореЗрдВ рд╣рдорд╛рд░реЗ рдЪреИрдирд▓ рдкрд░ рдЪреИрдЯрд┐рдВрдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ!

Source: https://habr.com/ru/post/hi468031/


All Articles