001package net.gdface.facelog.client; 002 003import java.net.URI; 004import java.net.URL; 005import java.util.List; 006import java.util.Map; 007 008import com.google.common.base.Supplier; 009import gu.dtalk.MenuItem; 010import gu.dtalk.cmd.CmdManager; 011import gu.dtalk.cmd.TaskManager; 012import gu.dtalk.engine.BaseDispatcher; 013import gu.dtalk.engine.TaskDispatcher; 014import gu.simplemq.IMessageAdapter; 015import gu.simplemq.IMessageQueueFactory; 016import net.gdface.facelog.IFaceLog; 017import net.gdface.facelog.IFaceLogDecorator; 018import net.gdface.facelog.MQParam; 019import net.gdface.facelog.Token; 020import net.gdface.facelog.client.ClientExtendTools.ParameterSupplier; 021import net.gdface.facelog.client.dtalk.DtalkEngineForFacelog; 022import net.gdface.facelog.hb.DynamicChannelListener; 023import net.gdface.facelog.hb.DeviceHeartbeat; 024import net.gdface.facelog.mq.ServiceHeartbeatListener; 025import net.gdface.facelog.thrift.IFaceLogThriftClient; 026 027public class IFaceLogClient extends IFaceLogDecorator { 028 public final ClientExtendTools clientTools; 029 public IFaceLogClient(IFaceLog delegate) { 030 super(delegate); 031 clientTools = new ClientExtendTools(delegate); 032 } 033 /** 034 * @param host RPC service host 035 * @param port RPC service port 036 */ 037 public IFaceLogClient(String host,int port) { 038 this(new IFaceLogThriftClient(host,port)); 039 } 040 /** 041 * test if connectable for RPC service 042 * @return return {@code true} if connectable ,otherwise {@code false} 043 */ 044 public boolean testConnect(){ 045 return clientTools.getFactory().testConnect(); 046 } 047 /** 048 * 如果{@code host}是本机地址则用facelog服务主机名替换 049 * @param host 050 * @return valid host name 051 */ 052 public String insteadHostIfLocalhost(String host) { 053 return clientTools.insteadHostIfLocalhost(host); 054 } 055 /** 056 * 如果{@code uri}的主机名是本机地址则用facelog服务主机名替换 057 * @param uri 058 * @return {@code uri} or new URI instead with host of facelog 059 */ 060 public URI insteadHostIfLocalhost(URI uri) { 061 return clientTools.insteadHostIfLocalhost(uri); 062 } 063 /** 064 * 如果{@code url}的主机名是本机地址则用facelog服务主机名替换 065 * @param url 066 * @return {@code url} or new URI instead with host of facelog 067 */ 068 public URL insteadHostIfLocalhost(URL url) { 069 return clientTools.insteadHostIfLocalhost(url); 070 } 071 /** 072 * @param deviceId 073 * @return Supplier instance 074 * @see net.gdface.facelog.client.ClientExtendTools#getDeviceGroupIdSupplier(int) 075 */ 076 public Supplier<Integer> getDeviceGroupIdSupplier(int deviceId) { 077 return clientTools.getDeviceGroupIdSupplier(deviceId); 078 } 079 /** 080 * @param personId 081 * @return Supplier instance 082 * @see net.gdface.facelog.client.ClientExtendTools#getPersonGroupBelonsSupplier(int) 083 */ 084 public Supplier<List<Integer>> getPersonGroupBelonsSupplier(int personId) { 085 return clientTools.getPersonGroupBelonsSupplier(personId); 086 } 087 /** 088 * @param token 089 * @return CmdManager instance 090 * @see net.gdface.facelog.client.ClientExtendTools#makeCmdManager(net.gdface.facelog.Token) 091 */ 092 public CmdManager makeCmdManager(Token token) { 093 return clientTools.makeCmdManager(token); 094 } 095 /** 096 * @param token 097 * @param cmdpath 设备(菜单)命令路径 098 * @param taskQueueSupplier 099 * @return TaskManager instance 100 * @see net.gdface.facelog.client.ClientExtendTools#makeTaskManager(Token, String, Supplier) 101 */ 102 public TaskManager makeTaskManager(Token token, String cmdpath, Supplier<String> taskQueueSupplier) { 103 return clientTools.makeTaskManager(token, cmdpath, taskQueueSupplier); 104 } 105 /** 106 * @param token 107 * @return BaseDispatcher instance 108 * @see net.gdface.facelog.client.ClientExtendTools#makeCmdDispatcher(net.gdface.facelog.Token) 109 */ 110 public BaseDispatcher makeCmdDispatcher(Token token) { 111 return clientTools.makeCmdDispatcher(token); 112 } 113 /** 114 * @param token 115 * @param taskQueueSupplier 116 * @return TaskDispatcher instance 117 * @see net.gdface.facelog.client.ClientExtendTools#makeTaskDispatcher(Token, Supplier) 118 */ 119 public TaskDispatcher makeTaskDispatcher(Token token, Supplier<String> taskQueueSupplier) { 120 return clientTools.makeTaskDispatcher(token, taskQueueSupplier); 121 } 122 /** 123 * @param duration 124 * @param token 125 * @return Supplier instance 126 * @see net.gdface.facelog.client.ClientExtendTools#getAckChannelSupplier(int, net.gdface.facelog.Token) 127 */ 128 public Supplier<String> getAckChannelSupplier(int duration, Token token) { 129 return clientTools.getAckChannelSupplier(duration,token); 130 } 131 /** 132 * @param token 133 * @return Supplier instance 134 * @see net.gdface.facelog.client.ClientExtendTools#getAckChannelSupplier(net.gdface.facelog.Token) 135 */ 136 public Supplier<String> getAckChannelSupplier(Token token) { 137 return clientTools.getAckChannelSupplier(token); 138 } 139 /** 140 * @param token 141 * @return Supplier instance 142 * @see net.gdface.facelog.client.ClientExtendTools#getCmdSnSupplier(net.gdface.facelog.Token) 143 */ 144 public Supplier<Integer> getCmdSnSupplier(Token token) { 145 return clientTools.getCmdSnSupplier(token); 146 } 147 /** 148 * @param deviceToken 149 * @param rootMenu 150 * @return DtalkEngineForFacelog instance 151 * @see net.gdface.facelog.client.ClientExtendTools#initDtalkEngine(net.gdface.facelog.Token, gu.dtalk.MenuItem) 152 */ 153 public DtalkEngineForFacelog initDtalkEngine(Token deviceToken, MenuItem rootMenu) { 154 return clientTools.initDtalkEngine(deviceToken, rootMenu); 155 } 156 /** 157 * @param token 158 * @see net.gdface.facelog.client.ClientExtendTools#initMQDefaultFactory(net.gdface.facelog.Token) 159 */ 160 public void initMQDefaultFactory(Token token) { 161 clientTools.initMQDefaultFactory(token); 162 } 163 /** 164 * 转换参数中的主机名 165 * @see net.gdface.facelog.IFaceLogDecorator#getRedisParameters(net.gdface.facelog.Token) 166 * @see ClientExtendTools#insteadHostOfMQParamIfLocalhost(Map) 167 */ 168 @Override 169 public Map<MQParam, String> getRedisParameters(Token token) { 170 Map<MQParam, String> parameters = super.getRedisParameters(token); 171 return clientTools.insteadHostOfMQParamIfLocalhost(parameters); 172 } 173 /** 174 * @param token 175 * @return 返回一个获取redis参数的{@link Supplier}实例 176 * @see net.gdface.facelog.client.ClientExtendTools#getRedisParametersSupplier(net.gdface.facelog.Token) 177 */ 178 public Supplier<Map<MQParam, String>> getRedisParametersSupplier(Token token) { 179 return clientTools.getRedisParametersSupplier(token); 180 } 181 /** 182 * @param token 183 * @return 返回一个获取消息系统参数的{@link Supplier}实例 184 * @see net.gdface.facelog.client.ClientExtendTools#getMessageQueueParametersSupplier(net.gdface.facelog.Token) 185 */ 186 public Supplier<Map<MQParam, String>> getMessageQueueParametersSupplier(Token token) { 187 return clientTools.getMessageQueueParametersSupplier(token); 188 } 189 /** 190 * 转换参数中的主机名 191 * @see net.gdface.facelog.IFaceLogDecorator#getFaceApiParameters(net.gdface.facelog.Token) 192 * @see ClientExtendTools#insteadHostOfValueIfLocalhost(Map) 193 */ 194 @Override 195 public Map<String, String> getFaceApiParameters(Token token) { 196 Map<String, String> parameters = super.getFaceApiParameters(token); 197 return clientTools.insteadHostOfValueIfLocalhost(parameters); 198 } 199 /** 200 * @param token 201 * @return 返回一个获取faceapi参数的{@link Supplier}实例 202 * @see net.gdface.facelog.client.ClientExtendTools#getFaceApiParametersSupplier(net.gdface.facelog.Token) 203 */ 204 public Supplier<Map<String, String>> getFaceApiParametersSupplier(Token token) { 205 return clientTools.getFaceApiParametersSupplier(token); 206 } 207 /** 208 * @param token 209 * @return 返回一个获取设备心跳实时监控通道名的{@link Supplier}实例 210 * @see net.gdface.facelog.client.ClientExtendTools#getMonitorChannelSupplier(net.gdface.facelog.Token) 211 * @deprecated replaced by {@link #getDynamicParamSupplier(MQParam, Token)} 212 */ 213 public Supplier<String> getMonitorChannelSupplier(Token token) { 214 return clientTools.getDynamicParamSupplier(MQParam.HB_MONITOR_CHANNEL,token); 215 } 216 /** 217 * @param mqParam 218 * @param token 访问令牌 219 * @return 返回一个动态获取指定消息参数的{@link Supplier}实例 220 */ 221 public Supplier<String> getDynamicParamSupplier(MQParam mqParam,Token token){ 222 return clientTools.getDynamicParamSupplier(mqParam,token); 223 } 224 /** 225 * 返回有效令牌的{@link Supplier}实例<br> 226 * @return {@link Supplier}实例 227 */ 228 public Supplier<Token> getTokenSupplier() { 229 return clientTools.getTokenSupplier(); 230 } 231 /** 232 * 添加服务心跳侦听器 233 * @param listener 234 * @return 当前{@link IFaceLogClient}对象 235 */ 236 public IFaceLogClient addServiceEventListener(ServiceHeartbeatListener listener){ 237 clientTools.addServiceEventListener(listener); 238 return this; 239 } 240 /** 241 * 删除服务心跳侦听器 242 * @param listener 243 * @return 当前{@link IFaceLogClient}对象 244 */ 245 public IFaceLogClient removeServiceEventListener(ServiceHeartbeatListener listener){ 246 clientTools.removeServiceEventListener(listener); 247 return this; 248 } 249 250 /** 251 * 创建动态频道名侦听对象 252 * 动态频道是指定当服务重启后,频道名会动态改变的频道, 253 * 对于这种频道,通过侦听服务心跳判断服务是否重启,如果重启则重新获取频道名继续保持侦听 254 * @param listener 255 * @param channelType 频道消息数据类型 256 * @param mqParam 参数名 257 * @param token 258 * @param factory 消息系统工厂类实例 259 * @return 返回{@link DynamicChannelListener}实例 260 */ 261 public <T>DynamicChannelListener<T> makeDynamicChannelListener(IMessageAdapter<T> listener,Class<T> channelType, MQParam mqParam, Token token, IMessageQueueFactory factory) { 262 return clientTools.makeDynamicChannelListener(listener, channelType, mqParam, token, factory); 263 } 264 /** 265 * 创建设备心跳包发送对象<br> 266 * {@link DeviceHeartbeat}为单实例,该方法只能调用一次 267 * @param deviceID 设备ID 268 * @param token 设备令牌 269 * @return {@link DeviceHeartbeat}实例 270 */ 271 public DeviceHeartbeat makeHeartbeat(int deviceID, Token token) { 272 return clientTools.makeHeartbeat(deviceID, token); 273 } 274 /** 275 * @param tokenHelper 要设置的 tokenHelper 276 * @return 当前{@link IFaceLogClient}实例 277 */ 278 public IFaceLogClient setTokenHelper(TokenHelper tokenHelper) { 279 clientTools.setTokenHelper(tokenHelper); 280 return this; 281 } 282 /** 283 * 启动服务心跳侦听器<br> 284 * 启动侦听器后CLIENT端才能感知服务端断线,并执行相应动作。 285 * 调用前必须先执行{@link #setTokenHelper(TokenHelper)}初始化 286 * @param token 令牌 287 * @param initMQDefaultFactoryInstance 是否初始化 {@link IMessageQueueFactory}默认实例 288 * @return 返回当前{@link IFaceLogClient}实例 289 */ 290 public IFaceLogClient startServiceHeartbeatListener(Token token, boolean initMQDefaultFactoryInstance) { 291 clientTools.startServiceHeartbeatListener(token, initMQDefaultFactoryInstance); 292 return this; 293 } 294 /** 295 * @param task 296 * @param token 297 * @return ParameterSupplier instance 298 * @see net.gdface.facelog.client.ClientExtendTools#getTaskQueueSupplier(java.lang.String, net.gdface.facelog.Token) 299 */ 300 public ParameterSupplier<String> getTaskQueueSupplier(String task, Token token) { 301 return clientTools.getTaskQueueSupplier(task, token); 302 } 303 /** 304 * @param task 305 * @param sdkVersion 306 * @param token 307 * @return ParameterSupplier instance 308 * @see net.gdface.facelog.client.ClientExtendTools#getSdkTaskQueueSupplier(java.lang.String, java.lang.String, net.gdface.facelog.Token) 309 */ 310 public ParameterSupplier<String> getSdkTaskQueueSupplier(String task, String sdkVersion, Token token) { 311 return clientTools.getSdkTaskQueueSupplier(task, sdkVersion, token); 312 } 313}