public static void JoinWorld( int worldId, string playerClass ) { if( worldId < 0 ) { throw new ArgumentException( string.Format("WorldId( {0} ) is invalid", worldId) ); } HTTP.JSON playerT = new HTTP.JSON( "{ \"player\": {\"type\": \"" + playerClass + "\"}}" ); //WWW www = WWWX.Post( string.Format("{0}/worlds/{1}/players.json", urlServer, worldId), playerT, authenticatedGodModeParameters ); HTTP.Request request = new HTTP.Request( "Post", string.Format("{0}/worlds/{1}/players.json", urlServer, worldId) ); request.SetText( playerT ); request.AddParameters( authenticatedGodModeParameters ); request.Send(); while( !request.isDone ) { } Debug.Log(request.response.Text); request = new HTTP.Request( "Get", urlGetUserPlayers() ); request.AddParameters( authenticatedGodModeParameters ); request.Send(); while( !request.isDone ) { } }
/// <summary> /// Execute the harvest /// </summary> public IEnumerator DoIt() { // submit harvest to API point progress = 0f; doItError = ""; HTTP.Request request = GetDoItWWW(); //Debug.Log(request.bytes); request.Send(); while (!request.isDone) { //progress = Mathf.Min(www.uploadProgress+www.progress, 0.99f); yield return 0; } // deserialize the product values Harvest.Products products; Debug.Log( request.response.status ); try { products = JSONDecoder.Decode<Harvest.Products>( request.response.Text ); } catch (JsonException e) { Debug.LogError(e.ToString()+"\n"+request.response.Text); //doItError = www.error; progress = 1f; yield break; } // TODO: since server api does not presently modify cover type, modify it with god mode here if (this.cutType == CutType.Clearcut) { PlayerAction.ResourceTileModification modification = new PlayerAction.ResourceTileModification(); modification.resource_tile = new ClearcutModifiedFields(); string json = JsonMapper.ToJson(modification); foreach (int id in this.ids) { request = new HTTP.Request( "Get", WebRequests.GetURLToResourceTile(id) ); request.AddParameters( WebRequests.authenticatedParameters ); request.Send(); while( !request.isDone ) { yield return 0; } //if (!string.IsNullOrEmpty(www.error)) { // progress = 1f; doItError = www.error; // yield break; //} ResourceTile tile; try { tile = JSONDecoder.Decode<IndividualResourceTile>(request.response.Text).resource_tile; switch (tile.baseCoverType) { // case BaseCoverType.Barren: // case BaseCoverType.CultivatedCrops: case BaseCoverType.Developed: case BaseCoverType.Excluded: // case BaseCoverType.Forest: // case BaseCoverType.Herbaceous: case BaseCoverType.Unknown: case BaseCoverType.Water: // case BaseCoverType.Wetland: continue; } } catch (JsonException e) { Debug.LogError(e.ToString()+"\n"+request.response.Text); } request = new HTTP.Request( "Put", WebRequests.GetURLToResourceTile(id) ); request.SetText( json ); request.AddParameters( WebRequests.authenticatedGodModeParameters ); request.Send(); while( !request.isDone ) { yield return 0; } //if (!string.IsNullOrEmpty(www.error)) { // progress = 1f; doItError = www.error; // yield break;letmein //} } } // add products to harvest history if (m_history == null) { m_history = new List<Products>(); } m_history.Add(products); // set progress to done progress = 1f; doItError = ""; // broadcast message that harvest was executed MessengerAM.Send(new MessageHarvestExecuted(this, products)); // TODO: Collapse these two messages into one Messenger<Products>.Broadcast("HarvestProducts",products); }
/// <summary> /// Forces a put of resource tile modifications using god mode. /// </summary> /// <remarks> /// This is a temporary solution for implementing actions with no server API point, and can eventually be removed. /// </remarks> /// <param name='selection'> /// The selection. /// </param> protected virtual IEnumerator Put(ResourceTileSelection selection) { HTTP.Request request; m_actionProgress = 0f; string json = GetActionJson(); Debug.Log(json); List<ResourceTile> tiles = new List<ResourceTile>(); float div = 1f/selection.Count(); for (int i=0; i<selection.Count(); ++i) { int id = selection[i]; request = new HTTP.Request( "Put", WebRequests.GetURLToResourceTile(id) ); request.SetText( json ); request.AddParameters( WebRequests.authenticatedGodModeParameters ); request.Send(); while (!request.isDone) { //m_actionProgress = (i+www.uploadProgress)*div; yield return 0; } if( request.ProducedError ) { m_actionProgress = 1f; yield break; } try { tiles.Add(JSONDecoder.Decode<IndividualResourceTile>(request.response.Text).resource_tile); } catch (JsonException) { Debug.LogError(request.response.Text); } } // ConcludeActionOnResourceTiles(tiles.ToArray()); //Update the world IEnumerator e = WebRequests.RefreshWorldData(new WebCoroutine()); yield return e.Current; while(e.MoveNext()) yield return e.Current; }
/// <summary> /// Gets a WWW object do perform the harvest, configured for the associated api point on the server. /// </summary> /// <returns> /// The do it WWW. /// </returns> public HTTP.Request GetDoItWWW() { string apiPoint = ""; Dictionary<string, string> parameters = WebRequests.authenticatedParameters; switch (this.cutType) { case CutType.Clearcut: apiPoint = "clearcut"; break; case CutType.DiameterLimitCut: apiPoint = "diameter_limit_cut"; parameters.Add(this.diameterLimitCutDirection==DiameterLimitCutDirection.Greater?"above":"below", this.diameterLimit.ToString()); break; case CutType.QRatioCut: apiPoint = "partial_selection_cut"; parameters.Add("qratio", this.qRatio.ToString()); parameters.Add("target_basal_area", this.basalArea.ToString()); break; } string url = string.Format( "{0}/worlds/{1}/resource_tiles/{2}.json", WebRequests.urlServer, UserData.worldNumber, apiPoint ); HTTP.Request request = new HTTP.Request( "Post", url ); request.AddParameters( parameters ); HTTP.JSON json = new HTTP.JSON(); json.Data = JsonMapper.ToJson( new ResourceTileSelection(this.ids) ); request.SetText(json); ///.ToJson() ); //Debug.Log(new ResourceTileSelection(this.ids).ToJson()); return request; }