рд╡рд┐рдВрдбреЛрдЬ рдЖрд░рдЯреА рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреЗрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, 2 рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд▓реНрдЯреАрдкреНрд▓реЗрдпрд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЙрд╕реА рд╕рдордп, WinRT рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди 7.5 рдХреЗ рдмреАрдЪ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдЧреЗрдореНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдРрд╕рд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреЛрдИ рднреА рд╕реЗрд╡рд╛ рдирд╣реАрдВ рдорд┐рд▓реА, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдкрдирд╛ рд╕рд░рд▓ рд╕рд░реНрд╡рд░ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдПрдХ рдЧреНрд░рд╛рд╣рдХ рд╕реЗ рджреВрд╕рд░реЗ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░реЗрдЧрд╛ред рдЪреВрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рдПрдЬрд╝реНрдпреЛрд░ рдЦрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕реА рд╕рдордп, рдПрдЬрд╝реНрдпреЛрд░ рдЖрд╕рд╛рди рд╕реНрдХреЗрд▓рд┐рдВрдЧ, рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдкреНрд░рдмрдВрдзрди рдХрдВрд╕реЛрд▓ (рдирдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕) рдФрд░ рдХрдИ рд╕реЗрд╡рд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рдХрд╛рд╕ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рддреЗ рд╣реИрдВред рдареАрдХ рд╣реИ, рдореЗрд░реЗ рд▓рд┐рдП рдПрдЬрд╝реНрдпреЛрд░ рдХреЗ рддрд╣рдд рдореЗрд░реЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛: рд╕реА # рдФрд░ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2012 рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред
рдПрдХ рдмрд┐рд▓реНрд▓реА рдХреЗ рддрд╣рдд рдПрдХ рдмрд╛рджрд▓ рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдФрд░ рддреИрдирд╛рддреА рдХрд╛ рд╡рд░реНрдгрдиред
рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рдЧреЗрдо рд╕рд░реНрд╡рд░ рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рдЧреЗрдо 2 рд▓реЛрдЧреЛрдВ рдХреЛ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рдХреЛ рд╡рд░реНрдХрд░ рд░реЛрд▓ рдореЗрдВ рдбреБрдкреНрд▓реЗрдХреНрд╕ рдЪреИрдирд▓ рдХреЗ рд╕рд╛рде рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА WCF рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рд╡рд┐рднрд┐рдиреНрди рдУрдПрд╕ рдХреЗ рдмреАрдЪ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдЦреЗрд▓ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рд╡рд░реНрдХрд░ рд░реЛрд▓ рдмрдирд╛рдирд╛
рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2012 рдореЗрдВ рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдБ:
рдПрдХ рдХрд╛рдо рдХреА рднреВрдорд┐рдХрд╛ рдЪреБрдиреЗрдВ:
рдХрд╛рд░реНрдп рднреВрдорд┐рдХрд╛ рдХреЗ рдЧреБрдгреЛрдВ рдореЗрдВ, рджреЛ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдмрдирд╛рдПрдБ:
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдФрд░ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдПрдХред рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рднреВрдорд┐рдХрд╛ рдПрдХ рдкреНрд░рддрд┐ рдореЗрдВ рд╣рдорд╛рд░реЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧреАред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдиреНрдпреВрдирддрдо рджреЛ рдкреНрд░рддрд┐рдпреЛрдВ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдиреНрдпреВрдирддрдо рднреВрдорд┐рдХрд╛ рд▓рдЪреАрд▓рд╛рдкрди рдФрд░ рд▓реЛрдб рд╕рдВрддреБрд▓рди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрджрд┐ рдПрдХ рднреВрдорд┐рдХрд╛ рдЧрд┐рд░рддреА рд╣реИ, рддреЛ рджреВрд╕рд░рд╛ рдЕрдиреБрд░реЛрдз рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди 2 рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрди рджреЛрдиреЛрдВ рдХреЗ рдмреАрдЪ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдореИрдВ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдХрд░реВрдБрдЧрд╛ред
рдЕрдм рд╣рдо WorkerRole.cs рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣рдорд╛рд░реА WCF рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦреЗрдВрдЧреЗред
private void StartGameService(int retries) { if (retries == 0) { RoleEnvironment.RequestRecycle(); return; } Trace.TraceInformation("Starting game service host..."); _serviceHost = new ServiceHost(typeof(GameService)); _serviceHost.Faulted += (sender, e) => { Trace.TraceError("Host fault occured. Aborting and restarting the host. Retry count: {0}", retries); _serviceHost.Abort(); StartGameService(--retries); }; var binding = new NetTcpBinding(SecurityMode.None); RoleInstanceEndpoint externalEndPoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["GameServer"]; RoleInstanceEndpoint mexpEndPoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["mexport"]; var metadatabehavior = new ServiceMetadataBehavior(); _serviceHost.Description.Behaviors.Add(metadatabehavior); Binding mexBinding = MetadataExchangeBindings.CreateMexTcpBinding(); string mexendpointurl = string.Format("net.tcp://{0}/GameServerMetadata", mexpEndPoint.IPEndpoint); _serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), mexBinding, mexendpointurl); _serviceHost.AddServiceEndpoint( typeof(IGameService), binding, string.Format("net.tcp://{0}/GameServer", externalEndPoint.IPEndpoint)); try { _serviceHost.Open(); Trace.TraceInformation("Game service host started successfully."); } catch (TimeoutException timeoutException) { Trace.TraceError( "The service operation timed out. {0}", timeoutException.Message); } catch (CommunicationException communicationException) { Trace.TraceError( "Could not start game service host. {0}", communicationException.Message); } }
рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ, рд╣рдо рджреЛ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ: рдЧреНрд░рд╛рд╣рдХ рдХреЛрдб рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рд╕реНрд╡рдпрдВ рдФрд░ рдореЗрдЯрд╛рдбреЗрдЯрд╛ред рд╕реЗрд╡рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдордп рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧреАред
рд░рди () рд╡рд┐рдзрд┐ рдореЗрдВ, рд╣рдо рдЕрдкрдиреА рд╕реЗрд╡рд╛ рдХрд╛ рд╢реБрднрд╛рд░рдВрдн рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
public override void Run() {
рд╕рд░реНрд╡рд░ рд╕реЗрд╡рд╛
рдореИрдВ рд╕рднреА рдХреЛрдб рдирд╣реАрдВ рджреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдмрдбрд╝рд╛ рдЕрдЪреНрдЫрд╛ред (рдЖрдк
рдпрд╣рд╛рдВ рд╕реНрд░реЛрдд рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ
рд╣реИрдВ ) рдореИрдВ рдХреЗрд╡рд▓ рдЙрди рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЗ рдХреЛрдб рджреЗрдЧрд╛ рдЬреЛ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред
рджреЛ рдкреНрд░рдмрдВрдзрдХ рд╣реИрдВ: рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдмрдВрдзрдХ рдФрд░ рдПрдХ рдЧреЗрдо рдореИрдиреЗрдЬрд░, рдЬреЛ рдХреНрд░рдорд╢рдГ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрд░реЛрдВ рдФрд░ рд╡рд░реНрддрдорд╛рди рдЧреЗрдо рд╕рддреНрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВред рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдерд┐рд░ рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдХреБрдВрдЬреА рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ / рдЧреЗрдо рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИред рдкреНрд░рдмрдВрдзрдХ рдереНрд░реЗрдб-рд╕реЗрдл рдбрд┐рдХреНрд╢рдирд░реА рдПрдХреНрд╕реЗрд╕ рднреА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
рдЪреВрдВрдХрд┐ рд╕рд░реНрд╡рд░ рдХреЛ рдореЛрдмрд╛рдЗрд▓ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдЧреЗрдо рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рд▓рдЧрд╛рддрд╛рд░ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╕рддреНрд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ 30 рд╕реЗрдХрдВрдб рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рд░рдЬрд┐рд╕реНрдЯрд░ () рд╕рд░реНрд╡рд░ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗред
рд╕рд░реНрд╡рд░ рдХреЛрдб рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рд╡рд┐рдзрд┐:
public ClientInformation Register(string uid, string userName) {
рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕реЗрд╢рдирдЖрдИ рдХреЛ рдСрдкрд░реЗрд╢рдирдХреЙрдиреНрдЯреЗрдХреНрд╕.рдХреНрд░рд┐рдХреЗрдЯ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдереА, рд▓реЗрдХрд┐рди рддрдм рд╕реЗ рд╕рдВрдЪрд╛рд░ рд▓рдЧрд╛рддрд╛рд░ рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИ, рдмреНрд░реЗрдХ рдХреЗ рдмрд╛рдж рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдПрдХ рдирдпрд╛ рд╕рддреНрд░ рдмрдирд╛рдПрдЧрд╛ред рд╣рдореЗрдВ рдПрдХ рдирдпрд╛ рд╕рддреНрд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореМрдЬреВрджрд╛ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд░рдЬрд┐рд╕реНрдЯрд░ рд╡рд┐рдзрд┐ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ Guide.NewGuid ()ред ToString () рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рдХрдиреЗрдХреНрд╢рди рдЦреЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЦреЗрд▓ рдФрд░ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд╕рддреНрд░ рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧреЗрдо рдореЗрдВ рд╡рд╛рдкрд╕ рдЖрдПрдЧрд╛ рдпрд╛ рдирд╣реАрдВред рдЬрдм рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рд╡рд░реНрддрдорд╛рди рдЧреЗрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕рдХреНрд░рд┐рдп рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдпрд╛рдиреА, рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдЪрд╛рд░ рдореЗрдВ рдПрдХ рд╡рд┐рд░рд╛рдо рдерд╛ рдФрд░ рдЦрд┐рд▓рд╛рдбрд╝реА рдЦреЗрд▓ рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛)ред
рд╣рд░ 60 рд╕реЗрдХрдВрдб рдореЗрдВ, рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╕рддреНрд░ рдФрд░ рдЧреЗрдо рдХреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
imer timer; TimeSpan TimeForDelete; public GameService() { TimeForDelete = new TimeSpan(0, 0, 60); timer = new Timer(timerCallback,null,60000,60000); } private void timerCallback(object state) { var sesions = SessionManager.GetNotAcitiveSessions(); var sesionForDelete = sesions.Where(x => DateTime.Now.Subtract(x.LastSyncTime) > TimeForDelete).Select(x=>x.SessionId); foreach (var sessionId in sesionForDelete) { SessionManager.RemoveSession(sessionId); DeleteGame(sessionId); } }
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рдЧреНрд░рд╛рд╣рдХ рдиреЗ 60 рд╕реЗрдХрдВрдб рдХреЗ рднреАрддрд░ рдЕрдкрдирд╛ рд╕рддреНрд░ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖрдПрдЧрд╛ рдФрд░ рдЙрд╕рдХрд╛ рд╕рддреНрд░ рдФрд░ рдЧреЗрдо рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕реА рд╕рдордп, рдЗрд╕ рдЧреЗрдо рд╕реЗ рдЬреБрдбрд╝реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реВрдЪрдирд╛рдПрдВ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИрдВ рдХрд┐ рдЧреЗрдо рдЕрдм рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред
MakeTurn () рд╡рд┐рдзрд┐ рд╡рд░реНрддрдорд╛рди рдЧреЗрдо рдХреЗ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрддреА рд╣реИ:
public void MakeTurn(string uid, string type, string data) { var game = GameManager.GetCurrentGamesForPlayer(uid); if (game != null) { foreach (var player in game.Players) { if (player.SessionId != uid) { var playerSession = SessionManager.GetSession(player.SessionId); if (playerSession.Callback != null) { try { playerSession.Callback.DeliverGameMessage(type, data); } catch { } } } } } }
рдЪреВрдВрдХрд┐ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг рд╕рд░реНрд╡рд░ рдХреНрд░реИрд╢ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ, рд╣рдо рд╕рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреЛрдб рдХреЛ рдХреЛрд╢рд┐рд╢ / рдкрдХрдбрд╝ рдореЗрдВ рдлреНрд░реЗрдо рдХрд░рддреЗ рд╣реИрдВред
рд╕рдВрджреЗрд╢ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рд░реНрд╡рд░ рдХреЛрдб рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рднреА рдЧреЗрдо рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЧреЗрдо рдХрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдЧреЗрдо рдмрдирд╛рдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЧреЗрдо рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдЗрд╕реЗ рдмрдирд╛рдпрд╛ рд╣реИ, рддреЛ рдЧреЗрдо рдХреЛ рд╕реВрдЪреА рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧреЗрдо рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдЧреЗрдо рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
public void DeleteGame(string uid) { var deletingGame = GameManager.GetGame(uid); if (deletingGame != null) { GameManager.RemoveGame(uid); NotifyConnectedClientsGame(deletingGame); } else { deletingGame = GameManager.GetCurrentGamesForPlayer(uid); if (deletingGame != null) { try { deletingGame.Players.RemoveAt(1); NotifyConnectedClientsGame(deletingGame); } catch { } } } }
рд╕реНрдерд╛рдиреАрдп рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреА рднреВрдорд┐рдХрд╛
рд╕реНрдерд╛рдиреАрдп рдбреАрдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ Visual Studio рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ Windows Azure рдбреАрдмрдЧрд┐рдВрдЧ рдкрд░рд┐рд╡реЗрд╢ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИред (рдПрдореБрд▓реЗрдЯрд░ рд╡рд┐рдВрдбреЛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЯреНрд░реЗ рдореЗрдВ рдПрдореБрд▓реЗрдЯрд░ рдЖрдЗрдХрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ)
рдЗрд╕ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХрд╛ рд╕рдВрджреЗрд╢ рдХрдВрд╕реЛрд▓ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗрдВ:
рдкрддрд╛ рдлрд╝реАрд▓реНрдб рдореЗрдВ, рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХрд╛ url рд▓рд┐рдЦреЗрдВред (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдерд╛рдиреАрдп рдЖрдИрдкреА 127.255.0.1 рдирд┐рдХрд▓рд╛ред) рд╣рдо рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рд▓рд┐рдП рдирд╛рдо рд╕реНрдерд╛рди рд▓рд┐рдЦрддреЗ рд╣реИрдВ, "рдУрдХреЗ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд░реНрдордЪрд╛рд░реА рдХреА рднреВрдорд┐рдХрд╛
рдкреЛрд░реНрдЯрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдЬрд╝реНрдпреЛрд░ рд╕реЗрдЯ рдХрд░реЗрдВред рд╢реНрд░рдорд┐рдХ рднреВрдорд┐рдХрд╛рдПрдБ "рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛рдУрдВ" рдореЗрдиреВ рдореЗрдВ рдмрдирд╛рдИ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ:
"рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛ рдмрдирд╛рдПрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдирд┐рдХрдЯрддрдо рдбреЗрдЯрд╛ рд╕реЗрдВрдЯрд░ рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рд╣рдорд╛рд░реА рднреВрдорд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдпреВрдЖрд░рдПрд▓ рдХреЗ рд╕рд╛рде рдЖрдПрдВ:
рдлрд╝реЙрд░реНрдо рдХреЗ рдирд┐рдЪрд▓реЗ рднрд╛рдЧ рдкрд░ "рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛ рдмрдирд╛рдПрдБ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдХреБрдЫ рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреАред
рдЕрдм рдЖрдкрдХреЛ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рд╣рдорд╛рд░реА рднреВрдорд┐рдХрд╛ рдХреЗ рдкреИрдХреЗрдЬ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реА рднреВрдорд┐рдХрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ рдФрд░ "рдкреИрдХреЗрдЬ" рдЪреБрдиреЗрдВ:
рдПрдХ рдирдИ рд╡рд┐рдВрдбреЛ рдЦреБрд▓ рдЬрд╛рдПрдЧреА рдЬрд┐рд╕рдореЗрдВ рдЖрдк рд╕реЗрд╡рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рдорд╛рди рд╣реИрдВ)ред
"рдкреИрдХ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдХреБрдЫ рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рд╡рд┐рдВрдбреЛрдЬ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдореЗрдВ рджреЛ * .cspkg рдФрд░ * .cscfg рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдЦреБрд▓реЗрдЧрд╛ред
рд╣рдо рдкреЛрд░реНрдЯрд▓ рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реА "рд╕реЗрд╡рд╛" рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ "рдирдИ рдЙрддреНрдкрд╛рджрди рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ:
рдПрдХ рд╡рд┐рдВрдбреЛ рдЦреБрд▓реЗрдЧреА рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЛ рд╣рдорд╛рд░реЗ рдкреИрдХреЗрдЬ рдХреА рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
рдЪреЗрдХрдмреЙрдХреНрд╕ "рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рднреВрдорд┐рдХрд╛рдУрдВ рдореЗрдВ рдПрдХрд▓ рдЙрджрд╛рд╣рд░рдг рд╣реЛрддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ" рдЖрдкрдХреА рднреВрдорд┐рдХрд╛ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ (рдЬреИрд╕реЗ рдХрд┐ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ)ред
рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рдмрд╛рдж, рднреВрдорд┐рдХрд╛ рд╕рд╛рдордиреЗ рдЖрдПрдЧреА рдФрд░ рдзреБрди рд╣реЛрдЧреАред
рдЕрдм рд╣рдо net.cp: //mytestgameserver.cloudapp.net: 8001 / GameServerMetadata рдХреЛ рд▓рд╛рдЗрди рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд╕реЗрд╡рд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдорд╣рддреНрд╡рдкреВрд░реНрдгред рднреВрдорд┐рдХрд╛ рдПрдХ рд▓реВрдк рдореЗрдВ рдШреВрдорддреА рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдмрд╛рджрд▓ рдХреЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рдпрджрд┐ рдЖрдк рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рднреВрдорд┐рдХрд╛ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЖрдк рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рди рдХрд░реЗрдВредрд╡рд┐рдВрдбреЛрдЬ рдЖрд░рдЯреА рдХреЗ рддрд╣рдд рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рдирд╛
рдЖрдк рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд▓рд┐рдВрдХ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХреЗрд╡рд▓ рдЧреЗрдо рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдмрд╛рддрдЪреАрдд рдХреЛ рджрд┐рдЦрд╛рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдЧреЗрдо рд▓реЙрдЬрд┐рдХ, рдЪреЗрдХ рдЖрджрд┐ рдирд╣реАрдВ рд╣реИрдВред
Url рдХреЛ Reference.cs рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓реЗрдВ:
net.tcp: //mytestgameserver.cloudapp.net: 3030 / GameServer
рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдХреЗ рдСрдЯреЛ-рдЬреЗрдирд░реЗрд╢рди рдХреЗ рдмрд╛рдж, рдЧрд▓рдд рдЖрдИрдкреА рдЙрда рдЬрд╛рддрд╛ рд╣реИред
рджреЛ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рдмрд╛рддрдЪреАрдд рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
1. "рд╕реНрдерд╛рдиреАрдп рдХрдВрдкреНрдпреВрдЯрд░" рдкрд░ рдПрдХ рдЖрд╡реЗрджрди рддреИрдирд╛рдд рдХрд░реЗрдВ
2. "рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░" рдореЗрдВ рджреВрд╕рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдПрдВред
рдПрдХ рд╣реА рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ WinRT рдХреЗ рддрд╣рдд рдПрдХ рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХрдИ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреИрд╕реЗ рдЪрд▓рд╛рдПрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдореЗрдВ, рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░, рдЪрд▓ рд░рд╣реА рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрдХ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрдЧрд░ рдпрд╣ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рддреЛ рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╕рд░реНрд╡рд░ рдХреЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ 3 рдпрд╛ рдЕрдзрд┐рдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рдХрд╛ рд╕рддреНрдпрд╛рдкрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИред
рдкрд░рд┐рдгрд╛рдо
рдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд░рд▓ рдЧреЗрдо рд╕рд░реНрд╡рд░ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдХреБрдЫ рдШрдВрдЯреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд▓рдЧрд╛ред рдмреЗрд╢рдХ, рд╕рд░реНрд╡рд░ рдХреЛ рдФрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдкрдиреЗ рдореВрд▓ рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдореБрдХрд╛рдмрд▓рд╛ рдХрд░рддрд╛ рд╣реИ, рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ 2 рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЦреЗрд▓ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред