All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.gdface.facelog.client.dtalk.DtalkEngineForFacelog Maven / Gradle / Ivy

The newest version!
package net.gdface.facelog.client.dtalk;

import gu.dtalk.engine.ItemEngineRedisImpl;
import gu.dtalk.engine.SampleConnector;
import gu.simplemq.ISubscriber;
import gu.simplemq.Channel;
import gu.simplemq.IMQConnParameterSupplier;
import gu.simplemq.IMessageQueueFactory;
import gu.simplemq.IPublisher;
import net.gdface.facelog.Token;

import static gu.dtalk.CommonUtils.*;
import static gu.dtalk.engine.DeviceUtils.DEVINFO_PROVIDER;
import static com.google.common.base.Preconditions.checkNotNull;

import com.gitee.l0km.com4j.base.BinaryUtils;
import com.gitee.l0km.com4j.basex.NetworkUtil;
import com.google.common.base.Function;

import gu.dtalk.MenuItem;

/**
 * 基于dtalk的设备命令引擎
 * @author guyadong
 *
 */
public class DtalkEngineForFacelog {
	private final SampleConnector connAdapter;
	private final ISubscriber subscriber;
	private final byte[] devMac;
	private final ItemEngineRedisImpl itemAdapter;
	private final IMessageQueueFactory factory;
	public DtalkEngineForFacelog(MenuItem root, Function  ranker,IMessageQueueFactory factory) {
		this.factory = checkNotNull(factory,"factory is null");
		this.subscriber = factory.getSubscriber();
		devMac = DEVINFO_PROVIDER.getMac();
		IPublisher publisher = factory.getPublisher();
		itemAdapter = (ItemEngineRedisImpl) new ItemEngineRedisImpl(publisher).setRoot(root);
		connAdapter = new SampleConnector(publisher,subscriber)
				.setSelfMac(BinaryUtils.toHex(devMac))
				.setItemAdapter(itemAdapter);
		if(ranker != null){
			connAdapter.setRequestValidator(new TokenRequestValidator(ranker));
		}
	}

	public ItemEngineRedisImpl getItemAdapter() {
		return itemAdapter;
	}
	/**
	 * 启动连接
	 * @return 当前对象
	 */
	public DtalkEngineForFacelog start(){
		System.out.printf("DEVICE MAC address(设备地址): %s\n",NetworkUtil.formatMac(devMac, ":"));
		String connchname = getConnChannel(devMac);
		Channel connch = new Channel<>(connchname, String.class)
				.setAdapter(connAdapter);
		subscriber.register(connch);
		System.out.printf("Connect channel registered(连接频道注册) : %s \n",connchname);
		return this;
	}

	/**
	 * 停止Dtalk引擎
* 取消频道订阅不再接收频道消息 */ public void stop(){ // 取消所有订阅 subscriber.unsubscribe((new String[0])); } /** * @return 返回当前redis连接类型 */ public IMQConnParameterSupplier getMessageQueueParameterSupplier() { return factory; } public IMessageQueueFactory getFactory() { return factory; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy