2020년 1월 7일 화요일

연결 SocketClient 와 dataParsing

  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Net;
  6. using System.Net.Sockets;
  7. using System.Text;
  8. using System.Threading;
  9. using UnityEngine;
  10. using UnityEngine.UI;
  11. public enum NetworkStatus { None, Conn, DisConn };
  12. public class SocketClilent : MonoBehaviour
  13. {
  14.     private string IP = "121.151.150.167";
  15.     private int PORT = 15064;
  16.     //private string IP = "127.0.0.1";
  17.     //private int PORT = 6000;
  18.     private Thread thread = null;
  19.     private NetworkStream writeStream;
  20.     private StreamReader readerStream;
  21.     private string QUIT = "q\r\n";
  22.     public TcpClient client = null;
  23.     public NetworkStatus NetworkStatusEvent = NetworkStatus.None;
  24.     public PopupWindow popupWindow;
  25.     public UnityEngine.UI.Text NetState;
  26.     public UnityEngine.UI.InputField IP_Input;
  27.     public UnityEngine.UI.InputField Port_Input;
  28.     public string msg = "camonitorall\r\n";
  29.     private object lockObject = new object();
  30.     private void Start()
  31.     {
  32.         IP_Input.text = IP;
  33.         Port_Input.text = PORT.ToString();
  34.         NetState.text = "DISCONNECTED";
  35.         NetState.color = Color.red;
  36.     }
  37.     private void Update()
  38.     {
  39.         if (NetworkStatusEvent == NetworkStatus.DisConn)
  40.         {
  41.             NetState.text = "DISCONNECTED";
  42.             NetState.color = Color.red;
  43.             NetworkStatusEvent = NetworkStatus.None;
  44.         }
  45.     }
  46.     public void ConnectToServer()
  47.     {
  48.         try
  49.         {
  50.             if (client != null)
  51.             {
  52.                 popupWindow.PopupWindowOpen(PopupWindow.MsgType.warning, "이미 연결되어 있습니다.");
  53.                 return;
  54.             }
  55.             IP = IP_Input.text;
  56.             if (!int.TryParse(Port_Input.text, out PORT))
  57.                 popupWindow.PopupWindowOpen(PopupWindow.MsgType.warning, "유효한 숫자가 아닙니다.");
  58.             client = new TcpClient();
  59.             client.Connect(IP, PORT);
  60.             writeStream = client.GetStream();
  61.             NetState.text = "CONNECTED";
  62.             NetState.color = Color.green;
  63.             NetworkStatusEvent = NetworkStatus.Conn;
  64.             Encoding encode = System.Text.Encoding.UTF8;
  65.             readerStream = new StreamReader(writeStream, encode);
  66.             thread = new Thread(new ThreadStart(Run));
  67.             thread.Start();
  68.         }
  69.         catch (Exception e)
  70.         {
  71.             popupWindow.PopupWindowOpen(PopupWindow.MsgType.error, e.Message);
  72.             DisConnect();
  73.         }
  74.     }
  75.     public void DisConnect()
  76.     {
  77.         if (client == null)
  78.             return;
  79.         NetworkStatusEvent = NetworkStatus.DisConn;
  80.         try
  81.         {
  82.             byte[] quit = Encoding.Default.GetBytes(QUIT);
  83.             writeStream.Write(quit, 0, quit.Length);
  84.             Thread.Sleep(100);
  85.         }
  86.         catch (Exception e)
  87.         {
  88.             Debug.Log(e.ToString());
  89.         }
  90.         if (writeStream != null)
  91.         {
  92.             writeStream.Flush();
  93.             writeStream.Close();
  94.         }
  95.         if (readerStream != null)
  96.         {
  97.             readerStream.Close();
  98.         }
  99.         if (client != null)
  100.         {
  101.             client.Close();
  102.             client = null;
  103.         }
  104.         if (thread != null)
  105.         {
  106.             thread.Abort();
  107.             thread = null;
  108.         }
  109.     }
  110.     public void Run()
  111.     {
  112.         byte[] RequestData = Encoding.Default.GetBytes(msg);
  113.         writeStream.Write(RequestData, 0, RequestData.Length);
  114.         while (true)
  115.         {
  116.             try
  117.             {
  118.                 string str = readerStream.ReadLine();
  119.                 if (str != null)
  120.                 {
  121.                     Debug.Log(str);
  122.                     //데이터 파싱 부분 추가
  123.                     DataParsing(str);
  124.                 }
  125.                 else
  126.                 {
  127.                     break;
  128.                 }
  129.             }
  130.             catch (Exception e)
  131.             {
  132.                 break;
  133.             }
  134.         }
  135.         DisConnect();
  136.     }
  137.     public void OnApplicationQuit()
  138.     {
  139.         DisConnect();
  140.     }
  141.     //DataPaser 함수 붙이고
  142.     public void DataParsing(string data)
  143.     {
  144.         string[] splitData = data.Split(' ');
  145.         if (splitData != null && splitData.Length > 3)
  146.         {
  147.             DataInfo.DATE = splitData[1];
  148.             DataInfo.TIME = splitData[2];
  149.             float v;
  150.             if (!float.TryParse(splitData[3], out v))
  151.             {
  152.                 return;
  153.             }
  154.             string[] DataType = splitData[0].Split(':');
  155.             //Debug.Log("data : " + data);
  156.             if (DataType.Length < 3)
  157.                 return;
  158.             lock (lockObject)
  159.             {
  160.                 if (DataType[1] == "AWS")
  161.                 {
  162.                     switch (DataType[2])
  163.                     {
  164.                         case "WINDIR":
  165.                             AWS.WINDIR = v;
  166.                             break;
  167.                         case "WINSPEED":
  168.                             //Debug.Log(v);
  169.                             AWS.WINSPEED = v;
  170.                             break;
  171.                         case "TMP":
  172.                             AWS.TMP = v;
  173.                             break;
  174.                         case "HUM":
  175.                             AWS.HUM = v;
  176.                             break;
  177.                         case "RAD":
  178.                             AWS.RAD = v;
  179.                             break;
  180.                         case "RAIN":
  181.                             AWS.RAIN = v;
  182.                             break;
  183.                         default:
  184.                             break;
  185.                     }
  186.                 }
  187.                 else if (DataType[1] == "PM10_1")
  188.                 {
  189.                     switch (DataType[2])
  190.                     {
  191.                         case "DUST_MASS_CON":
  192.                             PM10_1.DUST_MASS_CON = v;
  193.                             break;
  194.                         //case "BETA_CON":
  195.                         //    PM10.BETA_CON = v;
  196.                         //    break;
  197.                         //case "HALF_H_AVG":
  198.                         //    PM10.HALF_H_AVG = v;
  199.                         //    break;
  200.                         case "1H_AVG":
  201.                             PM10_1.H1_AVG = v;
  202.                             break;
  203.                         //case "3H_AVG":
  204.                         //    PM10.H3_AVG = v;
  205.                         //    break;
  206.                         //case "24H_AVG":
  207.                         //    PM10.H24_AVG = v;
  208.                         //    break;
  209.                         //case "HEAD_TMP":
  210.                         //    PM10.HEAD_TMP = v;
  211.                         //    break;
  212.                         //case "CHAMBER_TMP":
  213.                         //    PM10.CHAMBER_TMP = v;
  214.                         //    break;
  215.                         //case "ORIFICE_TMP":
  216.                         //    PM10.ORIFICE_TMP = v;
  217.                         //    break;
  218.                         //case "TUBE_TMP":
  219.                         //    PM10.TUBE_TMP = v;
  220.                         //    break;
  221.                         //case "DIFF_PRESS":
  222.                         //    PM10.DIFF_PRESS = v;
  223.                         //    break;
  224.                         //case "SUC_CHAMBER_PRESS":
  225.                         //    PM10.SUC_CHAMBER_PRESS = v;
  226.                         //    break;
  227.                         //case "BARO_PRESS":
  228.                         //    PM10.BARO_PRESS = v;
  229.                         //    break;
  230.                         //case "HEAD_FLOW":
  231.                         //    PM10.HEAD_FLOW = v;
  232.                         //    break;
  233.                         //case "NORM_FLOW":
  234.                         //    PM10.NORM_FLOW = v;
  235.                         //    break;
  236.                         //case "FLOW_RATE":
  237.                         //    PM10.FLOW_RATE = v;
  238.                         //    break;
  239.                         //case "HEATING_POWER":
  240.                         //    PM10.HEATING_POWER = v;
  241.                         //    break;
  242.                         //case "REL_HUM":
  243.                         //    PM10.REL_HUM = v;
  244.                         //    break;
  245.                         //case "RAW_MASS":
  246.                         //    PM10.RAW_MASS = v;
  247.                         //    break;
  248.                         //case "RC_MASS":
  249.                         //    PM10.RC_MASS = v;
  250.                         //    break;
  251.                         //case "QLOCK_MASS":
  252.                         //    PM10.QLOCK_MASS = v;
  253.                         //    break;
  254.                         //case "DENSITY_CMP":
  255.                         //    PM10.DENSITY_CMP = v;
  256.                         //    break;
  257.                         //case "COMM_ERR_CNT":
  258.                         //    PM10.COMM_ERR_CNT = v;
  259.                         //    break;
  260.                         //case "BETA_CNT_RATE":
  261.                         //    PM10.BETA_CNT_RATE = v;
  262.                         //    break;
  263.                         //case "ALPHA_CNT_RATE":
  264.                         //    PM10.ALPHA_CNT_RATE = v;
  265.                         //    break;
  266.                         //case "AZ_CNT_RATE":
  267.                         //    PM10.AZ_CNT_RATE = v;
  268.                         //    break;
  269.                         //case "BZ_CNT_RATE":
  270.                         //    PM10.BZ_CNT_RATE = v;
  271.                         //    break;
  272.                         //case "NAA_FILTER":
  273.                         //    PM10.NAA_FILTER = v;
  274.                         //    break;
  275.                         //case "RADON_CON":
  276.                         //    PM10.RADON_CON = v;
  277.                         //    break;
  278.                         //case "LPF_BETA_CON":
  279.                         //    PM10.LPF_BETA_CON = v;
  280.                         //    break;
  281.                         //case "LPF_OPT_CON":
  282.                         //    PM10.LPF_OPT_CON = v;
  283.                         //    break;
  284.                         default:
  285.                             break;
  286.                     }
  287.                 }
  288.                 else if (DataType[1] == "PM10_2")
  289.                 {
  290.                     switch (DataType[2])
  291.                     {
  292.                         case "DUST_MASS_CON":
  293.                             PM10_2.DUST_MASS_CON = v;
  294.                             break;
  295.                         case "1H_AVG":
  296.                             PM10_2.H1_AVG = v;
  297.                             break;
  298.                         default:
  299.                             break;
  300.                     }
  301.                 }
  302.                 else if (DataType[1] == "PM10_3")
  303.                 {
  304.                     switch (DataType[2])
  305.                     {
  306.                         case "DUST_MASS_CON":
  307.                             PM10_3.DUST_MASS_CON = v;
  308.                             break;
  309.                         case "1H_AVG":
  310.                             PM10_3.H1_AVG = v;
  311.                             break;
  312.                         default:
  313.                             break;
  314.                     }
  315.                 }
  316.                 else if (DataType[1] == "PM10_4")
  317.                 {
  318.                     switch (DataType[2])
  319.                     {
  320.                         case "DUST_MASS_CON":
  321.                             PM10_4.DUST_MASS_CON = v;
  322.                             break;
  323.                         case "1H_AVG":
  324.                             PM10_4.H1_AVG = v;
  325.                             break;
  326.                         default:
  327.                             break;
  328.                     }
  329.                 }
  330.                 else if (DataType[1] == "CNN_1")
  331.                 {
  332.                     switch (DataType[2])
  333.                     {
  334.                         case "STS_RUN":
  335.                             CNN_1.STS_RUN = v.ToString();
  336.                             break;
  337.                         case "RB_PWATER":
  338.                             CNN_1.RB_PWATER = v;
  339.                             break;
  340.                         case "RB_TWATER":
  341.                             CNN_1.RB_TWATER = v;
  342.                             break;
  343.                         //0530 새로 추가
  344.                         //컨트롤러에 받을 데이터
  345.                         case "RB_CNN_POS":
  346.                             CNN_1.RB_CNN_POS = v;
  347.                             break;
  348.                         case "RB_CNN_START_ANG":
  349.                             CNN_1.RB_CNN_START_ANG = v;
  350.                             break;
  351.                         case "RB_CNN_STOP_ANG":
  352.                             CNN_1.RB_CNN_STOP_ANG = v;
  353.                             break;
  354.                             //0530 새로 추가
  355.                     }
  356.                 }
  357.                 else if (DataType[1] == "CNN_2")
  358.                 {
  359.                     switch (DataType[2])
  360.                     {
  361.                         case "STS_RUN":
  362.                             CNN_2.STS_RUN = v.ToString();
  363.                             break;
  364.                         case "RB_PWATER":
  365.                             CNN_2.RB_PWATER = v;
  366.                             break;
  367.                         case "RB_TWATER":
  368.                             CNN_2.RB_TWATER = v;
  369.                             break;
  370.                         // 0530 새로 추가
  371.                         //컨트롤러에 받을 데이터
  372.                         case "RB_CNN_POS":
  373.                             CNN_2.RB_CNN_POS = v;
  374.                             break;
  375.                         case "RB_CNN_START_ANG":
  376.                             CNN_2.RB_CNN_START_ANG = v;
  377.                             break;
  378.                         case "RB_CNN_STOP_ANG":
  379.                             CNN_2.RB_CNN_STOP_ANG = v;
  380.                             break;
  381.                             //0530 새로 추가
  382.                     }
  383.                 }
  384.                 else if (DataType[1] == "MES")
  385.                 {
  386.                     switch (DataType[2])
  387.                     {
  388.                         case "STATUS_01":
  389.                             MES.STATUS_01 = v.ToString();
  390.                             break;
  391.                         case "STATUS_02":
  392.                             MES.STATUS_02 = v.ToString();
  393.                             break;
  394.                         case "STATUS_03":
  395.                             MES.STATUS_03 = v.ToString();
  396.                             break;
  397.                         case "STATUS_04":
  398.                             MES.STATUS_04 = v.ToString();
  399.                             break;
  400.                         case "STATUS_05":
  401.                             MES.STATUS_05 = v.ToString();
  402.                             break;
  403.                         case "STATUS_14":
  404.                             MES.STATUS_14 = v.ToString();
  405.                             break;
  406.                         case "POS_01":
  407.                             MES.POS_01 = (int)v;
  408.                             break;
  409.                         case "POS_02":
  410.                             MES.POS_02 = (int)v;
  411.                             break;
  412.                         case "POS_03":
  413.                             MES.POS_03 = (int)v;
  414.                             break;
  415.                         case "POS_04":
  416.                             MES.POS_04 = (int)v;
  417.                             break;
  418.                         case "POS_05":
  419.                             MES.POS_05 = (int)v;
  420.                             break;
  421.                         case "POS_14":
  422.                             MES.POS_14 = (int)v;
  423.                             break;
  424.                     }
  425.                 }
  426.             }
  427.         }
  428.     }
  429. }

댓글 없음:

댓글 쓰기

git rejected error(feat. cherry-pick)

 문제 아무 생각 없이 pull을 받지않고 로컬에서 작업! 커밋, 푸시 진행을 해버렷다. push에선 remote와 다르니 당연히 pull을 진행해라고 하지만 로컬에서 작업한 내용을 백업하지 않고 진행하기에는 부담스럽다(로컬작업 유실 가능성) 해결하려...