
рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рдореИрдВрдиреЗ рдпреВрдирд┐рдЯреА 3 рдбреА рдореЗрдВ рдбрдмреНрд▓реНрдпреВрдбрдмреНрд▓реНрдпреВрдбрдмреНрд▓реНрдпреВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдмрд╛рдЗрдХ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
WWW рдХреНрдпрд╛ рд╣реИ?
WWW рдПрдХ рдРрд╕рд╛ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ URL рдкрд░ рд╡реЗрдм рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдФрд░ рдкрд╛рда, рдмрдирд╛рд╡рдЯ, рд▓реЛрдб рдмрдВрдбрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рдорд╛рдг рдкрддреНрд░ (
рдХреНрд▓рд┐рдХ ) рдореЗрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИред
рдореИрдВ рдЯреЗрдХреНрд╕реНрдЯ рдбреЗрдЯрд╛ рдкреНрд░рд╛рд░реВрдк рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛ред
рдЖрд╡рд╢реНрдпрдХ рд╢рд░реНрддреЗрдВ
рдХрднреА-рдХрднреА рдХрд╛рд░реНрдп рдкреАрдПрдЪрдкреА рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╕рд░реНрд╡рд░ рд╕реЗ рдЧреЗрдо рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдарддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдк рдмреИрдХрдПрдВрдб рднрд╛рдЧ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рд╣рд░ рд╕рдордп рдирдП рдбрдмреНрд▓реНрдпреВрдбрдмреНрд▓реНрдпреВрдбрдмреНрд▓реНрдпреВ (рдкрддреЗ + "рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреЗ рд╣реИрдВ? рдПрдкреА = рд▓реЙрдЧрд┐рди рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо = ..."); рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ / рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдПрдХ рдФрд░ рдкрдХрдбрд╝ рд╣реИ: рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдореБрдЦреНрдп рдзрд╛рдЧреЗ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рддреЗ рд╣реБрдП, рд╕рдорд╛рди рд░реВрдк рд╕реЗ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрд░рдЯрд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред
рдирддреАрдЬрддрди, рд╡рд┐рдЪрд╛рд░ рдиреЗ рдХреБрдЫ рдРрд╕рд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЪреАрд░ рджрд┐рдпрд╛ рд╣реИ рдЬреЛ рдбрдмреНрд▓реНрдпреВрдбрдмреНрд▓реНрдпреВрдбрдмреНрд▓реНрдпреВ.рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреАрд╡рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдЖрдорддреМрд░ рдкрд░ рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдХреБрдЫ рд╡рд┐рдзрд┐ рдЦреАрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдПрдЧрд╛ред рдЖрдк рд╕реВрдЪреА рдХреЛ рдПрдирдо рд╡рд┐рдзрд┐ рдореЗрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
public enum PacketTypes { nil, auth, updateinfo }
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рдорд╢рдГ
NetRequest рдФрд░
NetResponse рд╡рд░реНрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рдЕрдиреБрд░реЛрдз / рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдВрдЧреЗред рд╡реЗ рдбреЗрдЯрд╛ рд╡рд┐рдирд┐рдордп рдкреНрд░рд╛рд░реВрдк рдХреЛ рдЫрд┐рдкрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╢рдмреНрджрдХреЛрд╢ (рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд░реВрдк рд╕реЗ рд╕рдорд╛рди) рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВред NetRequest рдЖрдкрдХреЛ
GetParamsString () рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд░реНрд╡рд░ рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред NetResponse рдореЗрдВ рд░реЗрдбреА-рдЯреВ-рдпреВрдЬрд╝ рдбреЗрдЯрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЖрдкрдХреЛ
IsError рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддреНрд░реБрдЯрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдПрдХ рдЕрдиреНрдп рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ HttpUtility (рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдирд╣реАрдВред рдкреИрдЯреНрд░рд┐рдХ рдЯреЙрд░реНрд╕реНрдЯреЗрдВрд╕рди рдХреЗ рд▓реЗрдЦрдХ), рдЬреЛ рдЖрдкрдХреЛ рд╡рд░реНрдгреЛрдВ (рд╕реНрдерд╛рди, рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ, рдЖрджрд┐) рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ System.Web рдХреЗ рд▓рд┐рдП Unity3d рдореЗрдВ рдпрд╣ рд╡рд░реНрдЧ рдирд╣реАрдВ рд╣реИред рдореИрдВ рдХреЗрд╡рд▓ рд╕реНрд░реЛрдд рджреВрдВрдЧрд╛, рд╣рдо рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
NetRequest.cs
using System.Collections.Generic; using System.Linq; public class NetRequest : Dictionary<string, string> { private const string METHOD_KEY = "method"; public NetRequest(PacketTypes header) { AddParam(METHOD_KEY, header.ToString()); } public void AddParam(string key, string value) { var val = HttpUtility.HtmlEncode(value); if (ContainsKey(key)) base[key] = val; else Add(key, val); } public void AddParam(string key, long value) { AddParam(key, value.ToString()); } public void AddParam(string key, bool value) { AddParam(key, value ? 1 : 0); } public void RemoveParam(string key) { if (ContainsKey(key)) Remove(key); } public string GetParamsString() { return string.Join("&", this.Select(n => n.Key + "=" + n.Value).ToArray()); } }
NetResponse.cs
using System.Collections.Generic; public class NetResponse : Dictionary<string, string> { private const string ERROR_KEY = "error"; public string GetError { get { if (IsError) return base[ERROR_KEY]; return string.Empty; } } public bool IsError { get { return ContainsKey(ERROR_KEY); } } public NetResponse(string data) { var mas = data.Split(new[] { '&' }); foreach (var s in mas) { var keyVal = s.Split(new[] { '=' }); Add(keyVal[0], HttpUtility.UrlDecode(keyVal[1])); } } }
рдЕрдм рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рд╡рд░реНрдЧ (рд╕рд┐рдВрдЧрд▓рдЯрди) рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ, рд╕рд╛рде рд╣реА рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖ рдкрд░ рдПрдкреАрдЖрдИ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЕрдиреБрд░реЛрдз рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рд╣реИред
Network.cs
using System.Collections; using UnityEngine; public class Network { private static Network _instance; public static Network Instance { get { if (_instance == null) _instance = new Network(); return _instance; } } private const string SERVER_PATH = "http://localhost:8080/server/engine.php"; private IEnumerator SendRequest(NetRequest request) { var www = new WWW(string.Concat(SERVER_PATH, "?", request.GetParamsString())); while (!www.isDone) yield return www; if (!string.IsNullOrEmpty(www.error)) {
рд╢рд╛рдпрдж, рджреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рд╣реИрдВ:
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ,
SendRequest рдкрджреНрдзрддрд┐ рдПрдХ IEnumerator рд▓реМрдЯрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрдиреБрд░реЛрдз рдХреЛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЬрдм рддрдХ рдЕрдиреБрд░реЛрдз рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рддрдм рддрдХ рд╣рдо рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ NetResponse рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред
рджреВрд╕рд░реЗ, рдЕрдЧрд░ WWW рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ рдпрд╛ рд╕рд░реНрд╡рд░ рд╕реЗ рдЖрддреА рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ NetResponse рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╢реНрд░реЗрд╖реНрда рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ, рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд▓рд╛рдкрддрд╛ рдбреЗрдЯрд╛ (рд╕рдВрдкреВрд░реНрдг рднрд░рдиреЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА, рдЖрджрд┐ рд╕реЗ рд╕реАрдзреЗ SendRequest рдкрд░ рд╣реИрд╢) рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЪрд▓реЛ IEnumerator SendUpdateInfo (int рдЕрдВрдХ) рдкрд░ рд░рд╣рддреЗ рд╣реИрдВред рдХреНрдпреЛрдВ IEnumerator? рдпрд╣, рднрд╛рдЗрдпреЛрдВ, StartCoroutine рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рддрд░реАрдХреЛрдВ рдХреЛ рдХреИрд╕реЗ рдХрд╣реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рд▓рд╛рдн рдХрд╣рд╛рдВ рд╣реИ?
рд╡рд╣ рдХрдо рд╣реИ
return SendRequest(request).ContinueWith(response => { if (response.IsError) {
рдХреНрдпреЛрдВрдХрд┐ рд╣рдо SendRequest рд╕реЗ NetResponse рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рддрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдБрдЪ рд╣реЛрддреА рд╣реИ, рдХреБрдЫ рднреА рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рдХреЗрд╡рд▓ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд░рд╣рддрд╛
рд╣реИ ред
public static class NetApiExt { public static IEnumerator ContinueWith(this IEnumerator request, Action<NetResponse> resp) { var link = request; while (link.MoveNext()) { yield return link; } var obj = link.Current as NetResponse; resp(obj); yield return obj; } }
рдпрд╣рд╛рдБ рдПрдХ рд╣реИрдХ рд╣реИ :)
рдЖрдк рднреЗрдЬрдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдФрд░ рдмрд╛рд╣рд░ рджреЛрдиреЛрдВ рдЬрд╡рд╛рдм рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
StartCoroutine(Network.Instance.SendUpdateInfo(userPoints).ContinueWith(reponse => { if (!reponse.IsError) {
рдореИрдВ рдХреЗрд╡рд▓ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╕рд░реНрд╡рд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рджреВрдВрдЧрд╛ред рд╣рдо $ _GET ["рдХреБрдЫ рдХреБрдВрдЬреА"] рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╣рдо рдХреБрдЫ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХрд┐рдВрд╕рди рдХреА рд╡рд╕реНрддреБ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
class NetResponse { private $mas = array(); public function AddParam($key, $val){ $this->mas[$key] = urlencode($val); } public function AddError($val){ $this->AddParam("error", $val); } public function SendResponse(){ $res = ""; foreach ($this->mas as $key => $val) { $res = $res.strtolower($key)."=".$val."&"; } if(strlen($res) > 0) echo substr($res,0,-1); } }
рдпрд╣ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ
$resp = new NetResponse; $resp->AddParam("points","123456");
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░
рдмреЗрд╢рдХ, рд╡рд┐рдХрд▓реНрдк рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рддрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ + рдЕрдЪреНрдЫрд╛ рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдкрд╛рдпрд╛ рдЧрдпрд╛ред
рдореИрдВ рдЖрдкрд╕реЗ рдкреВрдЫрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдкреНрд░рд┐рдп% рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо% s, рдЖрдк WWW рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЖрдк рдХрд┐рд╕ рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдП рд╣реИрдВ?