RedDwarf - рдЬрд╛рд╡рд╛ рдореЗрдВ рдСрдирд▓рд╛рдЗрди рдЧреЗрдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд▓реЗрдЦ
рдореЗрдВ, рдореИрдВрдиреЗ рдЧреЗрдо рд╕рд░реНрд╡рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреАред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ RedDwarf рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд░реНрд╡рд░ рдХреИрд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдПред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЦреЗрд▓ "рд░реЙрдХ-рдкреЗрдкрд░-рдХреИрдВрдЪреА" рдХреЗ рдСрдирд▓рд╛рдЗрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдПрдХ рд╕рд░реНрд╡рд░ рд▓рд┐рдЦреЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред
рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдЗрд╕ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рдЧреНрд░рд╛рд╣рдХ рд▓рд┐рдЦреЗрдВрдЧреЗ рдФрд░ рдЙрдирдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВрдЧреЗред
рдХрд╛рдо рдХреА рддреИрдпрд╛рд░реА
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ Reddwarf рд╕рд░реНрд╡рд░ рдХреЛ sgs-server-dist-0.10.2.zip рд╕рдВрдЧреНрд░рд╣
рдореЗрдВ рдпрд╣рд╛рдБ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдХреЛ sgs-server-dist-0.10.2 рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЦреЛрд▓рдирд╛ рд╣реЛрдЧрд╛ред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрдорд╛рдг
рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдорд╛рд╣реМрд▓ рдореЗрдВ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рд░рд▓ рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рд╣рдо рдорд╛рд╡реЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ sgs-server-api-0.10.2.jar рдХреА рдЬрд░реВрд░рдд рд╣реИ sgs-server-dist-0.10.2 \ lib \ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп
рд╣рдо META-INF рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ MANIFEST.MF рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬрд╛рд░-рдлрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдореЗрд░реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реИ:
рдкреНрд░рдХрдЯ-рд╕рдВрд╕реНрдХрд░рдг: 1.0
META-INF рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рднреА, рдЖрдкрдХреЛ app.properties рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд░реНрд╡рд░ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧреБрдг рд╣реИрдВ:
рдпрд╣ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдиреНрдпреВрдирддрдо рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯ рд╣реИред рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧреБрдг рдЕрднреА рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
- com.sun.sgs.impl.transport.tcp.listen.port - рд╡рд╣ рдкреЛрд░реНрдЯ рдЬрд┐рд╕ рдкрд░ рд╕рд░реНрд╡рд░ рд╕реБрдирддрд╛ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 62964)
- com.sun.sgs.app.authenticators - рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдирд╛рдо (рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЦреЗрд▓ рддрд░реНрдХ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ)
- com.sun.sgs.impl.service.session.allow.new.login - рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдЕрдиреНрдп рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯреЗрдб рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдПред рдЕрдЧрд░ рд╕рдЪ рд╣реИ, рддреЛ рдЬреЛ рдЕрдм рдЦреЗрд▓ рдореЗрдВ рд╣реИ рд╡рд╣ рдлреЗрдВрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЧрд▓рдд рд╣реИ, рддреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред
рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЕрдиреНрдп рдЧреБрдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝реЗрдВред
рдЦреЗрд▓ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛
рдЦреЗрд▓ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рд╕рд░реНрд╡рд░ - рдПрдХ рд╡рд░реНрдЧ рдЬреЛ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдСрдирд▓рд╛рдЗрди рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдирдХреЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрддрд╛ рд╣реИред
рдЦрд┐рд▓рд╛рдбрд╝реА - рдПрдХ рдЦрд┐рд▓рд╛рдбрд╝реА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧреБрдг рд╣реИрдВ: рдирд╛рдо (рд╕рдорд╛рди рд▓реЙрдЧрд┐рди) рдФрд░ рдЕрдВрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред рд▓рдбрд╝рд╛рдИ рдореЗрдВ рднрд╛рдЧ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред
рд▓рдбрд╝рд╛рдИ - рдПрдХ рд▓рдбрд╝рд╛рдИ рд╣реИред рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ, рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдФрд░ рд╡рд┐рдЬреЗрддрд╛ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдирд╛ред рдЗрд╕рдореЗрдВ рджреЛ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рд╣реИрдВред
рд╣рдерд┐рдпрд╛рд░ рд╣рдерд┐рдпрд╛рд░реЛрдВ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЬреНрдЮрд╛рди рд╣реИ: рд╕реАрдзреЗ рдкрддреНрдерд░, рдХреИрдВрдЪреА рдФрд░ рдХрд╛рдЧрдЬред
рдпрджрд┐ рд╡рд░реНрдЧ рдЖрд░реЗрдЦ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

рд╕рднреА рдЧреЗрдо рдЗрдХрд╛рдЗрдпрд╛рдВ (рд╡реЗрдкрди рдХреЛ рдЫреЛрдбрд╝рдХрд░) рдЖрдВрддрд░рд┐рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИрдВ рдЬреЛ рд╕рд░реНрд╡рд░ рдХреЗ рдЪрд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди рд▓реЗрди-рджреЗрди рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВ, рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ java.io.Serializable рдФрд░ com.sun.sgs.app.anagedObject рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд╕рд░реНрд╡рд░ рд╡рд░реНрдЧред рдкреНрд▓реЗрдпрд░ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдПрдВрдб рдХрдиреЗрдХреНрд╢рди
рд╕рд░реНрд╡рд░ рд╡рд░реНрдЧ рд╕рд░реНрд╡рд░ рд▓реЙрдиреНрдЪ рдмрд┐рдВрджреБ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ com.sun.sgs.app.AppListener рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
рдкрд╣рд▓реА рдмрд╛рд░ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░
void initialize(Properties props)
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдВрддрд░рд┐рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рднрд░рддрд╛ рд╣реИред рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛: рдпрджрд┐ рд╕рд░реНрд╡рд░ рдХреЛ рд░реЛрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╛ рдорд╛рд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ рдлрд┐рд░ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ
рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рд╡рд┐рдзрд┐
рдХреЛ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛
рдЬрд╛рдПрдЧрд╛ , рдХреНрдпреЛрдВрдХрд┐ рдЖрдВрддрд░рд┐рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░ рдкреНрд░рд╛рд░рдВрдн рдХреЗ рдмреАрдЪ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЙрд╕ рдкрд▓ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред
ClientSessionListener loggedIn(ClientSession session)
рдХреЛ рд╕рдлрд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рдмрд╛рдж рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЦрд┐рд▓рд╛рдбрд╝реА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ рдкреНрд▓реЗрдпрд░ рд╣реЛрдЧрд╛ред
рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рднреА рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред Reddwarf рдХреЗ рдкрд╛рд╕ рдЦреЗрд▓ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП ScalableHashMap рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рдВрдЧреНрд░рд╣ рд╣реИред рдЗрд╕ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдлрд╛рдпрджреЗ рдпрд╣ рд╣реИрдВ рдХрд┐ рдЬрдм рдЗрд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдмреНрд▓реЙрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдорддрд▓рдм рдЖрдВрддрд░рд┐рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд▓реЙрдХ рдХрд░рдирд╛) рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗред рдФрд░ рд╕рд░реНрд╡рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣рдо рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╕реНрд╡рдпрдВ рд╕реНрдЯреЛрд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ (рдкреНрд░рдмрдВрдзрд┐рдд)ред
рд╢рдмреНрджреЛрдВ рд╕реЗ рдХрд░реНрдореЛрдВ рдХреА рдУрд░ рдмрдврд╝рддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдорд┐рд▓рддреЗ рд╣реИрдВ:
package hello.reddwarf.server; import java.io.Serializable; import com.sun.sgs.app.*; import com.sun.sgs.app.util.ScalableHashMap; import java.util.Properties; public class Server implements AppListener, Serializable, ManagedObject { public ManagedReference<ScalableHashMap<String, Player>> onlinePlayersRef; @Override public void initialize(Properties props) {
рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, DataManager рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд▓рд┐рдЦрдиреЗ, рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдкрдврд╝рдиреЗ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдкреНрд░рдмрдВрдзрд┐рдд рд▓рд┐рдВрдХ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдПрдХ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рд╕рдВрдЧреНрд░рд╣рдг рд╣реИ, рдЙрдкрд╕рд░реНрдЧ "рдЦрд┐рд▓рд╛рдбрд╝реА" рдХреЗ рд╕рд╛рде рдЦрд┐рд▓рд╛рдбрд╝реА рдХрд╛ рдирд╛рдоред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкреВрд░реЗ рдкреНрд▓реЗрдпрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдореВрд▓реНрдп рдкрд░ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдПрдХ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдЖрдзрд╛рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВрдЧреЗ (рдпрджрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдмрдирд╛рдПрдВ)ред
private Player loadOrRegister(String name) { try { return (Player) AppContext.getDataManager().getBindingForUpdate("player." + name); } catch (NameNotBoundException e) {
рдЦрд┐рд▓рд╛рдбрд╝реА рд╡рд░реНрдЧ рдФрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓
рдЦрд┐рд▓рд╛рдбрд╝реА рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╡рд░реНрдЧ рдЦрд┐рд▓рд╛рдбрд╝реА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдордВрдЪ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╕реВрдЪрдирд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рддреЛ, рдпрд╣ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред Reddwarf рдЖрдиреЗ рд╡рд╛рд▓реЗ рдФрд░ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдмрд╛рдЗрдЯ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЧреЗрдо рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд╡рд┐рд╡реЗрдХ рдкрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрддрд╛ рд╣реИред рдЦреЗрд▓ "рд░реЙрдХ-рдкреЗрдкрд░-рдХреИрдВрдЪреА" рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рд╕рд░рд▓ рдкрд╛рда рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
(server -> client)
SCORE <рдирдВрдмрд░> - рд╕рд░реНрд╡рд░ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдЕрдВрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрддрд╛рддрд╛ рд╣реИ
(рдХреНрд▓рд╛рдЗрдВрдЯ -> рд╕рд░реНрд╡рд░)
рдкреНрд▓реЗ - рдЧреЗрдо рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦрд┐рд▓рд╛рдбрд╝реА рдХрд╛ рдЕрдиреБрд░реЛрдз
(рд╕рд░реНрд╡рд░ -> рдХреНрд▓рд╛рдЗрдВрдЯ)
BATLE <name> - рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд╕рд╛рде рд▓рдбрд╝рд╛рдИ рд╢реБрд░реВ рд╣реЛ рдЧрдИ рд╣реИ
(рд╕рд░реНрд╡рд░ -> рдХреНрд▓рд╛рдЗрдВрдЯ)
ERROR - рд▓рдбрд╝рд╛рдИ рдХреЗ рд▓рд┐рдП рдЦрд┐рд▓рд╛рдбрд╝реА рдирд╣реАрдВ рдорд┐рд▓рд╛ (рд╕рд░реНрд╡рд░ рдкрд░ рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реИ рдпрд╛ рд▓рдбрд╝рд╛рдИ рдореЗрдВ рд╕рднреА)
(рдЧреНрд░рд╛рд╣рдХ -> рд╕рд░реНрд╡рд░)
рд░реЙрдХ - рдЦрд┐рд▓рд╛рдбрд╝реА "рд╕реНрдЯреЛрди" рдХрд╣рддреЗ рд╣реИрдВ
(рдХреНрд▓рд╛рдЗрдВрдЯ -> рд╕рд░реНрд╡рд░)
рд╕реНрдХреЛрд░рд░ - рдЦрд┐рд▓рд╛рдбрд╝реА рдХрд╣рддреЗ рд╣реИрдВ "рдХреИрдВрдЪреА"
(рдЧреНрд░рд╛рд╣рдХ -> рд╕рд░реНрд╡рд░)
рдкреЗрдкрд░ - рдЦрд┐рд▓рд╛рдбрд╝реА рдХрд╣рддреЗ рд╣реИрдВ "рдкреЗрдкрд░"
(рд╕рд░реНрд╡рд░ -> рдЧреНрд░рд╛рд╣рдХ)
рдбреНрд░рд╛ - рдбреНрд░рд╛
(рд╕рд░реНрд╡рд░ -> рдХреНрд▓рд╛рдЗрдВрдЯ)
WON - рдкреНрд▓реЗрдпрд░ рдЬреАрддрд╛
(рд╕рд░реНрд╡рд░ -> рдЧреНрд░рд╛рд╣рдХ)
LOST - рдЦрд┐рд▓рд╛рдбрд╝реА рдЦреЛ рдЧрдпрд╛
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реЗ рдЖрдк рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕ рдкрд░ рдЕрд▓рдЧ рд╕реЗ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗред
рдЖрдк рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдЙрд▓рдЭрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд:
package hello.reddwarf.server; import java.nio.ByteBuffer; public class Messages { public static ByteBuffer encodeString(String s) { return ByteBuffer.wrap(s.getBytes()); } public static String decodeString(ByteBuffer message) { byte[] bytes = new byte[message.remaining()]; message.get(bytes); return new String(bytes); } }
рдЕрдм рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВред
рдЦрд┐рд▓рд╛рдбрд╝реА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝реАрд▓реНрдб рд░рдЦреЗрдЧрд╛:
- рдкрд╣рд▓рд╛ рдирд╛рдо
- рдЕрдВрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛
- рд╕рд░реНрд╡рд░ рд▓рд┐рдВрдХ (рдСрдирд▓рд╛рдЗрди рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП)
- рд╕рддреНрд░ рдХрд╛ рд▓рд┐рдВрдХ (рдЧреНрд░рд╛рд╣рдХ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП)
- рд▓рдбрд╝рд╛рдИ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ (рдпрджрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА рдЕрдм рд▓рдбрд╝рд╛рдИ рдореЗрдВ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдЕрд╢рдХреНрдд рд╣реИ)
package hello.reddwarf.server; import com.sun.sgs.app.*; import com.sun.sgs.app.util.ScalableHashMap; import java.io.Serializable; import java.nio.ByteBuffer; import java.util.*; public class Player implements Serializable, ManagedObject, ClientSessionListener { private final static Random random = new Random(); public final String name; private int score;
рд╣рдерд┐рдпрд╛рд░ рдФрд░ рд▓рдбрд╝рд╛рдИ рдХрдХреНрд╖рд╛рдПрдВ
рд╣рдерд┐рдпрд╛рд░ рдЧрдгрдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ рдФрд░ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
package hello.reddwarf.server; public enum Weapon { ROCK, PAPER, SCISSORS; boolean beats(Weapon other) { return other != null && this != other && this.ordinal() == (other.ordinal() + 1) % values().length; } }
рд╣рдо рд▓рдбрд╝рд╛рдИ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕ред
рд▓рдбрд╝рд╛рдИ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рджреЛ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдВрдХ, рдЙрдирдХреЗ рдЙрддреНрддрд░ рдФрд░ рд╕рд╛рде рд╣реА рдПрдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рдзреНрд╡рдЬ рд╣реЛрддрд╛ рд╣реИред
рдПрдХ рдмрд╛рд░ рд▓рдбрд╝рд╛рдИ рдмрдирдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рдЕрд▓рдЧ рдХрд╛рд░реНрдп рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ 5 рд╕реЗрдХрдВрдб рдореЗрдВ рд▓рдбрд╝рд╛рдИ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдЧрд╛ред
рдЗрд╕ рд╕рдордп рдХреЗ рдмрд╛рдж, рд▓рдбрд╝рд╛рдИ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЕрднрд┐рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЦрд┐рд▓рд╛рдбрд╝реА рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╡рд┐рдЬреЗрддрд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рджреЛрдиреЛрдВ - рд╡рд┐рдЬреЗрддрд╛ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ "рд░реЙрдХ-рдкреЗрдкрд░-рдХреИрдВрдЪреА"ред
рдЯрд╛рд╕реНрдХрдореИрди рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ AppContext.getTaskManager () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рдмрдВрдзрдХ рдЖрдкрдХреЛ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдирджреЗрди рдореЗрдВ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рддреБрд░рдВрдд, рдпрд╛ рд╕рдордп рдХреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЕрд╡рдзрд┐ рдХреЗ рдмрд╛рдж, рдпрд╛ рд╕рдордп-рд╕рдордп рдкрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЖрдВрддрд░рд┐рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рднреА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдХреЗ рдкреБрдирд░рд╛рд░рдВрдн рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЙрдирдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рддреЛ, рдХреНрд▓рд╛рд╕ рдХреЛрдб рдмреИрдЯрд▓ рд╣реИред
package hello.reddwarf.server; import com.sun.sgs.app.AppContext; import com.sun.sgs.app.ManagedObject; import com.sun.sgs.app.ManagedReference; import com.sun.sgs.app.Task; import java.io.Serializable; import java.util.concurrent.atomic.AtomicInteger; public class Battle implements ManagedObject, Serializable { // 5 private static final long BATTLE_TIME_MS = 5000; enum Result { DRAW, WON, LOST } private boolean active; private ManagedReference<Player> starterPlayerRef; private ManagedReference<Player> invitedPlayerRef; private Weapon starterWeapon = null; private Weapon invitedWeapon = null; public Battle(Player starterPlayer, Player invitedPlayer) { starterPlayerRef = AppContext.getDataManager().createReference(starterPlayer); invitedPlayerRef = AppContext.getDataManager().createReference(invitedPlayer); active = false; } public void start(){ active = true; AppContext.getTaskManager().scheduleTask(new BattleTimeout(this), BATTLE_TIME_MS); } public void answer(Player player, Weapon weapon){ if (active) { if (player.name.equals(starterPlayerRef.get().name)) { starterWeapon = weapon; } else { invitedWeapon = weapon; } } } private void finish() { active = false; Player starterPlayer = starterPlayerRef.getForUpdate(); Player invitedPlayer = invitedPlayerRef.getForUpdate(); if (starterWeapon != null && starterWeapon.beats(invitedWeapon)) { starterPlayer.battleResult(Result.WON); invitedPlayer.battleResult(Result.LOST); } else if (invitedWeapon != null && invitedWeapon.beats(starterWeapon)) { invitedPlayer.battleResult(Result.WON); starterPlayer.battleResult(Result.LOST); } else { starterPlayer.battleResult(Result.DRAW); invitedPlayer.battleResult(Result.DRAW); } AppContext.getDataManager().removeObject(this); } private static class BattleTimeout implements Serializable, Task { private ManagedReference<Battle> battleRef; public BattleTimeout(Battle battle) { battleRef = AppContext.getDataManager().createReference(battle); } @Override public void run() throws Exception { battleRef.getForUpdate().finish(); } } }
рдЗрд╕ рдХреЛрдб рдХреЛ рдкрдврд╝рддреЗ рд╕рдордп, рдпрд╣ рд╕рд╡рд╛рд▓ рдЙрда рд╕рдХрддрд╛ рд╣реИ: тАЬрдЖрдВрддрд░рд┐рдХ рдмреИрдЯрд▓рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреНрд▓рд╛рд╕ рдХреЛ рд╕реНрдерд┐рд░ рдХреНрдпреЛрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд▓рд┐рдВрдХ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рдбрд╝рд╛рдИ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ? рдЖрдк рдЗрд╕реЗ рдЧреИрд░-рд╕реНрдереИрддрд┐рдХ рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реАрдзреЗ рдпреБрджреНрдз рдХреНрд╖реЗрддреНрд░реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред "
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЧреИрд░-рд╕реНрдерд┐рд░ рдЖрдВрддрд░рд┐рдХ рд╡рд░реНрдЧ рд▓рд┐рдВрдХ рдХреЛ рдореВрд▓ рд░реВрдк рдореЗрдВ рдореВрд▓ рд▓рдбрд╝рд╛рдИ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рдбрд╝рд╛рдИ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди Reddwarf рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо (рдЯреНрд░рд╛рдВрд╕реЗрдХреНрд╢рдирд▓) рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ ManagedObject (рдЬреЛ рдХрд┐ рд▓рдбрд╝рд╛рдИ рд╣реИ) рдХреЛ рд╕реАрдзреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рд▓реЗрдирджреЗрди рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдкрд░ рд░реЛрдХ рд▓рдЧрд╛рддреА рд╣реИ: рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рдЕрдиреНрдп рд▓реЗрдирджреЗрди рдореЗрдВ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╕реАрдзрд╛ рд╕рдВрджрд░реНрдн рдЧрд▓рдд рд╣реИред рдХреЗрд╡рд▓ рд╕реНрдерд┐рд░ рдЖрдВрддрд░рд┐рдХ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордВрдЪ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдЗрд╕рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИред
рдореИрдВ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рд╡рд╕реНрддреБ рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдкрд░ рднреА рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
ManagedReference рдХреЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдкреНрд░рд╛рдкреНрдд () рд╡рд┐рдзрд┐ рдФрд░ getForUpdate () рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдХреЗрд╡рд▓ рдкреНрд░рд╛рдкреНрдд () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред GetForUpdate () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд░реНрд╡рд░ рдХреЛ рд▓реЗрди-рджреЗрди рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рдкрддрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ рдХрд┐ рдХрд┐рди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрджрд▓рд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░, рдпрджрд┐ рдкрд░рд╕реНрдкрд░ рд╡рд┐рд░реЛрдзреА рд▓реЗрдирджреЗрди рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рддреЛ рдХрд╛рд░реНрдп рдХреЛ рдереЛрдбрд╝рд╛ рдкрд╣рд▓реЗ рд░рджреНрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣ рдкреНрд░рд╛рдкреНрдд () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЧрддрд┐ рдореЗрдВ рдХреБрдЫ рд▓рд╛рдн рджреЗрддрд╛ рд╣реИред
рдЕрдВрдд рдореЗрдВ, рд╣рдорд╛рд░рд╛ рд╕рд░реНрд╡рд░ рд▓рдЧрднрдЧ рддреИрдпрд╛рд░ рд╣реИред
рдереЛрдбрд╝реА рд▓реЙрдЧрд┐рдВрдЧ рдЬреЛрдбрд╝реЗрдВ (рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП рд╣рдо java.util.log рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ) рдФрд░ рдЖрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдЬрд╛рд░ рдлрд╝рд╛рдЗрд▓ рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдПред
рдпрджрд┐ рдЖрдк рдпрд╣ рд╕рдм рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдПрдХрддреНрд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╕рдорд╛рдкреНрдд рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд .jar рдлрд╝рд╛рдЗрд▓
рдпрд╣рд╛рдБ рд╕реЗ рд▓реА рдЬрд╛ рд╕рдХрддреА
рд╣реИ ред
рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ sgs-server-dist-0.10.2 \ dist рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдм, sgs-server-dist-0.10.2 рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
java -jar bin/sgs-boot.jar
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЖрдк рдХрдВрд╕реЛрд▓ рдореЗрдВ рдирд┐рдореНрди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
02, 2012 9:45:19 PM com.sun.sgs.impl.kernel.Kernel <init> INFO: The Kernel is ready, version: 0.10.2.1 02, 2012 9:45:19 PM com.sun.sgs.impl.service.data.store.DataStoreImpl <init> INFO: Creating database directory : C:\sgs-server-dist-0.10.2.1\data\dsdb 02, 2012 9:45:19 PM com.sun.sgs.impl.service.watchdog.WatchdogServerImpl registerNode INFO: node:com.sun.sgs.impl.service.watchdog.NodeImpl[1,health:GREEN,backup:(none)]@black registered 02, 2012 9:45:19 PM hello.reddwarf.server.Server initialize INFO: Starting new Rock-Paper-Scissors Server. Initialized database. 02, 2012 9:45:19 PM com.sun.sgs.impl.kernel.Kernel startApplication INFO: RockPaperScissors: application is ready
рд╣реБрд░реНрд░реЗ! рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ рд╣реИ! рдЕрдм рдЖрдк рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╕рд╛рде рд╕реМрджрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
Reddwarf рд░реЙрдХ-рдкреЗрдкрд░-рдкреЗрдкрд░ рдСрдирд▓рд╛рдЗрди рдЧреЗрдо рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП: рдХреНрд▓рд╛рдЗрдВрдЯрд╕рдВрджрд░реНрдн
рд╕рд░реНрд╡рд░ рдПрдкреАрдЖрдИ Javadocрд╕рд╛рдореБрджрд╛рдпрд┐рдХ рдкреНрд░рд▓реЗрдЦрдирдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлреЛрд░рдо