public void testNotifyOfServerChanges() { System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); System.Xml.XmlElement serverNode = doc.CreateElement("server"); System.Xml.XmlElement child1 = doc.CreateElement("child1"); System.Xml.XmlElement child2 = doc.CreateElement("child2"); serverNode.AppendChild(child1); serverNode.AppendChild(child2); doc.AppendChild(serverNode); bool called = false; Action <object> callback = o => { called = true; Console.WriteLine(o.ToString()); }; RoarManager.roarServerAllEvent += callback; RoarManager.NotifyOfServerChanges(serverNode); Assert.IsTrue(called); this.mockery.VerifyAllExpectationsHaveBeenMet(); }
protected void OnServerResponse(string raw, string apicall, IRequestCallback cb) { var uc = apicall.Split("/"[0]); var controller = uc[0]; var action = uc[1]; if (Debug.isDebugBuild) { Debug.Log(raw); } // Fire call complete event RoarManager.OnRoarNetworkEnd("no id"); // -- Parse the Roar response // Unexpected server response if (raw == null || raw.Length == 0 || raw[0] != '<') { // Error: fire the error callback System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); System.Xml.XmlElement error = doc.CreateElement("error"); doc.AppendChild(error); error.AppendChild(doc.CreateTextNode(raw)); if (cb != null) { cb.OnRequest( new Roar.RequestResult( RoarExtensions.CreateXmlElement("error", raw), IWebAPI.INVALID_XML_ERROR, "Invalid server response" )); } return; } System.Xml.XmlElement root = null; try { root = RoarExtensions.CreateXmlElement(raw); if (root == null) { throw new System.Xml.XmlException("CreateXmlElement returned null"); } } catch (System.Xml.XmlException e) { if (cb != null) { cb.OnRequest( new Roar.RequestResult( RoarExtensions.CreateXmlElement("error", raw), IWebAPI.INVALID_XML_ERROR, e.ToString() )); } return; } System.Xml.XmlElement io = root.SelectSingleNode("/roar/io") as System.Xml.XmlElement; if (io != null) { if (cb != null) { cb.OnRequest( new Roar.RequestResult( root, IWebAPI.IO_ERROR, io.InnerText )); } return; } int callback_code; string callback_msg = ""; System.Xml.XmlElement actionElement = root.SelectSingleNode("/roar/" + controller + "/" + action) as System.Xml.XmlElement; if (actionElement == null) { if (cb != null) { cb.OnRequest( new Roar.RequestResult( RoarExtensions.CreateXmlElement("error", raw), IWebAPI.INVALID_XML_ERROR, "Incorrect XML response" )); } return; } // Pre-process <server> block if any and attach any processed data System.Xml.XmlElement serverElement = root.SelectSingleNode("/roar/server") as System.Xml.XmlElement; RoarManager.NotifyOfServerChanges(serverElement); // Status on Server returned an error. Action did not succeed. string status = actionElement.GetAttribute("status"); if (status == "error") { callback_code = IWebAPI.UNKNOWN_ERR; callback_msg = actionElement.SelectSingleNode("error").InnerText; string server_error = (actionElement.SelectSingleNode("error") as System.Xml.XmlElement).GetAttribute("type"); if (server_error == "0") { if (callback_msg == "Must be logged in") { callback_code = IWebAPI.UNAUTHORIZED; } if (callback_msg == "Invalid auth_token") { callback_code = IWebAPI.UNAUTHORIZED; } if (callback_msg == "Must specify auth_token") { callback_code = IWebAPI.BAD_INPUTS; } if (callback_msg == "Must specify name and hash") { callback_code = IWebAPI.BAD_INPUTS; } if (callback_msg == "Invalid name or password") { callback_code = IWebAPI.DISALLOWED; } if (callback_msg == "Player already exists") { callback_code = IWebAPI.DISALLOWED; } logger.DebugLog(string.Format("[roar] -- response error: {0} (api call = {1})", callback_msg, apicall)); } // Error: fire the callback // NOTE: The Unity version ASSUMES callback = errorCallback if (cb != null) { cb.OnRequest(new Roar.RequestResult(root, callback_code, callback_msg)); } } // No error - pre-process the result else { System.Xml.XmlElement auth_token = actionElement.SelectSingleNode(".//auth_token") as System.Xml.XmlElement; if (auth_token != null && !string.IsNullOrEmpty(auth_token.InnerText)) { RoarAuthToken = auth_token.InnerText; } callback_code = IWebAPI.OK; if (cb != null) { cb.OnRequest(new Roar.RequestResult(root, callback_code, callback_msg)); } } RoarManager.OnCallComplete(new RoarManager.CallInfo(root, callback_code, callback_msg, "no id")); }