2013-09-28 3 views
0

Я разрабатываю многопользовательскую игру, в которой есть модуль, который работает на основе отправки уведомлений сервером. Например: Действие другого игрока, обновление счета, действие и т. Д.Обработка уведомлений в android

Я получаю уведомление в формате json. Мне интересно, существует ли какой-нибудь шаблон кодирования, который автоматически доставляет разные уведомления своим соответствующим обработчикам. Большое спасибо за вашу помощь.

+0

Простым подходом было бы использовать Broadcasting и позволять каждому обработчику прослушивать соответствующие намерения, таким образом, только выбирать соответствующие. Просто из любопытства вы используете GCM или неоднократно вытягиваете сервер за обновлениями? – cYrixmorten

+0

На самом деле существует около 3 видов деятельности, которые контролируют игру на основе уведомления, и каждый получает от 5 до 20 различных уведомлений. – Adnan

+0

Нет, я использую сигнал R. – Adnan

ответ

1

Ну, не могу сказать, если это классифицирует как шаблон:

Мое взятие на этом было бы просто создать отдельный класс, позволяет назвать его JSONGameStateFilter, чтобы отфильтровать объект JSON на основе полученного значения плюс состояние игры

что-то вроде:

public class JSONGameStateFilter() { 

    public interface GameInterface1 { 
     // callback methods for activity 1 
     // example: public void newPlayerArrived(String name, int score); 
     // ... 
    } 

    public interface GameInterface2 { 
     // callback methods for activity 2 
    } 

    public interface GameInterface3 { 
     // callback methods for activity 3 
    } 

    private GameInterface1 callback1; 
    private GameInterface2 callback2; 
    private GameInterface3 callback3; 

    private JSONGameStateFilter instance; 

    public static JSONGameStateFilter getInstance() { 
     if (instance != null) { 
      return instance = new JSONGameStateFilter(); 
     } 
    } 
    private JSONGameStateFilter() {} 

    public void registerListener(GameInterface1 callback) { 
     // called by Activity1 implementing GameInterface1 
     // by JSONGameStateFilter.newInstance().registerListener(this); 
     this.callback1 = callback; 
    } 

    public void registerListener(GameInterface2 callback) { 
     this.callback2 = callback; 
    } 

    public void registerListener(GameInterface3 callback) { 
     this.callback3 = callback; 
    } 

    public void filterJSON(JSONObject object) { 
     // read JSON and gamestate 
     // depending on situation call the right callback 
     // example: if (callback1 != null) callback1.newPlayerArrived(name, score) 
    } 
} 

дизайн этого подхода было бы реализации различен обратных вызовов по каждому виду деятельности (известной модели для фрагментов обратной связи с деятельностью).

Это не проверено и написано только сейчас, но я уверен, что он будет работать хорошо.

+0

Спасибо cYrixmorten. Я думал так же, как дизайн, но с небольшим разницей. Речь шла об использовании шаблона Observer, но с HashMap для хранения каждого наблюдателя/контроллера с помощью ключа. И используя тот же фильтр, вместо регистрации другого GameInterface, как указано выше, просто добавьте каждый GameInterface с ключом. Пожалуйста, поделитесь своими взглядами. – Adnan

+0

Это может означать, что этот путь - не плохая идея :) Что касается шаблона наблюдателя, то я думаю, что это вопрос вкуса. Однако, на мой взгляд, шаблон Observer более общий, если это имеет смысл, поскольку любой может зарегистрироваться в Observer, тогда как здесь есть предопределенный набор объектов, которые должны получать индивидуальную информацию. Оба метода будут работать, я уверен. – cYrixmorten

+0

Правильно .. Спасибо! :) – Adnan

Смежные вопросы