рдХреИрдУрд╕ рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░реЗрдВ

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


рдЪреЗрддрд╛рд╡рдиреА! рдмрд╛рдЗрдХ рдХреЗ рдЕрдВрджрд░ред


рд╕рдорд╕реНрдпрд╛ рдпрд╛ рд╕рдорд╕реНрдпрд╛ рдХрдерди


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


рдореИрдВрдиреЗ рдЦреБрдж рдХреЙрд▓-рд╕реЗрдВрдЯрд░ рдХреЗ рд▓рд┐рдП рдлреНрд░рдВрдЯ-рдПрдВрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ред


рдпрд╣ рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА рд╕рд┐рд╕реНрдЯрдо рдШрдЯрдХреЛрдВ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдЬреЛ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдмрд╣рддреА рд╣реИред рдФрд░ рдЕрдЧрд░ рд╣рдо рдЗрд╕ рддрдереНрдп рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рдСрдкрд░реЗрдЯрд░ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдкреНрд░рдмрдВрдзрдХ рдФрд░ рдкреНрд░рд╢рд╛рд╕рдХ рднреА рд╣реИ, рддреЛ рдЖрдк рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрд╡реЗрджрди рдХреЛ рдХрд┐рддрдирд╛ "рд╕рдВрдЪрд╛рд░" рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред


рдЬрдм рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╢реБрд░реВ рдХреА рдЧрдИ рдереА рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЦреБрдж рдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдлреА рдХрд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рд╕рд┐рд╕реНрдЯрдо рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХреА рд╕рдорд╕реНрдпрд╛ рдЗрд╕рдХреЗ рд╕рднреА рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдкреИрджрд╛ рд╣реБрдИред


рдпрд╣ рдмрд╛рдд рд╣реИред рдХрдИ рдШрдЯрдХ рд╣реИрдВ рдФрд░ рд╡реЗ рд╕рднреА рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрдирдореЗрдВ рд╕реЗ рд▓рдЧрднрдЧ рд╕рднреА рдШрдЯрдХ рдПрдХ рдмрд╛рд░ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдереЗред рд╡рд╣ рд╕рдордЧреНрд░ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдмрд┐рдХреНрд░реА рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рдирд┐рд░реНрдгрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЙрдирдХреЗ рдмреАрдЪ рдХреЛрдИ рдПрдХрд▓ (рд╕рд┐рд╕реНрдЯрдо) API рдФрд░ рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдЪрд╛рд░ рдорд╛рдирдХ рдирд╣реАрдВ рд╣реИред


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


рдпрд╣ рдЬрд▓реНрдж рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ (рдореЗрд░реЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рд▓рд┐рдП рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдбрд┐рдЬрд╛рдЗрди рдЪрд░рдг рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереА) рдХрд┐ рдШрдЯрдХреЛрдВ рдХреЗ рдмреАрдЪ "рдПрдХреАрдХреГрдд рд╕рдВрдЪрд╛рд░ рднрд╛рд╖рд╛" рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИред


рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓рд╛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдХреБрдЫ рдбреЗрдЯрд╛рд╕реЗрдЯ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реЗ рдЙрд╕ рдпреБрд╡рдХ рдХреЛ рдХрд╛рд░реНрдп рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рд▓ / рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдШрдЯрдХ рд░рдЦрддрд╛ рд╣реИред рд╡рд╣ рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдирдпрд╛ рдбреЗрдЯрд╛рд╕реЗрдЯ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП, рдЧрдзреЗ, рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдЕрдкрдбреЗрдЯ рдХреЗ рдЕрдЧрд▓реЗ рджрд┐рди ... рдУрд╣ ... рдХреЙрд▓-рд╕реЗрдВрдЯрд░ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдЪрд╛рдирдХ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдЗрд╕рд╕реЗ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВред


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


рд╡реЗ рд╕реЛрдЪрдиреЗ рд▓рдЧреЗ рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдордиреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛:


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


рджреВрд╕рд░рд╛ рд╡рд╛рд▓рд╛ ред рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рди рдХреЗрд╡рд▓ рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди, рдмрд▓реНрдХрд┐ рд░рди-рдЯрд╛рдЗрдо рднреА рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред


рддреАрд╕рд░рд╛ ред рдЪреВрдВрдХрд┐ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреМрд╢рд▓ рд╕реНрддрд░ рд╡рд╛рд▓реЗ рд▓реЛрдЧ рдШрдЯрдХреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╡рд┐рд╡рд░рдг рднрд╛рд╖рд╛ рд╕рд░рд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред


рдЪреМрдерд╛ ред рдЬреЛ рднреА рд╕рдорд╛рдзрд╛рди рд╣реИ, рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ, рддреЛ рдЖрдИрдбреАрдИ рдХреЛ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред


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


рддрдм JSON рдореЗрдВ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ред рдЦреИрд░, рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ?


рдЦреИрд░, рдлрд┐рд░ рдореИрдВрдиреЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред рдФрд░ рдЗрд╕ рдкрд░ рдпрд╣ рдкрдж рдкреВрд░рд╛ рд╣реЛ рд╕рдХрддрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐рд╕реА рдФрд░ рдиреЗ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ред


рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЬрд╣рд╛рдВ рдШрдЯрдХреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдХрд╛ рдореБрджреНрджрд╛ рдлрд┐рд░ рд╕реЗ рдЕрдкрдиреА рдкреВрд░реА рдХреНрд╖рдорддрд╛ рддрдХ рдмрдврд╝ рдЧрдпрд╛, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рджрдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдиреАрдЪреЗ рдХреНрдпрд╛ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред


рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдореЗрдВ рд╕реЗрд░реЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:


  • рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЬрдирд░реЗрдЯрд░
  • рдкреНрд░рджрд╛рддрд╛
  • рдЧреНрд░рд╛рд╣рдХ
  • рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдкреНрд░реЛрдЯреЛрдХреЙрд▓


рдХрд╛рд░реНрдп рдЗрд╕реЗ рдмрдирд╛рдирд╛ рдерд╛ рддрд╛рдХрд┐:


  • рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕рдВрджреЗрд╢ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕реЗрдЯ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдерд╛ред
  • рд╕рднреА рд╕рдВрджреЗрд╢ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдерд╛ред
  • рд╕рд╣рд╛рдпрдХ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛ред
  • рдФрд░ рд╣рд╛рдВ, рддрд╛рдХрд┐ рдпрд╣ рд╕рдм рдЖрдИрдбреАрдИ рджреНрд╡рд╛рд░рд╛ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рдХреГрддрд┐рдХ рддрд░реАрдХреЗ рд╕реЗ, рдПрдХ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣реА рд╣реИ, рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЬрдирд░реЗрдЯрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рднреА JSON рдХреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред


рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ JSON рдХреНрдпрд╛ рд╣реИред рдЬрд┐рд╕рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред


рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ рдПрдХ рдХрдо рд╣реИрдХрдиреЗрдХ рдЙрджрд╛рд╣рд░рдг - рдЪреИрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реВрдВред


{ "Events": { "NewMessage": { "message": "ChatMessage" }, "UsersListUpdated": { "users": "Array<User>" } }, "Requests": { "GetUsers": {}, "AddUser": { "user": "User" } }, "Responses": { "UsersList": { "users": "Array<User>" }, "AddUserResult": { "error?": "asciiString" } }, "ChatMessage": { "nickname": "asciiString", "message": "utf8String", "created": "datetime" }, "User": { "nickname": "asciiString" }, "version": "0.0.1" } 

рд╕рдм рдХреБрдЫ рдЕрдкрдорд╛рдирдЬрдирдХ рд╕рд░рд▓ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ NewMessage рдФрд░ UsersListUpdated рдИрд╡реЗрдВрдЯ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рд╣реИ; рд╕рд╛рде рд╣реА UsersList рдФрд░ AddUserResult рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реАред рджреЛ рдФрд░ рд╕рдВрд╕реНрдерд╛рдПрдВ рд╣реИрдВ: рдЪреИрдЯрдореИрд╕реЗрдЬ рдФрд░ рдпреВрдЬрд░ред


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рд╡рд░рдг рдХрд╛рдлреА рдкрд╛рд░рджрд░реНрд╢реА рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдереЛрдбрд╝рд╛ рдирд┐рдпрдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред


  • JSON рдореЗрдВ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЙрддреНрдкрдиреНрди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдмрди рдЬрд╛рдПрдЧрд╛
  • рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рдПрдХ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдпрд╛ рдПрдХ рд╡рд░реНрдЧ (рд╕рдВрд╕реНрдерд╛) рдХрд╛ рдПрдХ рд╕рдВрджрд░реНрдн рд╣реИ
  • рдЙрддреНрдкрдиреНрди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдиреЗрд╕реНрдЯреЗрдб рдСрдмреНрдЬреЗрдХреНрдЯ "рдиреЗрд╕реНрдЯреЗрдб" рдХрдХреНрд╖рд╛рдПрдВ рдмрди рдЬрд╛рдПрдВрдЧреЗ, рдЕрд░реНрдерд╛рдд, рдиреЗрд╕реНрдЯреЗрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрдкрдиреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд╕рднреА рдЧреБрдгреЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред

рдЕрдм рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


 npm install ceres.protocol -g ceres.protocol -s chat.protocol.json -o chat.protocol.ts -r 

рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдПрдХ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ-рдЬрдирд░реЗрдЯреЗрдб рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдорд┐рд▓рддрд╛ рд╣реИред рд╣рдо рдХрдиреЗрдХреНрдЯ рдФрд░ рдЙрдкрдпреЛрдЧ:


рдЫрд╡рд┐

рдЗрд╕рд▓рд┐рдП, рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдХреБрдЫ рджреЗрддрд╛ рд╣реИ:


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

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

рдЕрдм рд╣рдо рд╕рдВрджреЗрд╢ рдХреЛ "рдкреИрдХ" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ


 import * as Protocol from '../../protocol/protocol.chat'; const message: Protocol.ChatMessage = new Protocol.ChatMessage({ nickname: 'noname', message: 'Hello World!', created: new Date() }); const packet: Uint8Array = message.stringify(); // Send packet somewhere 

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


рдпрд╣ рд╕реАрдзреЗ рд░рди-рдЯрд╛рдЗрдо рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


 import * as Protocol from '../../protocol/protocol.chat'; const message: Protocol.ChatMessage = new Protocol.ChatMessage({ nickname: 'noname', message: 'Hello World!', created: new Date() }); // Switch to debug mode Protocol.Protocol.state.debug(true); // Now packet will be present as JSON string const packet: string = message.stringify(); // Send packet somewhere 

рд╕рд░реНрд╡рд░ (рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛) рдкрд░, рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдВрджреЗрд╢ рдЕрдирдкреИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 import * as Protocol from '../../protocol/protocol.chat'; const smth = Protocol.parse(packet); if (smth instanceof Error) { // Oops. Something wrong with this packet. } if (Protocol.ChatMessage.instanceOf(smth) === true) { // This is chat message } 

рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕рднреА рдкреНрд░рдореБрдЦ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ:


рдЯрд╛рдЗрдкрдЕрд░реНрдерд╡рд┐рд╡рд░рдгрдЖрдХрд╛рд░, рдмрд╛рдЗрдЯреНрд╕
utf8StringUTF8 рдПрдиреНрдХреЛрдбреЗрдб рд╕реНрдЯреНрд░рд┐рдВрдЧрдПрдХреНрд╕
asciiStringascii рд╕реНрдЯреНрд░рд┐рдВрдЧ1 рдЪрд░рд┐рддреНрд░ - 1 рдмрд╛рдЗрдЯ
int8-128 рд╕реЗ 1271
int16-32768 рд╕реЗ 327672
int32-2147483648 рд╕реЗ 21474836474
uint80 рд╕реЗ 255 рд░реБ1
uint160 рд╕реЗ 65535 рддрдХ2
uint320 рд╕реЗ 4294967295 рдкрд░4
float321.2x10 -38 рд╕реЗ 3.4x10 384
float645.0x10 -324 рд╕реЗ 1.8x10 3088
рдмреВрд▓рд┐рдпрди1

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


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


рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдЕрдкрдиреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рдИрдореЗрд▓ рдбреЗрдЯрд╛ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдирд┐рдореНрди рд╕рдВрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВ:


 { "User": { "nickname": "asciiString", "address": "email" }, "version": "0.0.1" } 

рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдИрдореЗрд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


 export const AdvancedTypes: { [key:string]: any} = { email: { // Binary type or primitive type binaryType : 'asciiString', // Initialization value. This value is used as default value init : '""', // Parse value. We should not do any extra decode operations with it parse : (value: string) => { return value; }, // Also we should not do any encoding operations with it serialize : (value: string) => { return value; }, // Typescript type tsType : 'string', // Validation function to valid value validate : (value: string) => { if (typeof value !== 'string'){ return false; } if (value.trim() === '') { // Initialization value is "''", so we allow use empty string. return true; } const validationRegExp = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/gi; return validationRegExp.test(value); }, } }; 

рд╡рд╣ рд╕рдм рд╣реИред рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рдХреЗ, рд╣рдореЗрдВ рдирдП рдИрдореЗрд▓ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдорд┐рд▓рддрд╛ рд╣реИред рдЬрдм рд╣рдо рдЧрд▓рдд рдкрддреЗ рдХреЗ рд╕рд╛рде рдПрдХ рдЗрдХрд╛рдИ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ


 const user: Protocol.User = new Protocol.User({ nickname: 'Brad', email: 'not_valid_email' }); console.log(user); 

рдУрд╣ ...


 Error: Cannot create class of "User" due error(s): - Property "email" has wrong value; validation was failed with value "not_valid_email". 

рддреЛ, рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗрд╡рд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ "рдЦрд░рд╛рдм" рдбреЗрдЯрд╛ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред


рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ, рдЬрдм рдПрдХ рдирдпрд╛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП, рд╣рдордиреЗ рдХреБрдЫ рдкреНрд░рдореБрдЦ рдЧреБрдгреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИ:


  • рдмрд╛рдЗрдирд░реАрдЯрд╛рдЗрдк - рдПрдХ рдЖрджрд┐рдо рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рд╕рдВрджрд░реНрдн рдЬреЛ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ, рдПрдиреНрдХреЛрдб / рдбреАрдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдкрддрд╛ рдПрдХ рдПрд╕рд╕реАрдЖрдИ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИред
  • tsType Javascript рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реИ, рдЕрд░реНрдерд╛рддреН , рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ
  • рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд╕рдордп рдПрдХ рдирдП рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рд╣рдореЗрдВ рдПрдХ рдЙрддреНрдкрдиреНрди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдорд┐рд▓рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдирдпрд╛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИред

рдЖрдк рдпрд╣рд╛рдВ ceres.protocol рдХреЗ рд╕рднреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░рджрд╛рддрд╛ рдФрд░ рдЧреНрд░рд╛рд╣рдХ


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


рдЧреНрд░рд╛рд╣рдХ


рд╕реГрдЬрди


рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред


рд╕реНрдерд╛рдкрдирд╛


 # Install consumer (client) npm install ceres.consumer --save # Install transport npm install ceres.consumer.browser.ws --save 

рд╕реГрдЬрди


 import Transport, { ConnectionParameters } from 'ceres.consumer.browser.ws'; import Consumer from 'ceres.consumer'; // Create transport const transport:Transport = new Transport(new ConnectionParameters({ host: 'http://localhost', port: 3005, wsHost: 'ws://localhost', wsPort: 3005, })); // Create consumer const consumer: Consumer = new Consumer(transport); 

рдХреНрд▓рд╛рдЗрдВрдЯ, рд╕рд╛рде рд╣реА рдкреНрд░рджрд╛рддрд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВред рдпрд╣реА рд╣реИ, рд╡реЗ рдХреЗрд╡рд▓ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (ceres.protocol) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред

рдШрдЯрдирд╛рдУрдВ


рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдбреЗрд╡рд▓рдкрд░ рдИрд╡реЗрдВрдЯ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ


 import * as Protocol from '../../protocol/protocol.chat'; import Transport, { ConnectionParameters } from 'ceres.consumer.browser.ws'; import Consumer from 'ceres.consumer'; // Create transport const transport:Transport = new Transport(new ConnectionParameters({ host: 'http://localhost', port: 3005, wsHost: 'ws://localhost', wsPort: 3005, })); // Create consumer const consumer: Consumer = new Consumer(transport); // Subscribe to event consumer.subscribe(Protocol.Events.NewMessage, (message: Protocol.Events.NewMessage) => { console.log(`New message came: ${message.message}`); }).then(() => { console.log('Subscription to "NewMessage" is done'); }).catch((error: Error) => { console.log(`Fail to subscribe to "NewMessage" due error: ${error.message}`); }); 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЗрд╡рд▓ рддрднреА рдХреЙрд▓ рдХрд░реЗрдЧрд╛ рдЬрдм рд╕рдВрджреЗрд╢ рдбреЗрдЯрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рд╣реЛрдЧрд╛ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЧрд▓рдд рдбреЗрдЯрд╛ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ NewMessage рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ Protocol.Events.NewMessage рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред


рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдХреНрд▓рд╛рдЗрдВрдЯ рдИрд╡реЗрдВрдЯ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред


 consumer.emit(new Protocol.Events.NewMessage({ message: 'This is new message' })).then(() => { console.log(`New message was sent`); }).catch((error: Error) => { console.log(`Fail to send message due error: ${error.message}`); }); 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдХрд╣реАрдВ рднреА рдЗрд╡реЗрдВрдЯ рдХреЗ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдмрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реЗ рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддреЗ рд╣реИрдВред


рд╣рдо рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЯрд╛рдЗрдк рдХреЗ { [key: string]: string } рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдПрдХ рд╕реАрдорд┐рдд рд╕рдореВрд╣ рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдирд╛рдЬ рдХреЗ рднреАрддрд░, рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреНрд╡реЗрд░реА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред


 consumer.emit( new Protocol.Events.NewMessage({ message: 'This is new message' }), { location: "UK" } ).then(() => { console.log(`New message was sent`); }).catch((error: Error) => { console.log(`Fail to send message due error: ${error.message}`); }); 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд { location: "UK" } рд╕рдВрдХреЗрдд рджреЗрдХрд░, рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЗрд╡рд▓ рдЙрди рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдпреВрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдХреА рдкрд╣рдЪрд╛рди рдХреА рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдпрд╣ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред


рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдЦреБрдж рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд╡реЗрд░реА рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд░реЗрдл рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:


 consumer.ref({ id: '12345678', location: 'UK' }).then(() => { console.log(`Client successfully bound with query`); }); 

рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдХреНрд╡реЗрд░реА рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЙрд╕рдХреЗ рдкрд╛рд╕ "рд╡реНрдпрдХреНрддрд┐рдЧрдд" рдпрд╛ "рд╕рдореВрд╣" рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИред


рдЕрдиреБрд░реЛрдз


рд╣рдо рднреА рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ


 consumer.request( new Protocol.Requests.GetUsers(), // Request Protocol.Responses.UsersList // Expected response ).then((response: Protocol.Responses.UsersList) => { console.log(`Available users: ${response.users}`); }).catch((error: Error) => { console.log(`Fail to get users list due error: ${error.message}`); }); 

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдо рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо ( Protocol.Responses.UserList ) рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЕрдиреБрд░реЛрдз рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рд▓реЗрд╕реНрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЕрдиреНрдп рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╣рдо "рдЧрд┐рд░ рдЬрд╛рдПрдВрдЧреЗ" рдкрдХрдбрд╝ред рдлрд┐рд░, рдпрд╣ рд╣рдореЗрдВ рдЧрд▓рдд рдбреЗрдЯрд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред


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


 function processRequestGetUsers(request: Protocol.Requests.GetUsers, callback: (error: Error | null, results : any ) => any) { // Get user list somehow const users: Protocol.User[] = []; // Prepare response const response = new Protocol.Responses.UsersList({ users: users }); // Send response callback(null, response); // Or send error // callback(new Error(`Something is wrong`)) }; consumer.listenRequest(Protocol.Requests.GetUsers, processRequestGetUsers, { location: "UK" }).then(() => { console.log(`Consumer starts listen request "GetUsers"`); }); 

рдзреНрдпрд╛рди рджреЗрдВ, рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рддреАрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдПрдХ рдХреНрд╡реЗрд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рдХреЛрдИ рдХреНрд╡реЗрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдХреНрд╡реЗрд░реА рднреЗрдЬрддрд╛ рд╣реИ, рддреЛ рдХрд╣реЗрдВ, { location: "RU" } , рддреЛ рд╣рдорд╛рд░реЗ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдРрд╕рд╛ рдХреЛрдИ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕рдХрд╛ рдХреНрд╡реЗрд░реА { location: "UK" } ред


рдПрдХ рдХреНрд╡реЗрд░реА рдореЗрдВ рдЕрд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЧреБрдг рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ


 { location: "UK", type: "managers" } 

рдлрд┐рд░, рдПрдХ рдкреВрд░реНрдг рдХреНрд╡реЗрд░реА рдореИрдЪ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рднреА рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдВрдЧреЗ:


 { location: "UK" } 

рдпрд╛


 { type: "managers" } 

рдкреНрд░рджрд╛рддрд╛


рд╕реГрдЬрди


рдПрдХ рдкреНрд░рджрд╛рддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП (рдФрд░ рд╕рд╛рде рд╣реА рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП), рдЖрдкрдХреЛ рдкреНрд░рджрд╛рддрд╛ рдФрд░ рдкрд░рд┐рд╡рд╣рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рд╕реНрдерд╛рдкрдирд╛


 # Install provider npm install ceres.provider --save # Install transport npm install ceres.provider.node.ws --save 

рд╕реГрдЬрди


 import Transport, { ConnectionParameters } from 'ceres.provider.node.ws'; import Provider from 'ceres.provider'; // Create transport const transport:Transport = new Transport(new ConnectionParameters({ port: 3005 })); // Create provider const provider: Provider = new Provider(transport); 

рдкреНрд░рджрд╛рддрд╛ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд╖рдг рд╕реЗ, рдпрд╣ рдЧреНрд░рд╛рд╣рдХреЛрдВ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред


рдШрдЯрдирд╛рдУрдВ


рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде-рд╕рд╛рде, рдкреНрд░рджрд╛рддрд╛ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ "рд╕реБрди" рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред


рд╕реБрдирдирд╛


 // Subscribe to event provider.subscribe(Protocol.Events.NewMessage, (message: Protocol.Events.NewMessage) => { console.log(`New message came: ${message.message}`); }); 

рдЙрддреНрдкрдиреНрди


 provider.emit(new Protocol.Events.NewMessage({ message: 'This message from provider' })); 

рдЕрдиреБрд░реЛрдз


рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдкреНрд░рджрд╛рддрд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП "рд╕реБрди рд╕рдХрддрд╛ рд╣реИ" рдФрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ


 function processRequestGetUsers(request: Protocol.Requests.GetUsers, clientID: string, callback: (error: Error | null, results : any ) => any) { console.log(`Request from client ${clientId} was gotten.`); // Get user list somehow const users: Protocol.User[] = []; // Prepare response const response = new Protocol.Responses.UsersList({ users: users }); // Send response callback(null, response); // Or send error // callback(new Error(`Something is wrong`)) }; provider.listenRequest(Protocol.Requests.GetUsers, processRequestGetUsers).then(() => { console.log(`Consumer starts listen request "GetUsers"`); }); 

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


рдЙрджрд╛рд╣рд░рдг


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


рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдХреЗ рдФрд░ рдХреБрдЫ рд╕рд░рд▓ рдХреНрд░рд┐рдпрд╛ рдХрд░рдХреЗ рдЪреИрдЯ рдЙрджрд╛рд╣рд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ


рдЧреНрд░рд╛рд╣рдХ рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рд▓реЙрдиреНрдЪ


 cd chat/client npm install npm start 

рдХреНрд▓рд╛рдЗрдВрдЯ http: // localhost: 3000 рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред "рд╕рдВрдЪрд╛рд░" рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рддреБрд░рдВрдд рдЯреИрдм рдЦреЛрд▓реЗрдВред


рдкреНрд░рджрд╛рддрд╛ (рд╕рд░реНрд╡рд░) рдХреА рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рдкреНрд░рдХреНрд╖реЗрдкрдг


 cd chat/server npm install ts-node ./server.ts 

рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЖрдк ts-node рдкреИрдХреЗрдЬ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдпрд╣ рдЖрдкрдХреЛ TS рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрдВрд╕реНрдЯреЙрд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдмрд╕ рд╕рд░реНрд╡рд░ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ JS рдлрд╝рд╛рдЗрд▓ рдЪрд▓рд╛рдПрдБред


 cd chat/server npm run build node ./build/server/server.js 

рд╢реЙ? рдлрд┐рд░ рд╕реЗ!


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


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


рд╣рдореНрд╕рдЯрд░ рдореЗрд░рд╛ рдирд╣реАрдВ, рдмреЗрдЯреЗ рдХрд╛ рд╣рдореНрд╕рдЯрд░ рд╣реИ ред


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


рд▓рд┐рдВрдХ рдФрд░ рдкреИрдХреЗрдЬ


рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рджреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рджреНрд╡рд╛рд░рд╛ рд╣реЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ


  • ceres source: ceres.provider, ceres.consumer рдФрд░ рдЖрдЬ рдЙрдкрд▓рдмреНрдз рд╕рднреА рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯред
  • ceres.protocol рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЬрдирд░реЗрдЯрд░ рд╕реНрд░реЛрдд

рдЙрдкрд▓рдмреНрдз рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рдмрд╛рдж рдПрдирдкреАрдПрдо


  • ceres.protocol рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЬрдирд░реЗрдЯрд░
  • ceres.provider рдкреНрд░рджрд╛рддрд╛
  • ceres.consumer рдЧреНрд░рд╛рд╣рдХ
  • рд▓рдВрдмреЗ рдорддрджрд╛рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд▓рд┐рдП ceres.provider.node.longpoll рдкрд░рд┐рд╡рд╣рди
  • ceres.provider.node.ws рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд╣рди
  • рд▓рдВрдмреЗ рдорддрджрд╛рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд▓рд┐рдП ceres.consumer.browser.longpoll рдкрд░рд┐рд╡рд╣рди
  • ceres.consumer.browser.ws рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд╣рди

рдЕрдЪреНрдЫрд╛ рдФрд░ рд╣рд▓реНрдХрд╛ред

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


All Articles