/* * Copyright (c) 2012. HappyDroids LLC, All rights reserved. */ package com.happydroids.droidtowers.gamestate.server; import com.happydroids.droidtowers.gui.VibrateClickListener; import com.happydroids.droidtowers.jackson.Vector2Serializer; import com.happydroids.droidtowers.jackson.Vector3Serializer; import com.happydroids.security.SecurePreferences; import com.happydroids.server.HappyDroidService; import org.apach3.http.client.methods.HttpRequestBase; import java.util.UUID; public class TowerGameService extends HappyDroidService { private static final String TAG = TowerGameService.class.getSimpleName(); public static final String SESSION_TOKEN = "SESSION_TOKEN"; public static final String DEVICE_ID = "DEVICE_ID"; private SecurePreferences preferences; private boolean authenticated; private Device device; private RunnableQueue postAuthRunnables; private boolean authenticationFinished; public TowerGameService() { super(); postAuthRunnables = new RunnableQueue(); // getObjectMapper().addDeserializer(Class.class, new TowerGameClassDeserializer()); getObjectMapper().addSerializer(new Vector3Serializer()); getObjectMapper().addSerializer(new Vector2Serializer()); } public static TowerGameService instance() { if (_instance == null) { _instance = new TowerGameService(); } return (TowerGameService) _instance; } public static boolean hasBeenInitialised() { return _instance != null; } public String getSessionToken() { return getPreferences().getString(SESSION_TOKEN, null); } public String getDeviceId() { return getPreferences().getString(DEVICE_ID); } public synchronized void setSessionToken(String token) { if (token != null) { getPreferences().putString(SESSION_TOKEN, token); getPreferences().flush(); authenticationFinished = true; authenticated = true; postAuthRunnables.runAll(); } else { getPreferences().remove(SESSION_TOKEN); getPreferences().flush(); } } public boolean isAuthenticated() { return authenticated; } @Override protected void addDefaultHeaders(HttpRequestBase request) { super.addDefaultHeaders(request); request.setHeader("X-Device-UUID", HappyDroidService.instance().getDeviceId()); request.setHeader("X-Device-Market", HappyDroidService.getDeviceOSMarketName()); if (getSessionToken() != null) { request.setHeader("X-Token", getSessionToken()); } } public void afterDeviceIdentification(Runnable runnable) { if (!authenticationFinished) { postAuthRunnables.push(runnable); } else { runnable.run(); } } public void resetAuthentication() { setSessionToken(null); authenticated = false; authenticationFinished = false; postAuthRunnables.clear(); } public void setAudioState(boolean audioEnabled) { getPreferences().putBoolean("audioState", audioEnabled); getPreferences().flush(); } public boolean getAudioState() { return getPreferences().getBoolean("audioState", true); } public RunnableQueue getPostAuthRunnables() { return postAuthRunnables; } public void setAuthenticated(boolean authenticated) { this.authenticated = authenticated; if (!this.authenticated) { setSessionToken(null); } authenticationFinished = true; postAuthRunnables.runAll(); } public void setDeviceId(String deviceId) { getPreferences().putString(DEVICE_ID, deviceId); getPreferences().flush(); } public SecurePreferences getPreferences() { if (preferences == null) { preferences = new SecurePreferences("com.happydroids.droidtowers." + getDeviceOSMarketName()); if (!preferences.contains(DEVICE_ID)) { preferences.putString(DEVICE_ID, UUID.randomUUID().toString().replaceAll("-", "")); preferences.flush(); } VibrateClickListener.setVibrateEnabled(preferences.getBoolean("vibrateOnTouch", true)); } return preferences; } }