我正在開發一個多玩家遊戲,它有一個基於服務器發送通知的模塊。例如:其他玩家的動作,分數更新,要做的動作等。android中的通知處理
我正在接收json格式的通知。我想知道是否有存在某些編碼模式,它會自動將不同的通知發送給相應的處理程序。非常感謝您的幫助。
我正在開發一個多玩家遊戲,它有一個基於服務器發送通知的模塊。例如:其他玩家的動作,分數更新,要做的動作等。android中的通知處理
我正在接收json格式的通知。我想知道是否有存在某些編碼模式,它會自動將不同的通知發送給相應的處理程序。非常感謝您的幫助。
嗯,也不能說,如果這歸類爲一個模式:
我就可以拿是簡單地創建一個單獨的類,讓我們把它叫做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)
}
}
這種方法的設計將是實現而變化的每個活動(已知圖案爲碎片回通信以活性)的回調。
這是未經測試和剛纔寫的,但我非常有信心它會很好地工作。
謝謝cYrixmorten。我想像設計一樣但有一點點差異。這是關於使用觀察者模式,但有一個HashMap存儲每個觀察員/控制器的關鍵。並且像過濾器一樣使用相同的過濾器,而不是像上面那樣註冊不同的GameInterface,只需使用一個鍵添加每個GameInterface即可。請分享您對此的看法。 – Adnan
這可能表明這條道路不是一個壞主意:)關於觀察者模式,那麼我認爲這是一個品味問題。然而,在我看來,觀察者模式更具通用性,如果有意義的話,任何人都可以註冊觀察者,而在這裏有一組預定義的對象,應該接收定製的信息。我確信這兩種方法都可行。 – cYrixmorten
對..謝謝:) – Adnan
一個簡單的方法是使用廣播,讓每個處理程序監聽適當的意圖,這種方式只選擇那些相關的。出於好奇,你使用GCM還是反覆拉動服務器進行更新? – cYrixmorten
其實大約有3種活動通過通知來控制遊戲,每個活動都會收到5到20個不同的通知。 – Adnan
不,我正在使用信號R. – Adnan