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(); } }