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. }

암호화

using System;
using System.Text;
using System.Security.Cryptography;
using System.IO;
public class DataEncryptDecrypt
{
public static string encryData(string filepath)
{
byte[] keyArray = UTF8Encoding.UTF8.GetBytes("AASWAwQEFgcIBAoDDA0ODw==");
byte[] toEmcryptArray = File.ReadAllBytes(filepath);
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = keyArray;
rDel.Mode = CipherMode.ECB;
ICryptoTransform cTransform = rDel.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEmcryptArray, 0, toEmcryptArray.Length);
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
public static string Decrypt(string toDecrypt)
{
byte[] keyArray = UTF8Encoding.UTF8.GetBytes("AASWAwQEFgcIBAoDDA0ODw==");
byte[] toEncryptArray = Convert.FromBase64String(toDecrypt);
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = keyArray;
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.None;
ICryptoTransform cTransform = rDel.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return UTF8Encoding.UTF8.GetString(resultArray);
}
}


----------------------

//기본 사용법 JSON이용
public static void obj_encrypt_Save(object obj, string filePath, string fileName)
{
string json = ObjectToJson(obj);
string enc = DataEncryptDecrypt.encrystringData(json);
CreateJsonFile(filePath, fileName, enc);
}
//text를 불러와 복호화 후 오브젝트에 Deserailize
public static void decrypt_load<T>(T obj, string En_filePath, string fileName)
{
FileStream filestream = new FileStream(string.Format("{0}/{1}.json", En_filePath, fileName), FileMode.Open);
byte[] data = new byte[filestream.Length];
filestream.Read(data, 0, data.Length);
filestream.Close();
string jsonData = Encoding.UTF8.GetString(data);
string de_data = DataEncryptDecrypt.Decrypt(jsonData);
JsonUtility.FromJsonOverwrite(de_data, obj);
}





반사백터

충돌한 객체에 대해서 오른쪽 or 왼쪽 으로 반사벡터입력받기

public void OnTriggerEnter(Collider other)
{
if (other.tag == "SkillRange")
{
int per = UnityEngine.Random.Range(0, 100);
if (per > 0)
{
Vector3 reflectVector = Vector3.Reflect(transform.position, Vector3.right*5);//반사각
reflectVector = reflectVector.normalized*5;
MoveHandler(this, new EventMove() { TargetPos = reflectVector });
Target.transform.position = reflectVector;
}
}
else
{
Debug.Log("Damage :" + other.name);
}
}

Blogger Code Write[ 블로그에 코드 이쁘게 쓰기 ]

코드 짧을때
https://colorscripter.com/

이게 제일 편하다
주의 복사할때 ctrl cv로 하지말고 클립보드에 복사로 하면 깔끔하게 올라간다


2020 06 03
위에 것 보다는

github의 gist 가 훨씬 편하고 코드를 정리도 할수있다!!


2020 06 03

그냥 비쥬얼 코드에 복사한다음에 긁어오는게 가장 깔금한듯

Array null 빼기 (UNITY)

예) Array중에서 가장 높은 값을 추출하기 위해서

주의사항 중간에 비는 데이터가 있음

void MostLongCooltime()
{
//비어있는 목록을 제거하고 있는 것들 중에서 max를 찾는다
var filtered = skill_Infos.Where(x => x != null).ToArray();
float maxValue;
if (filtered.Count() <= 1)
{
Debug.Log("한개");
//한개만 있따면 MAX를 찾을필요가 없다
MostCoolTime_Value = filtered[0].coolTime;
MostCoolTime_Index = Array.IndexOf(skill_Infos, filtered[0]);
return;
}
//맥스값을 찾는다
maxValue = filtered.Max(x => x.coolTime);
Skill_Info _info = skill_Infos.Where(x => x.coolTime == maxValue).FirstOrDefault();
MostCoolTime_Value = maxValue;
MostCoolTime_Index = Array.IndexOf(skill_Infos, _info);
}

요런식으로 넣으면 됩니다

git rejected error(feat. cherry-pick)

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