- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.IO;
- using System.Net;
- using System.Net.Sockets;
- using System.Text;
- using System.Threading;
- using UnityEngine;
- using UnityEngine.UI;
- public enum NetworkStatus { None, Conn, DisConn };
- public class SocketClilent : MonoBehaviour
- {
- private string IP = "121.151.150.167";
- private int PORT = 15064;
- //private string IP = "127.0.0.1";
- //private int PORT = 6000;
- private Thread thread = null;
- private NetworkStream writeStream;
- private StreamReader readerStream;
- private string QUIT = "q\r\n";
- public TcpClient client = null;
- public NetworkStatus NetworkStatusEvent = NetworkStatus.None;
- public PopupWindow popupWindow;
- public UnityEngine.UI.Text NetState;
- public UnityEngine.UI.InputField IP_Input;
- public UnityEngine.UI.InputField Port_Input;
- public string msg = "camonitorall\r\n";
- private object lockObject = new object();
- private void Start()
- {
- IP_Input.text = IP;
- Port_Input.text = PORT.ToString();
- NetState.text = "DISCONNECTED";
- NetState.color = Color.red;
- }
- private void Update()
- {
- if (NetworkStatusEvent == NetworkStatus.DisConn)
- {
- NetState.text = "DISCONNECTED";
- NetState.color = Color.red;
- NetworkStatusEvent = NetworkStatus.None;
- }
- }
- public void ConnectToServer()
- {
- try
- {
- if (client != null)
- {
- popupWindow.PopupWindowOpen(PopupWindow.MsgType.warning, "이미 연결되어 있습니다.");
- return;
- }
- IP = IP_Input.text;
- if (!int.TryParse(Port_Input.text, out PORT))
- popupWindow.PopupWindowOpen(PopupWindow.MsgType.warning, "유효한 숫자가 아닙니다.");
- client = new TcpClient();
- client.Connect(IP, PORT);
- writeStream = client.GetStream();
- NetState.text = "CONNECTED";
- NetState.color = Color.green;
- NetworkStatusEvent = NetworkStatus.Conn;
- Encoding encode = System.Text.Encoding.UTF8;
- readerStream = new StreamReader(writeStream, encode);
- thread = new Thread(new ThreadStart(Run));
- thread.Start();
- }
- catch (Exception e)
- {
- popupWindow.PopupWindowOpen(PopupWindow.MsgType.error, e.Message);
- DisConnect();
- }
- }
- public void DisConnect()
- {
- if (client == null)
- return;
- NetworkStatusEvent = NetworkStatus.DisConn;
- try
- {
- byte[] quit = Encoding.Default.GetBytes(QUIT);
- writeStream.Write(quit, 0, quit.Length);
- }
- catch (Exception e)
- {
- }
- if (writeStream != null)
- {
- writeStream.Close();
- }
- if (readerStream != null)
- {
- readerStream.Close();
- }
- if (client != null)
- {
- client.Close();
- client = null;
- }
- if (thread != null)
- {
- thread.Abort();
- thread = null;
- }
- }
- public void Run()
- {
- byte[] RequestData = Encoding.Default.GetBytes(msg);
- writeStream.Write(RequestData, 0, RequestData.Length);
- while (true)
- {
- try
- {
- string str = readerStream.ReadLine();
- if (str != null)
- {
- //데이터 파싱 부분 추가
- DataParsing(str);
- }
- else
- {
- break;
- }
- }
- catch (Exception e)
- {
- break;
- }
- }
- DisConnect();
- }
- public void OnApplicationQuit()
- {
- DisConnect();
- }
- //DataPaser 함수 붙이고
- public void DataParsing(string data)
- {
- if (splitData != null && splitData.Length > 3)
- {
- float v;
- if (!float.TryParse(splitData[3], out v))
- {
- return;
- }
- //Debug.Log("data : " + data);
- if (DataType.Length < 3)
- return;
- lock (lockObject)
- {
- if (DataType[1] == "AWS")
- {
- switch (DataType[2])
- {
- case "WINDIR":
- AWS.WINDIR = v;
- break;
- case "WINSPEED":
- //Debug.Log(v);
- AWS.WINSPEED = v;
- break;
- case "TMP":
- AWS.TMP = v;
- break;
- case "HUM":
- AWS.HUM = v;
- break;
- case "RAD":
- AWS.RAD = v;
- break;
- case "RAIN":
- AWS.RAIN = v;
- break;
- default:
- break;
- }
- }
- else if (DataType[1] == "PM10_1")
- {
- switch (DataType[2])
- {
- case "DUST_MASS_CON":
- PM10_1.DUST_MASS_CON = v;
- break;
- //case "BETA_CON":
- // PM10.BETA_CON = v;
- // break;
- //case "HALF_H_AVG":
- // PM10.HALF_H_AVG = v;
- // break;
- case "1H_AVG":
- PM10_1.H1_AVG = v;
- break;
- //case "3H_AVG":
- // PM10.H3_AVG = v;
- // break;
- //case "24H_AVG":
- // PM10.H24_AVG = v;
- // break;
- //case "HEAD_TMP":
- // PM10.HEAD_TMP = v;
- // break;
- //case "CHAMBER_TMP":
- // PM10.CHAMBER_TMP = v;
- // break;
- //case "ORIFICE_TMP":
- // PM10.ORIFICE_TMP = v;
- // break;
- //case "TUBE_TMP":
- // PM10.TUBE_TMP = v;
- // break;
- //case "DIFF_PRESS":
- // PM10.DIFF_PRESS = v;
- // break;
- //case "SUC_CHAMBER_PRESS":
- // PM10.SUC_CHAMBER_PRESS = v;
- // break;
- //case "BARO_PRESS":
- // PM10.BARO_PRESS = v;
- // break;
- //case "HEAD_FLOW":
- // PM10.HEAD_FLOW = v;
- // break;
- //case "NORM_FLOW":
- // PM10.NORM_FLOW = v;
- // break;
- //case "FLOW_RATE":
- // PM10.FLOW_RATE = v;
- // break;
- //case "HEATING_POWER":
- // PM10.HEATING_POWER = v;
- // break;
- //case "REL_HUM":
- // PM10.REL_HUM = v;
- // break;
- //case "RAW_MASS":
- // PM10.RAW_MASS = v;
- // break;
- //case "RC_MASS":
- // PM10.RC_MASS = v;
- // break;
- //case "QLOCK_MASS":
- // PM10.QLOCK_MASS = v;
- // break;
- //case "DENSITY_CMP":
- // PM10.DENSITY_CMP = v;
- // break;
- //case "COMM_ERR_CNT":
- // PM10.COMM_ERR_CNT = v;
- // break;
- //case "BETA_CNT_RATE":
- // PM10.BETA_CNT_RATE = v;
- // break;
- //case "ALPHA_CNT_RATE":
- // PM10.ALPHA_CNT_RATE = v;
- // break;
- //case "AZ_CNT_RATE":
- // PM10.AZ_CNT_RATE = v;
- // break;
- //case "BZ_CNT_RATE":
- // PM10.BZ_CNT_RATE = v;
- // break;
- //case "NAA_FILTER":
- // PM10.NAA_FILTER = v;
- // break;
- //case "RADON_CON":
- // PM10.RADON_CON = v;
- // break;
- //case "LPF_BETA_CON":
- // PM10.LPF_BETA_CON = v;
- // break;
- //case "LPF_OPT_CON":
- // PM10.LPF_OPT_CON = v;
- // break;
- default:
- break;
- }
- }
- else if (DataType[1] == "PM10_2")
- {
- switch (DataType[2])
- {
- case "DUST_MASS_CON":
- PM10_2.DUST_MASS_CON = v;
- break;
- case "1H_AVG":
- PM10_2.H1_AVG = v;
- break;
- default:
- break;
- }
- }
- else if (DataType[1] == "PM10_3")
- {
- switch (DataType[2])
- {
- case "DUST_MASS_CON":
- PM10_3.DUST_MASS_CON = v;
- break;
- case "1H_AVG":
- PM10_3.H1_AVG = v;
- break;
- default:
- break;
- }
- }
- else if (DataType[1] == "PM10_4")
- {
- switch (DataType[2])
- {
- case "DUST_MASS_CON":
- PM10_4.DUST_MASS_CON = v;
- break;
- case "1H_AVG":
- PM10_4.H1_AVG = v;
- break;
- default:
- break;
- }
- }
- else if (DataType[1] == "CNN_1")
- {
- switch (DataType[2])
- {
- case "STS_RUN":
- CNN_1.STS_RUN = v.ToString();
- break;
- case "RB_PWATER":
- CNN_1.RB_PWATER = v;
- break;
- case "RB_TWATER":
- CNN_1.RB_TWATER = v;
- break;
- //0530 새로 추가
- //컨트롤러에 받을 데이터
- case "RB_CNN_POS":
- CNN_1.RB_CNN_POS = v;
- break;
- case "RB_CNN_START_ANG":
- CNN_1.RB_CNN_START_ANG = v;
- break;
- case "RB_CNN_STOP_ANG":
- CNN_1.RB_CNN_STOP_ANG = v;
- break;
- //0530 새로 추가
- }
- }
- else if (DataType[1] == "CNN_2")
- {
- switch (DataType[2])
- {
- case "STS_RUN":
- CNN_2.STS_RUN = v.ToString();
- break;
- case "RB_PWATER":
- CNN_2.RB_PWATER = v;
- break;
- case "RB_TWATER":
- CNN_2.RB_TWATER = v;
- break;
- // 0530 새로 추가
- //컨트롤러에 받을 데이터
- case "RB_CNN_POS":
- CNN_2.RB_CNN_POS = v;
- break;
- case "RB_CNN_START_ANG":
- CNN_2.RB_CNN_START_ANG = v;
- break;
- case "RB_CNN_STOP_ANG":
- CNN_2.RB_CNN_STOP_ANG = v;
- break;
- //0530 새로 추가
- }
- }
- else if (DataType[1] == "MES")
- {
- switch (DataType[2])
- {
- case "STATUS_01":
- MES.STATUS_01 = v.ToString();
- break;
- case "STATUS_02":
- MES.STATUS_02 = v.ToString();
- break;
- case "STATUS_03":
- MES.STATUS_03 = v.ToString();
- break;
- case "STATUS_04":
- MES.STATUS_04 = v.ToString();
- break;
- case "STATUS_05":
- MES.STATUS_05 = v.ToString();
- break;
- case "STATUS_14":
- MES.STATUS_14 = v.ToString();
- break;
- case "POS_01":
- MES.POS_01 = (int)v;
- break;
- case "POS_02":
- MES.POS_02 = (int)v;
- break;
- case "POS_03":
- MES.POS_03 = (int)v;
- break;
- case "POS_04":
- MES.POS_04 = (int)v;
- break;
- case "POS_05":
- MES.POS_05 = (int)v;
- break;
- case "POS_14":
- MES.POS_14 = (int)v;
- break;
- }
- }
- }
- }
- }
- }
2020년 1월 7일 화요일
연결 SocketClient 와 dataParsing
암호화
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를 불러와 복호화 후 오브젝트에 Deserailizepublic 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[ 블로그에 코드 이쁘게 쓰기 ]
위에 것 보다는
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);}
요런식으로 넣으면 됩니다
2019년 12월 29일 일요일
파일존재여부 확인
string _FIlestr = Application.dataPath+ "/playerInventory.json";if (System.IO.File.Exists(_FIlestr)){//파일존재}else{//파일없음}string _FIlestr = Application.dataPath+ "/playerInventory";주의 이런식으로 경로에서 확장자를 빼면 무조건 파일이 없다고 나온다
2019년 12월 26일 목요일
float를 스트림 byte array로 받을때 유의사항
byte[] = {0,0,63,128} = 1byte[] = {128,63,0,0} = 쓰레기값역순으로 데이터를 읽고있을수도 있다 주의!
피드 구독하기:
글 (Atom)
git rejected error(feat. cherry-pick)
문제 아무 생각 없이 pull을 받지않고 로컬에서 작업! 커밋, 푸시 진행을 해버렷다. push에선 remote와 다르니 당연히 pull을 진행해라고 하지만 로컬에서 작업한 내용을 백업하지 않고 진행하기에는 부담스럽다(로컬작업 유실 가능성) 해결하려...
-
public class Test : MonoBehaviour { //매출 데이터를 읽어 들이고 Sales 객체 리스트를 반환한다. List<string> list = new List<string> { ...
-
문제 아무 생각 없이 pull을 받지않고 로컬에서 작업! 커밋, 푸시 진행을 해버렷다. push에선 remote와 다르니 당연히 pull을 진행해라고 하지만 로컬에서 작업한 내용을 백업하지 않고 진행하기에는 부담스럽다(로컬작업 유실 가능성) 해결하려...
-
using System . Collections ; using System . Collections . Generic ; using UnityEngine ; using UnityEngine . UI ; public class CilckM...