wu
2024-12-31 1edefcae08fe7c8df6a177e5dbbc8ab8f8194187
nglib/src/builder/MachineManager.java
New file
@@ -0,0 +1,148 @@
package builder;
import ng.devices.*;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;
import org.json.*;
import ng.db.DBHelper;
import ng.db.DBSession;
import ng.devices.*;
public class MachineManager {
   class item  {
      public DBHelper helper;
      public MysqlService serv;
      public int ID;
      public String IP;
      public int Port;
      public int ReadOffset;
      public int ReadSize;
      public String ProcName;
      public String Name;
      public byte FunctionType;
   }
   List<item> items=new ArrayList<item>();
   public void RunAll(){
      for(item it:items){
         Run(it.Name);
      }
   }
   public void Run(String name){
      item itm=null;
      synchronized(items){
         itm=innerGetItem(name);
      }
      if(itm!=null){
         if(itm.serv==null){
            itm.serv=new MysqlService(itm.helper,itm.ID);
            itm.serv.Run(itm.ID,itm.IP,itm.Port, (byte)1,itm.ReadOffset, itm.ReadSize,1000,itm.FunctionType);
            System.out.println(String.format("设备启动-{%s}(%s)(%s)",itm.Name,itm.IP,itm.FunctionType));
         }
      }
   }
   private item innerGetItem(String name){
      for(int i=0;i<items.size();i++){
         if(name==items.get(i).Name)
            return items.get(i);
      }
      return null;
   }
   public item innerGetItem(int id){
      for(int i=0;i<items.size();i++){
         if(id==items.get(i).ID)
            return items.get(i);
      }
      return null;
   }
   public void createDevice(DBHelper helper,int DeviceID,String Name,String Ip,int Port,int ReadOffset,int ReadSize,String ProcName,byte FunctionType){
      synchronized(items){
         item itm=new item();
         itm.helper=helper;            //数据库
         itm.ProcName=ProcName;         //存储过程名
         itm.Name=Name;               //设备名
         itm.ID=DeviceID;            //设备ID
         itm.IP=Ip;                  //设备IP
         itm.Port=Port;               //设备端口
         itm.ReadOffset=ReadOffset;      //读取偏移
         itm.ReadSize=ReadSize;//发送偏移
         itm.FunctionType=FunctionType;
         /*if(DeviceID==6 || DeviceID==19 || DeviceID==29 || DeviceID==30){
            itm.ReadOffset=12000;
         }*/
         items.add(itm);
      }
   }
   //将设备信息转化为JSON数组,用于前台显示
   public JSONArray getContext(){
      JSONArray arr=new JSONArray();
      for(int i=0;i<this.items.size();i++){
         item it=this.items.get(i);
         JSONObject obj=new JSONObject();
         try {
            obj.put("ip", it.IP);         //放入IP
            obj.put("port",it.Port);      //放入端口
            obj.put("name",it.Name);      //放入设备名
            obj.put("id", it.ID);         //放入ID
            String send="---";
            String get="---";
            if(it.serv!=null){
            obj.put("count", it.serv.ioCount);  //放入读取次数
               send=it.serv.lastSend;
               get=it.serv.lastGet;
               if(send==null)
                  send="---";
               if(get==null){
                  get="---";
               }
            }
            else{
               obj.put("count", 0);
            }
            obj.put("send", send);  //放入最后一次发送信息
            obj.put("get", get);      //放入最后一次读取信息
            obj.put("dev_state", it.serv.zhangtai);
            String st="线程未开启";
            if(it.serv!=null){
                if(it.serv.isRunning())
               st="未连接";
                if(it.serv.isOnLine()){
                   st="已连接";
                }
            }
            obj.put("st",st);    //放入线程状态
            arr.put(obj);
         } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }
      }
      return arr;  //返回结果
   }
}