рд╕рдорд╛рдирд╛рдВрддрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдереНрд░реЗрдб рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдереНрд░реЗрдбреНрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рдЪреАрд▓реЗ рд╕рдВрдЧрдарди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рдкрд╛рд╕ рдХрдИ рдиреБрдХрд╕рд╛рди рд╣реИрдВред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдзрд╛рдЧреЗ рд╕реНрдореГрддрд┐ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдЕрдЦрдВрдбрддрд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓рд╛рдкрд░рд╡рд╛рд╣реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдЖрдк рдЗрд╕реЗ рддрд╛рд▓реЗ рдХреА рдорджрдж рд╕реЗ рджреВрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХреБрдЫ рдХреЛрдб рдХреЛ рд╕рд╛рдЭрд╛ рд╕рдВрд╕рд╛рдзрди рддрдХ рдЕрдирдиреНрдп рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЦреБрдж рдХреЛ рддрд╛рд▓реЗ, рдЗрд╕ рддрдереНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдпрд╛рдж рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдмрджрд▓реЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░рддреА рд╣реИрдВред рд╕рдмрд╕реЗ рдмреБрд░реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЧрддрд┐рд░реЛрдз рдлреИрд▓рд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдорд▓реНрдЯреАрдереНрд░реЗрдбреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрдирд╛ рдЧрд╣рдиреЗ рдХреЗ рдХрд╛рдо рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдереНрд░реЗрдбреНрд╕ рдХреЗ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рдореЗрд░реЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЕрднрд┐рдиреЗрддрд╛рдУрдВ (рдЕрднрд┐рдиреЗрддрд╛рдУрдВ) рдФрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд▓реЗрдирджреЗрди рдореЗрдореЛрд░реА рдХрд╛ рдореЙрдбрд▓ред рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдирд╛рдпрдХ, рдЬреИрд╕рд╛ рдХрд┐ рд╢реАрд░реНрд╖рдХ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдкрд╣рд▓реЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрд╕рдЯреАрдПрдо рдкрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЗрдЦ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреА рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВрдЧреЗред
рдПрдХ рдЕрднрд┐рдиреЗрддрд╛ рдореЙрдбрд▓ рдХреНрдпрд╛ рд╣реИ?
рдЗрдВрдЯрд░рдиреЗрдЯ рдЕрднрд┐рдиреЗрддрд╛ рдореЙрдбрд▓ рдХреЗ рд╕рдВрджрд░реНрдн рд╕реЗ рднрд░рд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдХреЗрд╡рд▓ рдЗрддрд┐рд╣рд╛рд╕, рдЖрд╡реЗрджрди, рдЙрдкрдпреЛрдЧ рдХреЗ рдкреИрдЯрд░реНрди рдХреЗ рдмрд┐рдирд╛, рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ред
рддреЛ, рдЕрднрд┐рдиреЗрддрд╛ рдРрд╕реА рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ:
- рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рди рдХрд░реЗрдВ;
- рдХреЗрд╡рд▓ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрдХрд░ рдмрд╛рддрдЪреАрдд рдХрд░реЗрдВ;
- рдЕрднрд┐рдиреЗрддрд╛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрд┐рд╕реА рднреА рджреЛ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ; рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЕрднрд┐рдиреЗрддрд╛ рдкреНрд░рд╛рдкреНрдд рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдПрдХ рдХрддрд╛рд░ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЕрднрд┐рдиреЗрддрд╛ рдЬреЗрдПрдордПрд╕, рдПрдХреНрдЯрд┐рд╡рдПрдордХреНрдпреВ рдпрд╛ рдПрдордПрд╕рдПрдордХреНрдпреВ рдЬреИрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрджреЗрд╢ рдХрддрд╛рд░ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреА рдмрд╣реБрдд рдпрд╛рдж рджрд┐рд▓рд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдИ GUI рдЪреМрдЦрдЯреЗ рдореЗрдВ, рдирд┐рдпрдВрддреНрд░рдг, рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреА рддрд░рд╣, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╣реИрдВред
рд╡рд┐рддрд░рд┐рдд рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ
рдпрд╣ рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирд╛рдВрддрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдореЗрдВ рдХреНрдпреЛрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЧрдгрдирд╛ рдПрдХ рд╣реА рднреМрддрд┐рдХ рдорд╢реАрди рдкрд░ рдШреВрдо рд░рд╣реА рд╣реИ? рдФрд░ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рд╣реИ? рдЕрддреНрдпрдзрд┐рдХ рднрд░реА рд╣реБрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдЪ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ рд╡реЗ рдПрдХ рдорд╢реАрди рдХреА рд╕реАрдорд╛рдУрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЖрд░рд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рд╡рд╛рд╣ рдореЙрдбрд▓ рдмрд┐рд▓реНрдХреБрд▓ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдзрд╛рдЧреЗ рд╕реНрдореГрддрд┐ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╡рд┐рддрд░рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреБрдЫ рд╕рдорд╛рди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдиреЛрдбреНрд╕ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХреЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдиреЛрдбреНрд╕ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдЕрднрд┐рдиреЗрддрд╛ рдХреЗрд╡рд▓ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред
рд╡рд┐рддрд░рд┐рдд рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЛ рдПрдХ рдФрд░ рдлрд╛рдпрджрд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдЕрднрд┐рдиреЗрддрд╛ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЛ рдХрд┐рд╕реА рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ; рдпрд╣ рд░рд╛рдЬреНрдп рдЦреБрдж рдХреЛ рдиреЛрдбреНрд╕ рдХреЗ рдмреАрдЪ рдХреНрд░рдордмрджреНрдз рдФрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рджреВрд╕рд░реА рдУрд░, рдПрдХ рдЕрднрд┐рдиреЗрддрд╛ рдХреЛ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рддреБрд░рдВрдд рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрднрд┐рдиреЗрддрд╛ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░рдиреЗ рдпрд╛ рдПрдХ рд░рд╛рдЬреНрдп рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рдиреЗ, рд╕рдВрджреЗрд╢ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдереЛрдбрд╝реЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕реНрдердЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдЧрд╛ред
рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ, рдЕрднрд┐рдиреЗрддрд╛ рдореЙрдбрд▓ рдХреЛ рдПрд░рд▓рд╛рдВрдЧ рдФрд░ рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реЛрдВ рдХреЗ рдмреАрдЪ рдкреНрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрд╛рд╡рд╛ рд╕рд╣рд┐рдд рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз рдЕрдХреНрдХрд╛ рд╣реИред рдПрдХ рд╣рдм рдкрд░ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА
рдХрд╛ рдЕрд╡рд▓реЛрдХрди рд╣реИ ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдХреНрдХрд╛ рдиреЗ рднреА рдореБрдЭреЗ рд╕рд╣рд╛рдпрдХ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЦреБрдж рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдиреЗ рд╕реЗ рд░реЛрдХ рдирд╣реАрдВ рджрд┐рдпрд╛ред рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рдереА, рдореИрдВ рдиреАрдЪреЗ рдмрддрд╛рдКрдВрдЧрд╛ред рдЗрд╕ рдмреАрдЪ, рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдореЗрд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЕрднрд┐рдиреЗрддрд╛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
nop.actors
рдореИрдВрдиреЗ рдЕрдкрдиреЗ
рдврд╛рдВрдЪреЗ рдореЗрдВ рдЕрднрд┐рдиреЗрддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИред рддрдВрддреНрд░ рдЕрдХреНрдХрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрджреЗрд╢ рд╣рд╕реНрддрд╛рдВрддрд░рдг рд╣реИред
рдЕрднрд┐рдиреЗрддрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХреИрд╕реЗ рдХрд░реЗрдВ? рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдЕрднрд┐рдиреЗрддрд╛ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рд╕реЗрдЯ, рдЕрд░реНрдерд╛рдд рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрджреЗрд╢ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдгред рдпрджрд┐ рд╣рдо рдЙрди рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдирддрд╛рдПрдВ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд░реНрдгрди рдПрдХ рдмреАрдЬреАрдп рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрд╡рдпрдВ рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдЕрднрд┐рдиреЗрддрд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
@Actor public interface Pingable { void ping(String token, Pinger pinger); }
@Actor public interface Pinger { void pong(String token); }
public class DefaultPingable implements Pingable { @Override public void ping(String token, Pinger pinger) { System.out.println("Pinging with: " + token); pinger.pong(token); } }
рдФрд░ рдпрд╣рд╛рдБ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
Pingable pingable = Actors.wrap(Pingable.class, new DefaultPingable()); pingable.ping("hello", new Pinger() { @Override public void pong(String a) { System.out.println("Ping received: " + a); } });
рддрд░реНрдХреЛрдВ рдореЗрдВ рдкрд╛рд░рд┐рдд рдЖрдВрдХрдбрд╝реЛрдВ рдкрд░ рдХреБрдЫ рдкреНрд░рддрд┐рдмрдВрдз рд╣реИрдВред рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдЖрджрд┐рдо, рдкреАрдУрдЬреЗрдУ, рдЕрдиреНрдп рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдФрд░ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдмрддрд╛ рджреЗрдВ рдХрд┐ S рдЙрди рд╕рднреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рдореВрд╣ рд╣реИ рдЬреЛ рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рддрдм:
- рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдФрд░ рдЖрд╡рд░рдг рд╡рд░реНрдЧ рдПрд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ;
- рдЕрднрд┐рдиреЗрддрд╛ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рд╕реА рднреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдПрд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ;
- рдХреЛрдИ рдПрдирдо рдПрд╕ рдореЗрдВ рд╣реИ;
- рд╕реВрдЪреА <рдЯреА>, рд╕реЗрдЯ <рдЯреА>, рдЯреА [] рдПрд╕ рджрд░реНрдЬ рдХрд░реЗрдВ рдЕрдЧрд░ рдЯреА рдПрд╕ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ;
- рдХреЛрдИ рднреА рд╡рд░реНрдЧ рдЬрд┐рд╕рдореЗрдВ рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╣рд╛рдпрдХ рддрд░реАрдХреЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдПрд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдПрд╕ рдореЗрдВ рд╣реИред
рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ HTTP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЛ рджреВрд░рд╕реНрде рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рддрдВрддреНрд░ рд╣реИ рдЬреЛ рдПрдирдУрдкреА рдореЗрдВ рдПрдХреАрдХреГрдд рд╣реИ рдФрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рдХрд┐рд╕реА рдЕрднрд┐рдиреЗрддрд╛ рдХреЛ рджреВрд░рд╕реНрде рд░реВрдк рд╕реЗ рд╕реБрд▓рдн рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ ActorManager рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ ExportActor рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред ActorManager рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
public class PingController { private ActorManager actorManager; @Injected public PingController(ActorManager actorManager) { this.actorManager = actorManager; } public Content pingDemo() { ActorInfo fooInfo = actorManager.exportActor(new DefaultPingable());
рдмреЗрд╢рдХ, рдПрдирдУрдкреА рдврд╛рдВрдЪреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ HttpActorDispatcher рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЗрд╕реЗ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд▓реЗрдЯ рдореЗрдВ рд░рдЦреЗрдВред
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рд╛рдЗрдб рдЕрднрд┐рдиреЗрддрд╛
рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЗ рд╕реВрдЪреАрдмрджреНрдз рдЧреБрдг рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЕрднрд┐рдиреЗрддрд╛ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХрджрдо рд╕рд╣реА рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХреЛ рджреЛрдиреЛрдВ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЕрднрд┐рдиреЗрддрд╛ рдореЙрдбрд▓ рдХреЗ рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рд╡рд╣ nop.actors рдореЗрдВ рд╣реИ!
рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рднреАрддрд░ рд╣реА рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЛ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЙрдирдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЕрднрд┐рдиреЗрддрд╛ рд╡рд░реНрдЧ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдПрдХ рдЕрднрд┐рдиреЗрддрд╛ рдХреЙрд▓ рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рджреВрд╕рд░реЗ, рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдЕрднрд┐рдиреЗрддрд╛ рдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрднрд┐рдиреЗрддрд╛ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рд▓рдкреЗрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдкрд┐рдВрдЬрд░ рдЕрднрд┐рдиреЗрддрд╛ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдХреИрд╕реЗ рд╣реЛрдЧрд╛:
DefaultPinger = actor(function(elem) { this.elem = elem; }); DefaultPinger.prototype.pong = function(token) { var messageElem = document.createElement("div"); messageElem.textContent = token; this.elem.appendChild(messageElem); }
var pinger = actor(new DefaultPinger(document.getElementById("pingResult"))); pinger.pong("hello");
рдпрджрд┐ рдЖрдк рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЗ рдХрд┐рдирд╛рд░реЗ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рддрд░рдл рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреА рдмрд╛рддрдЪреАрдд рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╡рд░рдг рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:
Pingable = {}; Pinger = {}; Pingable.ping = ["value", actorRef(Pinger)]; Pinger.pong = ["value"];
рдпрд╣рд╛рдБ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрдд рдпрд╣ рд╣реИред рдЬрд┐рд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реЗ рдЖрдкрдХреЛ рдЕрднрд┐рдиреЗрддрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрд╕реЗ рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдг рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдкрд╛рд░рд┐рдд рддрд░реНрдХреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рд╣рдореЗрд╢рд╛ рдПрдХ рд╕рд░рдгреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдврд╛рдВрдЪрд╛ рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ рд╕рдордЭрддрд╛ рд╣реИ:
- рд╕реНрдЯреНрд░рд┐рдВрдЧ "рдорд╛рди" рдХрд┐рд╕реА рднреА рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдпрд╛ рдПрдирдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ;
- рдЕрднрд┐рдиреЗрддрд╛ рд░реАрдл (рдП), рдЬрд╣рд╛рдВ рдП рдЕрднрд┐рдиреЗрддрд╛ рдХрд╛ рд╡рд░реНрдгрди рд╣реИ;
- рдПрдХ рддрддреНрд╡ рдП рдХреА рдПрдХ рд╕рд░рдгреА рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рддрд░реНрдХ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрддреНрд╡ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ;
- рдПрдХ рдордирдорд╛рдирд╛ рд╡рд╕реНрддреБ рдХрд╛ рдЕрд░реНрде рд╣реИ POJO, рдФрд░ рд╡рд╕реНрддреБ рдХреЗ рдЧреБрдгреЛрдВ рдХрд╛ рдорд╛рди POJO рдЧреБрдгреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред
рд░рд┐рдореЛрдЯ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ActorRemoting рд╡рд░реНрдЧ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдпрд╣рд╛рдВ рдХреНрд▓рд╛рд╕ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
var remoting = new ActorRemoting("/actors/" + sessionId); var pingable = remoting.importActor(Pingable, nodeId, actorId); remoting.start(pregable.ping("hello", pinger);
рдмреЗрд╢рдХ, рд╕рд░реНрд╡рд░ рдХреЛ рдкрд╣рд▓реЗ рдмреНрд░рд╛рдЙрдЬрд░ рдХреЛ рд╕реЗрд╢рдирдЖрдИрдб, рдиреЛрдбрдЖрдИрдб рдФрд░ рдПрдХреНрдЯрд░рдЖрдИрдб рдХрд┐рд╕реА рддрд░рд╣ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд╣ рдРрд╕рд╛ рддрдм рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рдкреГрд╖реНрда рдЙрддреНрдкрдиреНрди рдХрд░рдХреЗ рдЙрд╕рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдЬреЛрдбрд╝рдХрд░ рдЗрди рдЪрд░реЛрдВ рдХреЛ рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реИред
рдкреВрд░рд╛ рдЙрджрд╛рд╣рд░рдг
рдКрдкрд░, рдореИрдВрдиреЗ рдЕрднрд┐рдиреЗрддрд╛ рдореЙрдбрд▓ рдХреЛ рдПрдирдУрдкреА рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА, рджреЛрдиреЛрдВ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рд╛рдЗрдб рдкрд░ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдорд▓рд╛рд▓ рдерд╛ рдХрд┐ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рд░рдЦрд╛ рдЬрд╛рдПред рддреЛ, рд╣рдореЗрдВ рдирд┐рдореНрди рд╡рд░реНрдЧреЛрдВ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
@Route(prefix = "pingpong") public interface PingRoute { @RoutePattern("/") String main(); }
@RouteBinding(PingRoute.class) public class PingController extends AbstractController { private ActorManager actorManager; @Injected public PingController(ActorManager actorManager) { this.actorManager = actorManager; } public Content main() { ActorInfo pingInfo = actorManager.exportActor(Pingable.class, new DefaultPingable()); return html(createView(PingView.class).setActorInfo(pingInfo)); } }
public class PingView extends Template { PingView setActorInfo(ActorInfo actorInfo); }
@ModuleRequires(modules = ActorsModule.class) public class PingModule extends AbstractModule { @Override public void load() { app.loadPackage(PingModule.class.getPackage().getName()); } }
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде PingView.xml рдЯреЗрдореНрдкрд▓реЗрдЯ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:
<?xml version="1.0" encoding="UTF-8"?> <t:template xmlns:t="http://nop.org/schemas/templating/core"> <t:head> <t:parameter name="actorInfo"/> <t:service name="actorsRoute" class="org.nop.actors.ActorsRoute"/> </t:head> <t:body> <html> <head> <title>A simple actors example</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <script src="${actorsRoute.resource('actors.js')}" type="text/javascript"/> </head> <body> <div> <input type="text" id="argument"/> <button id="pingButton" type="button">Ping</button> </div> <div id="pingResult"/> <script> Pingable = {}; Pinger = {}; Pingable.ping = ["value", actorRef(Pinger)]; Pinger.pong = ["value"]; DefaultPinger = actor(function(elem) { this.elem = elem; }); DefaultPinger.prototype.pong = function(token) { var messageElem = document.createElement("div"); messageElem.textContent = token; this.elem.appendChild(messageElem); } var pinger = actor(new DefaultPinger( document.getElementById("pingResult"))); var remoting = new ActorRemoting("/actors/${actorInfo.sessionId}"); var pingable = remoting.importActor(Pingable, ${actorInfo.nodeId}, ${actorInfo.actorId}); remoting.start(); var argumentElem = document.getElementById("argument"); document.getElementById("pingButton").onclick = function() { pingable.ping(argumentElem.value, pinger); } </script> </body> </html> </t:body> </t:template>
рдПрдХ рд░реЗрдбреА-рдЯреВ-рд░рди рдЙрджрд╛рд╣рд░рдг
рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдкрд░ рд╢рддрд░рдВрдЬ
рдпрд╣рд╛рдВ, рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ: рддреАрди рдЕрднрд┐рдиреЗрддрд╛ рдЦреЗрд▓ рдореЗрдВ рднрд╛рдЧ рд▓реЗ рд░рд╣реЗ рд╣реИрдВ: рджреЛ рдЦрд┐рд▓рд╛рдбрд╝реА рдФрд░ рдПрдХ рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рдиред рдЕрдВрддрд┐рдо рдЕрднрд┐рдиреЗрддрд╛ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреА рдЪрд╛рд▓реЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рджреВрд╕рд░реЗ рдХреА рдЪрд╛рд▓реЛрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред рддреЛ рдРрд╕реЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
@Actor public interface Board { void registerPlayer(Player player, PieceColor color); void move(Player player, BoardLocation source, BoardLocation destination); }
@Actor public interface Player { void moveRejected(); void moved(BoardLocation source, BoardLocation destination); }
рдмреЛрд░реНрдб рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд▓рд┐рдП рдПрдХ рд╣рдЯрдХрд░ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ рдЕрдЧрд░ рдЙрд╕рдиреЗ рдЧрд▓рдд рдХрджрдо рдЙрдард╛рдпрд╛ рдпрд╛ рд╕рдордп рдкрд░ рдирд╣реАрдВ рдЧрдпрд╛ред рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрджреЗрд╢ рджреЛрдиреЛрдВ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡реА рдХреА рдкреНрд░рдЧрддрд┐ рдХреА рд╕реВрдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рд╡реЙрдХрд░ рдХреЛ - рдЗрд╕ рдХрджрдо рдХреА рдкреБрд╖реНрдЯрд┐ рдХреЗ рд╕рдВрдХреЗрдд рдХреЗ рд░реВрдк рдореЗрдВ, рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡реА рдХреЛред
рдмрд╕ рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрд╣реБрдд рднреЛрд▓рд╛ рдмрдирд╛ рд╣реИред рдЪрд╛рд▓ рдХреЛ рдмрдирд╛рдиреЗ рд╡рд╛рд▓рд╛ рдЦрд┐рд▓рд╛рдбрд╝реА рд╕реНрд╡рдпрдВ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕рдХреА рдУрд░ рд╕реЗ рдпрд╣ рдЪрд╛рд▓ рдЪрд▓реА рдЧрдИ рд╣реИред рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдбрд░рддрд╛ рд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░, рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдЕрднрд┐рдиреЗрддрд╛-рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ "рдЧрд┐рд░ рдЧрдпрд╛", рддреЛ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдЦреЗрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрд╣рд╛рд▓ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрди рдХрдорд┐рдпреЛрдВ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
@Actor public interface Board { void authorizePlayer(PlayerObserver observer, String key); }
@Actor public interface Player { void move(BoardLocation source, BoardLocation destination, PieceType promotedType); }
@Actor public interface PlayerObserver { void authorizationAccepted(PieceColor color, Player player); void authorizationRejected(); void moveRejected(); void boardStateChanged(BoardState state); void moved(BoardLocation source, BoardLocation destination); }
рддреЛ рдпрд╣реА рд╣реБрдЖред рдЕрдм рдЦрд┐рд▓рд╛рдбрд╝реА PlayerObserver рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдкреАрдЫреЗ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИред рдФрд░ рдЦреЗрд▓ рдореИрджрд╛рди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдПрдХ рдмреЛрд░реНрдб рдФрд░ рдПрдХ рдЦрд┐рд▓рд╛рдбрд╝реА рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЦрд┐рд▓рд╛рдбрд╝реА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдЦреЗрд▓ рдореИрджрд╛рди рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрд╣рд▓реВ рд╣реИред рдЦреЗрд▓ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╣реБрдП, рдЕрднрд┐рдиреЗрддрд╛-рдЦрд┐рд▓рд╛рдбрд╝реА рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рдЦреЗрд▓ рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕рдВрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рд╕реЗ рдкреБрд╖реНрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЦреЗрд▓ рд╕реЗ рдЬреБрдбрд╝рдХрд░, рдЕрднрд┐рдиреЗрддрд╛ рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рдмреЛрд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкрд▓ рдореЗрдВ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдХреА рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА рдЕрднрд┐рдиреЗрддрд╛ рдФрд░ рдмреЛрд░реНрдб рдЕрднрд┐рдиреЗрддрд╛ рджреЛрдиреЛрдВ рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд░рд╛рдЬреНрдп рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИ, рдПрдирдУрдкреА рдЗрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рдРрд╕рд╛ рдЕрднрд┐рдиреЗрддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдХреЛрдгреЛрдВ рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ AuthorizePlayer рд╕рдВрджреЗрд╢ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг
@Override public void authorizePlayer(PlayerObserver observer, String key) { boolean matches = false; for (PlayerImpl player : players.values()) { if (player.token.equals(key)) { observer.authorizationAccepted(player.color, player); sendFullState(observer); player.setPlayerObserver(observer); updateObserverList(); matches = true; break; } } if (!matches) { observer.authorizationRejected(); } } private void sendFullState(PlayerObserver observer) { BoardState state = new BoardState();
рдпрд╣рд╛рдВ, рдЦрд┐рд▓рд╛рдбрд╝реА рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдмрдХрд┐ рдмреЛрд░реНрдб рд╕рдВрджреЗрд╢ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдЕрднрд┐рдиреЗрддрд╛ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдмрдирд╛ рджреЗрдЧрд╛, рдФрд░ рд╕рд╛рде рд╣реА рдЗрд╕реЗ рдмреЛрд░реНрдб рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░ рджреЗрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдирдпрд╛ рдЕрднрд┐рдиреЗрддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдореЗрдВ рджреВрд╕рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд░рд╛рдЬреНрдп рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрднрд┐рдиреЗрддрд╛-рд╢реНрд░рд╛рдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдПрдХ рдЕрднрд┐рдиреЗрддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдкреВрд░реНрдг рдмреЛрд░реНрдб / рдкреНрд▓реЗрдпрд░ рдЕрднрд┐рдиреЗрддрд╛ рдХреЛрдб
рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП, рдЕрднрд┐рдиреЗрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣рд╛рдБ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
Board = {}; Player = {}; PlayerObserver = {}; BoardLocation = { row : "value", column : "value" }; PieceState = { type : "value", color : "value", location : BoardLocation }; Move = { source : BoardLocation, destination : BoardLocation, piece : "value", capturedPiece : "value" }; BoardState = { moves : [Move], pieces : [PieceState] }; Board.authorizePlayer = [actorRef(PlayerObserver), "value"]; Player.move = [BoardLocation, BoardLocation]; PlayerObserver.authorizationAccepted = ["value", actorRef(Player)]; PlayerObserver.authorizationRejected = []; PlayerObserver.moveRejected = []; PlayerObserver.boardStateChanged = [BoardState]; PlayerObserver.moved = [BoardLocation, BoardLocation];
рдкреНрд▓реЗрдпрд░рдмрд░реНрд╕реНрд╡рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗрд╡рд▓ рдкреГрд╖реНрда рдХреЛ рдлрд┐рд░ рд╕реЗ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬрдм рд╕рд░реНрд╡рд░ рд╕реЗ рд╕рдВрджреЗрд╢ рдЖрддреЗ рд╣реИрдВ рдФрд░ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдЖрдВрдХрдбрд╝рд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдкрд░ рд╕рд░реНрд╡рд░ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИред
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЕрднрд┐рдиреЗрддрд╛ рдХрд╛ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз
рд╣реИ ред
рд╢рддрд░рдВрдЬ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдПрдХ рдбреЗрдореЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдирдУрдкреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╡рд┐рддрд░рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб / рдбреЗрдореЛ / рд╢рддрд░рдВрдЬ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред рдореИрдВрдиреЗ рднреА рддреИрдпрд╛рд░
рд╕реЗрд╡рд╛ рдХреЛ рдЙрдард╛рдпрд╛ред
рд▓рд╛рдн
рдкрд╛рд░рджрд░реНрд╢реА рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, nop.actors рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪреАрдЬреЗрдВ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд░реВрдкрд░реЗрдЦрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореЙрдбреНрдпреВрд▓рд░ рд╣реИред рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рднреАрддрд░ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЗ рддрдВрддреНрд░ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдВрджрд░ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдмрдиреЗ рджреВрд░рд╕реНрде рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд╣рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рджреВрд╕рд░реЗ, рд╕рдВрд╕реНрдХрд░рдг 3.0 рдХреЗ рд╕рд░реНрд╡рд▓реЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рдВрдмреЗ-рдкреЛрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдгред рдпрджрд┐ 1000 рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ 1000 рдзрд╛рдЧреЗ рдмрдирд╛рдПрдЧрд╛ рдЬреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рддреАрд╕рд░рд╛, рд╕рд┐рд╕реНрдЯрдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдбрд┐рд╕реНрдХ рдХреЛ рдЦрд╛рд▓реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдореЗрдореЛрд░реА рдХреЛ рдЦрд╛рд▓реА рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд┐рд╕реА рднреА рдЕрднрд┐рдиреЗрддрд╛ рдХрд╛ рдЬреАрд╡рдирдХрд╛рд▓ рд╕рдВрднрд╡рддрдГ рдЕрдирдВрдд рд╣реИред