由於您已建立了產生 XML 訊息的輔助程式類別,因此您可以寫入 createRegistrationString 方法的實作。此方法由 registerCallbacks 方法呼叫,有關此方法的說明位於如何註冊與取消註冊回呼。
createRegistrationString 建構 CallbackReg 物件,並設定其註冊類型與通訊埠。然後,透過使用 createAllEvent、createMembershipEvent、createRgEvent 和 createREvent 輔助程式方法,createRegistrationString 將建構多種事件。在建立 CallbackReg 物件之後,便會將每個事件加入該物件。最後,createRegistrationString 對 CallbackReg 物件呼叫 convertToXml 方法,以擷取 String 形式的 XML 訊息。
請注意,regs 成員變數會儲存使用者為應用程式提供的指令行引數。第五個引數與後續引數指定應用程式應該註冊的事件。第四個引數指定註冊的類型,但在此範例中忽略。附錄 GCrnpClient.java 應用程式 中的完整程式碼將展示如何使用第四個引數。
建立實施前導邏輯的 Java 程式碼。
private String createRegistrationString() throws Exception { CallbackReg cbReg = new CallbackReg(); cbReg.setPort("" + localPort); cbReg.setRegType(CallbackReg.ADD_CLIENT); // add the events for (int i = 4; i < regs.length; i++) { if (regs[i].equals("M")) { cbReg.addRegEvent(createMembershipEvent()); } else if (regs[i].equals("A")) { cbReg.addRegEvent(createAllEvent()); } else if (regs[i].substring(0,2).equals("RG")) { cbReg.addRegEvent(createRgEvent(regs[i].substring(3))); } else if (regs[i].substring(0,1).equals("R")) { cbReg.addRegEvent(createREvent(regs[i].substring(2))); } } String xmlStr = cbReg.convertToXml(); return (xmlStr); } private Event createAllEvent() { Event allEvent = new Event(); allEvent.setClass("EC_Cluster"); return (allEvent); } private Event createMembershipEvent() { Event membershipEvent = new Event(); membershipEvent.setClass("EC_Cluster"); membershipEvent.setSubclass("ESC_cluster_membership"); return (membershipEvent); } private Event createRgEvent(String rgname) { Event rgStateEvent = new Event(); rgStateEvent.setClass("EC_Cluster"); rgStateEvent.setSubclass("ESC_cluster_rg_state"); NVPair rgNvpair = new NVPair(); rgNvpair.setName("rg_name"); rgNvpair.setValue(rgname); rgStateEvent.addNvpair(rgNvpair); return (rgStateEvent); } private Event createREvent(String rname) { Event rStateEvent = new Event(); rStateEvent.setClass("EC_Cluster"); rStateEvent.setSubclass("ESC_cluster_r_state"); NVPair rNvpair = new NVPair(); rNvpair.setName("r_name"); rNvpair.setValue(rname); rStateEvent.addNvpair(rNvpair); return (rStateEvent); }
建立取消註冊字串。
由於您無需提供事件,因此建立取消註冊字串比建立註冊字串更容易。
private String createUnregistrationString() throws Exception { CallbackReg cbReg = new CallbackReg(); cbReg.setPort("" + localPort); cbReg.setRegType(CallbackReg.REMOVE_CLIENT); String xmlStr = cbReg.convertToXml(); return (xmlStr); }