package com.rtdb.test;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;
import com.rtdb.api.callbackInter.RSDataChange;
import com.rtdb.api.callbackInter.RSDataChangeEx;
import com.rtdb.api.model.MemoryStream;
import com.rtdb.api.model.NamedDataTypeField;
import com.rtdb.api.model.NamedType;
import com.rtdb.api.model.NamedTypeNameToFieldsCount;
import com.rtdb.api.model.RtdbData;
import com.rtdb.api.util.BytesConvertUtil;
import com.rtdb.api.util.DateUtil;
import com.rtdb.enums.DataSort;
import com.rtdb.enums.Quality;
import com.rtdb.model.BlobData;
import com.rtdb.model.CoorData;
import com.rtdb.model.DatetimeData;
import com.rtdb.model.DoubleData;
import com.rtdb.model.Entity;
import com.rtdb.model.ErrorParse;
import com.rtdb.model.IntData;
import com.rtdb.model.NamedTypeData;
import com.rtdb.model.SearchCondition;
import com.rtdb.service.impl.BaseImpl;
import com.rtdb.service.impl.ServerImpl;
import com.rtdb.service.impl.ServerImplPool;
import com.rtdb.service.impl.SnapshotImpl;
import com.rtdb.service.inter.Base;
import com.rtdb.service.inter.Server;
import com.rtdb.service.inter.Snapshot;
/**
*
* Description:快照服务类测试
*
*
* Copyright: Copyright (c) 2012 GoldenAPI_Java , 北京庚顿数据科技有限公司
*
*
* Company: 北京庚顿数据科技有限公司(www.golden-data.com.cn)
*
*/
@SuppressWarnings("unused")
public class SnapshotTest {
private static Snapshot snap = null;
private static Base base = null;
//private static ServerImpl server = null;
public static void main(String[] args) {
try {
//ServerImplPool pool = new ServerImplPool("192.168.1.144", 6327, "sa", "golden", 1, 8);
ServerImpl server = new ServerImpl("172.168.1.3", 6327, "sa", "golden");
//server = pool.getServerImpl();
snap = new SnapshotImpl(server);
base = new BaseImpl(server);
// cancelSubscribeSnapshots();
// fixCoorSnapshots();//3.0测试完成
// fixDoubleSnapshot();//3.0测试完成
// fixIntSnapshot();//3.0测试完成
// getBlobSnapshot();//3.0测试完成
// getBlobSnapshots();//3.0测试完成与GEM显示数据不同
// getCoorSnapshots();//3.0测试完成
// getDateTimeSnapshots();//3.0测试完成
// getDoubleSnapshots();// 3.0测试完成
// getIntSnapshots();//3.0测试完成
// getNamedTypeSnapshot();//此API暂缓测试
// getNamedTypeSnapshots();//此API暂缓测试
// pubDateTimeSnapshots();//3.0测试完成
//putBlobSnapshot();//3.0测试完成
// putBlobSnapshots();//3.0测试完成
//putCoorSnapshots();//3.0测试完成
// putDoubleSnapshots();//3.0测试完成
// putIntSnapshots();//3.0测试完成。
//putNamedTypeSnapshot();// 此API暂缓测试
// putNamedTypeSnapshots();//此API暂缓测试
// subscribeSnapshots();//3.0测试完成
subscribsnapshotsEx();//3.0测试完成
//server.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void getBlobSnapshot() throws Exception {
int id = 233;
BlobData b = snap.getBlobSnapshot(id);
byte[] blob = b.getBlob();
System.out.println(new String(blob, "gbk"));
}
// 批量读取dateTime类型标签点实时数据
public static void getDateTimeSnapshots() throws Exception {
int[] ids = { 10115, 10116 };
Entity en = snap.getDateTimeSnapshots(ids);
List list = en.getList();
for (DatetimeData d : list) {
Date value = d.getValue();
System.out
.println(DateUtil.getGMTTime(value) + " " + ErrorParse.getGoldenError(d.getError()).getErrmsg());
}
}
// 获取自定义类型测点的单个快照
@SuppressWarnings("null")
private static void getNamedTypeSnapshot() throws Exception {
int id = 6022;
short length = 12;
NamedTypeData t = snap.getNamedTypeSnapshot(id, length);
// 获取快照数据
byte[] bz = t.getValue();
// 根据列名,列数据类型读数据
MemoryStream m = new MemoryStream(bz);
float readFloat = m.readFloat();
float readFloat2 = m.readFloat();
float readFloat3 = m.readFloat();
int[] ids = { id };
// 1.根据id获取自定义类型的名称
List p = base.getNamedTypeNamesProperty(ids);
String[] name = new String[p.size()];
int[] lens = new int[p.size()];
for (int i = 0; i < p.size(); i++) {
NamedTypeNameToFieldsCount nt = p.get(i);
// 获取自定义类型的名称
name[i] = nt.getName().trim();
// 获取自定义类型的长度
lens[i] = nt.getLen();
}
// 获取自定义类型数据的列属性(如几列,列名称,该列的字节长度,该列的数据类型
NamedType namedType = base.getNamedType(name[0]);
List list = namedType.getTypeFields();
String[] fName = null;
int[] len = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
fName[i] = list.get(i).getFieldName();
len[i] = list.get(i).getLength();
}
byte[] value = t.getValue();
MemoryStream stream = new MemoryStream(value);
boolean v1 = ((stream.readByte() > 0) ? true : false);
float v2 = stream.readFloat();
System.out.println(v1);
System.out.println(v2);
}
// 批量获取自定义类型测点的快照
private static void getNamedTypeSnapshots() throws Exception {
int[] ids = { 116510 };
short[] lengths = {};
Entity nd = snap.getNamedTypeSnapshots(ids, lengths);
List list = nd.getList();
for (int i = 0; i < list.size(); i++) {
byte[] value = list.get(i).getValue();
for (int j = 0; j < value.length; j++) {
System.out.println(value[i]);
}
}
}
private static void pubDateTimeSnapshots() throws Exception {
List list = new ArrayList();
DatetimeData d = new DatetimeData();
String date = "2018-10-16 11:45:00";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
d.setDateTime(new Date());
d.setId(6);
d.setValue(format.parse(date));
d.setMs((short) 999);
d.setQuality(Quality.GOOD.getNum());
list.add(d);
Entity entity = snap.putDatetimeSnapshots(list);
List res = entity.getList();
for (DatetimeData data : res) {
System.out.println(data.getId() + " " + ErrorParse.getGoldenError(data.getError()).getErrmsg());
}
}
// 写入单个自定义类型标签点的快照
private static void putNamedTypeSnapshot() throws Exception {
NamedTypeData named = new NamedTypeData();
named.setId(39440);
named.setLen(12);
byte[] by = new byte[12];
int c = 3;
float d = 38;
int e = 29;
byte[] es = BytesConvertUtil.intToBytes(e);
byte[] ds = BytesConvertUtil.floatToBytes(d,0);
byte[] cs = BytesConvertUtil.intToBytes(c);
System.arraycopy(cs, 0, by, 0, cs.length);
System.arraycopy(ds, 0, by, cs.length, ds.length);
System.arraycopy(es, 0, by, cs.length+ds.length, es.length);
named.setValue(by);
named.setQuality((short) 0);
named.setDatetime(new Date());
snap.putNamedTypeSnapshot(named);
}
// 批量写入自定义类型标签点的快照
private static void putNamedTypeSnapshots() throws Exception {
List list = new ArrayList();
NamedTypeData named = new NamedTypeData();
named.setId(116393);
named.setLen(20);
named.setValue("112".getBytes());
named.setQuality((short) 2);
named.setDatetime(new Date());
list.add(named);
snap.putNamedTypeSnapshots(list);
}
// 批量标签点快照改变的通知订阅
public static void subscribsnapshotsEx() throws Exception {
/*
* Base base = new BaseImpl(new ServerImpl("127.0.0.1", 6327, "sa",
* "golden")); int[] ids = { 1, 2, 3, 4, 5 };
*/
int count = base.getTableSizeByName("QSFJ");
Object param = " abc ";
SearchCondition s = new SearchCondition();
s.setTablemask("QSFJ");
int[] ids = base.search(s, count, DataSort.SORT_BY_ID);
int[] errors = new int[ids.length];
snap.subscribeSnapshotsEx(param, ids, new RSDataChangeEx() {
@Override
public void run(Object param, RtdbData[] goldenDatas) {
System.out.print(param + ": \t" + goldenDatas.length);
for (int i = 0; i < goldenDatas.length; i++) {
System.out.println(",id: " + goldenDatas[i].getId() + " :: " + goldenDatas[i].getValue() + " :: "
+ DateUtil.dateToString(goldenDatas[i].getDate()) + " ");
}
System.out.println(" end");
}
}, errors);
}
// 获得int类型的快照值
public static void getIntSnapshots() throws Exception {
Entity ents = snap.getIntSnapshots(new int[] { 10113 });
for (IntData db : ents.getList())
System.out.println(db.getId() + "---" + db.getValue() + "---" + DateUtil.getGMTTime(db.getDateTime()));
}
// 批量插入int类型的快照
public static void putIntSnapshots() throws Exception {
List list = new ArrayList();
IntData data = new IntData();
data.setDateTime(new Date());
data.setState(22);
data.setId(239);
data.setQuality((short) 0);
data.setError(0);
list.add(data);
IntData data1 = new IntData();
data1.setDateTime(new Date());
data1.setState(13);
data1.setId(241);
data1.setQuality((short) 0);
data1.setError(0);
list.add(data1);
IntData data2 = new IntData();
data2.setDateTime(new Date());
data2.setState(13);
data2.setId(242);
data2.setQuality((short) 0);
data2.setError(0);
list.add(data2);
int count = snap.putIntSnapshots(list);
System.out.println("成功了 " + count + " 条 id: ");
for (IntData intData : list) {
System.out.println(intData.getId() + " " + ErrorParse.getGoldenError(intData.getError()).getErrmsg());
}
}
// 获得double类型的快照
public static void getDoubleSnapshots() throws Exception {
int[] ids = { 10108 };
Entity d = snap.getDoubleSnapshots(ids);
List list = d.getList();
for (DoubleData db : list) {
System.out.println(db.getId() + "---" + db.getValue() + "---" + DateUtil.getGMTTime(db.getDateTime()));
}
}
// 写入浮点类型的快照
public static void putDoubleSnapshots() throws Exception {
List doubleDataList = new ArrayList();
DoubleData data = new DoubleData();
data.setId(248);
data.setValue(200.12);
data.setDateTime(new Date());
DoubleData data3 = new DoubleData();
data3.setId(250);
data3.setValue(200.12);
data3.setDateTime(new Date());
DoubleData data1= new DoubleData();
data1.setId(249);
data1.setValue(1000.30);
data1.setDateTime(new Date());
doubleDataList.add(data);
doubleDataList.add(data3);
doubleDataList.add(data1);
int count = snap.putDoubleSnapshots(doubleDataList);
System.out.println("成功 " + count + " 条 ");
for (DoubleData d : doubleDataList) {
System.out.println( "id:"+d.getId() + " " + ErrorParse.getGoldenError(d.getError()).getErrmsg() + "\r\t");
}
}
// 批量修改int类型的快照
public static void fixIntSnapshot() throws Exception {
List list = new ArrayList();
IntData d = new IntData();
d.setId(10113);
d.setValue(666);
list.add(d);
int n = snap.fixIntSnapshot(list);
System.out.println(n);
}
// 批量修改浮点类型的快照
public static void fixDoubleSnapshot() throws Exception {
List list = new ArrayList();
Random r = new Random();
DoubleData d = new DoubleData();
d.setId(1);
d.setValue((r.nextDouble()) * 100);
list.add(d);
DoubleData d2 = new DoubleData();
d2.setId(2);
d2.setValue((r.nextDouble()) * 100);
list.add(d2);
int n = snap.fixDoubleSnapshot(list);
System.out.println(n);
}
// 获得坐标类型的快照
public static void getCoorSnapshots() throws Exception {
int[] ids = new int[] { 10105, 10106 };
Entity ents = snap.getCoorSnapshots(ids);
List list = ents.getList();
for (int i = 0; i < list.size(); i++) {
System.out.println(ents.getRetInfo() + " " + list.get(i).getX() + " " + list.get(i).getY());
}
}
// 批量写入coor类型快照值
public static void putCoorSnapshots() throws Exception {
List list = new ArrayList();
CoorData data = new CoorData();
data.setId(251);
data.setX((float) 323.2);
data.setY((float) 333.3);
data.setDateTime(new Date());
list.add(data);
int count = snap.putCoorSnapshots(list);
System.out.print("成功 " + count + "条 id: ");
for (CoorData coorData : list) {
System.out.println(coorData.getId() + " " + ErrorParse.getGoldenError(coorData.getError()).getErrmsg());
}
}
// 批量修改coor类型 的快照
public static void fixCoorSnapshots() throws Exception {
List list = new ArrayList();
CoorData d = new CoorData();
d.setId(10107);
d.setDateTime(new Date());
d.setX((float) 988.22);
d.setY((float) 466.23);
list.add(d);
CoorData d2 = new CoorData();
d2.setId(10108);
d2.setDateTime(new Date());
d2.setX((float) 989.22);
d2.setY((float) 277.23);
list.add(d2);
int n = snap.fixCoorSnapshots(list);
System.out.println(n);
}
// 批量获得blob快照
public static void getBlobSnapshots() throws Exception {
int[] ids = new int[] { 10111 };
Entity ents = snap.getBlobSnapshots(ids);
// for(int i = 0; i < ents.getList().size(); i++)
for (BlobData data : ents.getList()) {
byte[] blob = data.getBlob();
for (int j = 0; j < blob.length; j++) {
System.out.print(blob[j] + " ");
}
System.out.println(data.getError());
System.out.println();
}
// System.out.println(new String(blob,"gbk"));
}
// 写入blob类型的快照
public static void putBlobSnapshot() throws Exception {
BlobData data = new BlobData();
data.setId(252);
String s = "zhong'gu";
byte[] bytes = s.getBytes();
data.setBlob(bytes);
data.setDatetime(new Date());
data.setQuality(Quality.GOOD);
boolean b = snap.putBlobSnapshot(data);
System.out.println(b);
}
// 写入批量blob类型的快照
public static void putBlobSnapshots() throws Exception {
List datas = new ArrayList();
BlobData data = new BlobData();
data.setId(242);
String s = "中";
byte[] bytes = s.getBytes();
data.setBlob(bytes);
data.setDatetime(new Date());
data.setQuality(Quality.GOOD);
datas.add(data);
int result = snap.putBlobSnapshots(datas);
System.out.println(result);
}
// 批量标签点快照改变的通知订阅
public static void subscribeSnapshots() throws Exception {
int[] ids = { 1 };
String[] str ={"test.f"};
snap.subscribeSnapshots(str, new RSDataChange() {
@Override
public void run(RtdbData[] rtdbDatas) {
System.out.print(rtdbDatas.length + "条数据 ");
for (int i = 0; i < rtdbDatas.length; i++) {
System.out.print(" "+rtdbDatas[i].getValue() + " , ");
}
System.out.println(" end");
}
});
}
// 取消标签点快照更改通知订阅
public static void cancelSubscribeSnapshots() throws Exception {
subscribeSnapshots();
Thread.sleep(5000);
snap.cancelSubscribeSnapshots();
subscribsnapshotsEx();
Thread.sleep(20000);
snap.cancelSubscribeSnapshots();
}
}