public void RequestDidComplete(DataspinWebRequest req) { if (req.isError()) { Log("Connection Error! Method: " + req.DSMethod.ToString() + ", Error Code: " + req.Error.Code.ToString() + ", Message: " + req.Error.Message); } else { Dictionary <string, object> dict = null; try { dict = Json.Deserialize(req.Response) as Dictionary <string, object>; } catch { Log("Error! Couldn't parse JSON to dictionary! Method: " + req.DSMethod.ToString() + ", ResponseJson: " + req.Response); } if (dict != null) { if ((string)dict["result"] == "OK") { Log("Request " + req.DSMethod.ToString() + " complete!"); try { switch (req.DSMethod) { case DataspinRequestMethod.Dataspin_GetUid: try { uid = GetInt(dict["uid"]).ToString(); DataspinUidRetrieved(uid); Log("Uid set - " + uid); if (CurrentConfiguration.ShouldStartSessionAuto) { StartSession(); } } catch { Log("Server response error! Parameter 'uid' missing! Method: " + req.DSMethod.ToString() + ", ResponseJson: " + req.Response); } break; case DataspinRequestMethod.Dataspin_StartSession: sessionId = ((int)(long)dict["sessid"]).ToString(); isSessionInProgress = true; DataspinTape.Instance.GetTape(); DataspinSessionStarted(); Log("Session started! Id: " + sessionId); break; case DataspinRequestMethod.Dataspin_EndSession: isSessionInProgress = false; DataspinSessionEnded(); sessionId = null; Log("Session ended!"); break; case DataspinRequestMethod.Dataspin_CustomEvent: Log("Custom Event sent!"); break; case DataspinRequestMethod.Dataspin_GetBalance: DataspinBank.Instance.setDataspinBank(GetInt(dict["total_coins"]), GetInt(dict["total_coins_B"]), GetInt(dict["purchases_no"])); DataspinBankChanged(); Log("Get Balance finished!"); break; case DataspinRequestMethod.Dataspin_AddBalance: DataspinBank.Instance.setDataspinBank(GetInt(dict["purse_a"]), GetInt(dict["purse_b"])); //I'm not sure about that. Still doesn't work on vr2 domain. I suppose Marcin changed it only in beta DS version. DataspinBankChanged(); Log("Add Balance success!"); break; case DataspinRequestMethod.Dataspin_GetAppItems: try { DataspinBank.Instance.SetPurchasesList((List <object>)dict["purchases"]); } catch { Log("Get App items requested without purchases."); } DataspinBank.Instance.SetItemsList((List <object>)dict["items"]); Log("Get App Items success!"); break; case DataspinRequestMethod.Dataspin_PurchaseItem: //It would be purrrfect if server could return purchase or purchasesArray if ((string)dict["message"] == "ok") { DataspinPurchaseSuccess(); Log("Purchase successful!"); } else { Log("Something is wrong with purchase!"); DataspinPurchaseFailed((string)dict["message"]); } break; case DataspinRequestMethod.Dataspin_CheckCoupon: if ((string)dict["message"] == "BAD CODE") { DataspinCouponDeclined("BAD CODE"); Log("Bad code entered!"); } else if ((string)dict["message"] == "CODE EXPIRED") { DataspinCouponDeclined("CODE EXPIRED"); Log("Entered code is expired!"); } else if ((string)dict["message"] == "CODE NOT ACTIVE YET") { DataspinCouponDeclined("CODE NOT ACTIVE YET"); Log("Entered code is not ready!"); } else { Log("Good code!"); if (GetInt(dict["used_already"]) != 0) { DataspinCouponDeclined("USED ALREADY"); Log("But already used!"); } else { Log("And code is valid!"); DataspinCouponAccepted((string)dict["params"]); } } break; case DataspinRequestMethod.Dataspin_RegisterMail: Log("Mail registered!"); DataspinMailRegistered(); break; case DataspinRequestMethod.Dataspin_RegisterNickname: if (((string)dict["message"]).Contains("NOT UNIQUE")) { DataspinNicknameChangeFailed(); } else { DataspinNicknameChanged((string)dict["nick"]); } break; case DataspinRequestMethod.Dataspin_RegisterGPlusId: DataspinGooglePlusIdRegistered(); break; case DataspinRequestMethod.Dataspin_GetGooglePlusIds: Log("Google plus ids retrieved!"); DataspinGooglePlusIds((List <object>)dict["ids"]); break; case DataspinRequestMethod.Dataspin_PostRace: Log("Info about race sent! Total distance: " + ((long)dict["distance"]).ToString()); break; case DataspinRequestMethod.Dataspin_UpdateAdID: Log("Ad id registered!"); break; default: LogWarning("Unsupported response! Message: " + (string)dict["message"]); break; } } catch (Exception e) { //LogWarning("Response parameters couldn't be parsed."); DataspinError(new Error("Couldn't parse json. MSG: " + (string)dict["message"] + " Details: " + e.Message + ", " + e.StackTrace, req.DSMethod)); } } else if ((string)dict["result"] == "ERROR") { if (req.DSMethod == DataspinRequestMethod.Dataspin_PurchaseItem) { if (((string)dict["message"]).Contains("not enough B")) { DataspinPurchaseFailed("notEnoughCurrency_B"); } else if (((string)dict["message"]).Contains("not enough A")) { DataspinPurchaseFailed("notEnoughCurrency_A"); } else { DataspinError(new Error(req.Response, req.DSMethod)); } } } else { if (req.DSMethod == DataspinRequestMethod.Dataspin_RegisterNickname) { if (((string)dict["message"]).Contains("NOT UNIQUE")) { DataspinNicknameChangeFailed(); } } else { DataspinError(new Error(req.Response, req.DSMethod)); } } } else { DataspinError(new Error("Dictionary is null!")); } } }