In diesem Abschnitt des Tutorials zeige ich dir, wie du nun die Informationen der API in dein Spiel bekommst.
Natürlich zuerst Unity öffnen und ein neues Script mit dem Namen Slim.cs anlegen.
Dieses Script sieht folgendermaßen aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
namespace GameFramework.SlimWrapper { using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Text; using UnityEngine; public class Slim { /// <summary> /// /// </summary> public enum HttpMethod { POST, GET, PUT, DELETE } /// <summary> /// /// </summary> public virtual string ServerUrl { set { if (value == null) throw new ArgumentNullException("value"); } get { return "http://localhost/tutorialgameapi/game1/v1/"; } } /// <summary> /// connects server url with endpoint /// </summary> /// <param name="endPoint"></param> /// <returns></returns> public virtual string APIUrl(string endPoint) { return ServerUrl + endPoint; } // endpoints private const string endHelloWorld = "hello/"; /// <summary> /// "Hello, world" /// </summary> /// <returns></returns> public string GetHelloWorld(string s) { return NewHttpWebRequest(HttpMethod.GET, endHelloWorld + s); } #region Request /// <summary> /// the ONE and ONLY http web request - returns json strings /// </summary> /// <param name="endpoint"></param> /// <param name="method"></param> /// <param name="headers"></param> /// <param name="jsonString"></param> /// <returns></returns> public virtual string NewHttpWebRequest(HttpMethod method, string endpoint, Dictionary<string, string> headers = null, string jsonString = null) { Debug.LogWarning("method: " + method + " -- endpoint: " + endpoint + " -- characterName: " + jsonString); var url = APIUrl(endpoint); Debug.LogWarning(url); var responseFromServer = String.Empty; try { // Create the web request var request = WebRequest.Create(url) as HttpWebRequest; if (request != null) { request.Credentials = CredentialCache.DefaultCredentials; //request.Accept = "application/xml"; // Determines the response type as XML or JSON etc request.ContentType = "application/x-www-form-urlencoded"; request.ProtocolVersion = HttpVersion.Version11; request.KeepAlive = true; // set request method request.Method = method.ToString().ToUpper(); if (headers != null) { foreach (var header in headers) { Debug.Log(header.Key + " ::: " + header.Value); request.Headers.Add(header.Key, header.Value); } } // data body if (method == HttpMethod.PUT || method == HttpMethod.POST) { if (string.IsNullOrEmpty(jsonString)) { Debug.LogError("ERROR - jsonString is empty"); return "ERROR - jsonString is empty"; } string dataString = "data=" + jsonString; var dataByte = Encoding.UTF8.GetBytes(dataString); request.ContentLength = dataByte.Length; using (Stream dataStream = request.GetRequestStream()) { dataStream.Write(dataByte, 0, dataByte.Length); } } var response = (HttpWebResponse) request.GetResponse(); var resStream = response.GetResponseStream(); if (response.StatusCode != HttpStatusCode.OK) { var message = String.Format("Request failed. Received HTTP {0}", response.StatusCode); throw new ApplicationException(message); } if (resStream != null) { var reader = new StreamReader(resStream); responseFromServer = reader.ReadToEnd(); reader.Close(); } if (resStream != null) resStream.Close(); response.Close(); } } catch (WebException ex) { if (ex.Status == WebExceptionStatus.ProtocolError) { var statusCode = (int) ((HttpWebResponse) ex.Response).StatusCode; var responseStream = ex.Response.GetResponseStream(); if (responseStream != null) responseFromServer = (new StreamReader(responseStream)).ReadToEnd(); //ApiStatusMessageHandler.SetStatusCode(statusCode); } else { throw (ex); } } finally { Debug.Log("WEB REQUEST RESPONSE :" + responseFromServer); } return responseFromServer; } #endregion Request } } |
HttpMethod – ist ein enum mit den vier wichtigen Http-Methoden!
ServerUrl – erklärt sich von selbst.
endHelloWorld – hier wird es interessanter. wie bereits am Anfang des Tutorials erwähnt verarbeitet die API url´s.
Die Basis url ist die ServerUrl. An diese wird ein Endpunkt angesetzt. wie im bereits erwähnten Beispiel:
http://localhost/tutorialgameapi/game1/v1/character/Hans oder http://localhost/tutorialgameapi/game1/v1/hello/Hans
Wobei „character/Hans“ oder auch „hello/Hans“ der Endpunkt wäre.
GetHelloWorld(string s) – Testmethode, ruft die „Hello, <name>“-GET-Methode in der API auf.
NewHttpWebRequest – führt die Request aus!
Der Rest sollte relativ gut lesbar sein!
So kannst du das Script testen:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
using UnityEngine; using GameFramework.SlimWrapper; public class TestScript : MonoBehaviour { void Start() { Slim slim = new Slim(); var characterName = "Hans"; Debug.Log(slim.NewHttpWebRequest(HttpMethod.GET, slim.GetHelloWorld(characterName)); Debug.Log(slim.NewHttpWebRequest(HttpMethod.GET, slim.ApiUrl + "/character/" + characterName)); } } |
auch dieses mal wird Folgendes zurückgeliefert:
„Hello, Hans“
und
{ “guid”: “1″, “name”: “Hans”, “health”: “100″, “score”: “1000″ }
Bis zum nächsten Teil!
Daniel