phpVMS 7.0 Alpha 3와 ACARS와 관련해서 개인정리
[홈페이지 개발조건]
php 7.1+, mySQL 5.5+, JSON, cURL등 지원해야함.
Laravel 5.6 Framework를 사용
[ACARS 개발]
C# (for program develop)
WPF (for UI develop)
FSUIPC v3.0 .NET DLL (for connecting Receive information from ACARS)
Metro UI(MAHAPP) for UI
[과제]
- C#과 FSUIPC offset을 활용해서 각 비행상태(Status)에 관한 조건 정리
- Mahapp.metro의 기능을 숙지해서 UI Develop
- C# POST(HTTPwebrequest)을 이용하여 PIREP DATA Send
- C# GET(HTTPwebresponse)을 이용하여 PIREP ID Data Receive, API Key Receive
- cURL등 Laravel API기능을 활용하여 phpVMS Docs에 나와있는 REST-API 사용 하기
[v7.0 특징]
- 기존 ACARS와는 달리 PIREP이 ACARS와 같이 Tied-up, 묶여있다.
- ACARS에서 제공되는 모든 정보 업데이트는 기록으로 남으며, 그것은 다시 재확인 할 수 있다.
- ACARS 데이터의 재확인이 가능하다.
POST
로/api/pireps/prefile
에 PIREP 정보를 전송한다.id
를 응답하게 될 것이다.POST
로/api/pireps/{PIREP_ID}/acars/positions
에 PIREP 관련 비행정보 업데이트를 지속적으로 전송한다.POST
로/api/pireps/{PIREP_ID}/acars/events
에 비행 중 발생한 정보/이벤트 등을 전송한다. 이는 필수적인 것은 아니다.- 마지막으로 PIREP을 전송 할 때에는
/api/pireps/{PIREP_ID}/file
로 전송을 실시한다. 이때 추가적인 정보를 같이 보내주며, 이 정보를 보냄과 동시에 PIREP은 상신이 완료 된 것이다.
[과제 0. Log-in 후 API-Key 획득, 그 후 X-API-Key를 얻기]
1. API 사용에 있어서, API-key(토큰)을 사용하여 API를 활성화 시켜야 한다.
2. 이 토큰을 확인해보니 oAuth를 사용하여 해야 될 것 같은데, ACARS 상에서 oAuth 인증을 하려면 반드시 Web을 실행시켜서 사용자 동의를 얻어야 하는가?에 대해서 연구해야함. 2018. 09. 06.
3. 라라벨 5.6 매뉴얼을 확인하니, 토큰 요청하기 란에 Password Grant Client를 생성 한 후, /oauth/token Route에 액세스 토큰 발급 REQ를 보낼 수 있다고 한다. 2018. 09. 07.
4. 라라벨 5.6 매뉴얼을 계속 확인해보니 Header 관련 내용이 있었다. 이 Header 관련한 내용을 뒤져보니, Header를 POST 송신 시에 같이 끼워넣을 수 있다고 한다. 이쯤이면 과제 0번은 해결 되었을 것이라고 생각한다. 2018. 09. 11.
[과제 1. HttpWebRequest 이용]
1 2 3 4 5 6 7 8 | HttpWebRequest rq = (HttpWebRequest)WebRequest.Create("http://localhost:8080"); rq.Method = "C#"; Stream s = rq.GetRequestStream(); StreamWriter sw = new StreamWriter(s); sw.WriteLine("HTTP REQUEST의 BODY 데이터 부분에 문자열을 쓰고 있습니다."); sw.Dispose(); rq.Headers.Add("HeaderName", "HeaderValue"); rq.GetResponse(); | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | Uri url = new Uri("http://cliel.com"); string sdata = "userid=tmpuser&userpassword=tmppassword"; if (url.Scheme == Uri.UriSchemeHttp) { HttpWebRequest hwr = (HttpWebRequest)HttpWebRequest.Create(url); hwr.Method = WebRequestMethods.Http.Post; hwr.ContentLength = sdata.Length; hwr.ContentType = "application/x-www-form-urlencoded"; System.IO.StreamWriter sw = new StreamWriter(hwr.GetRequestStream()); sw.Write(sdata); sw.Close(); HttpWebResponse hwres = (HttpWebResponse)hwr.GetResponse(); StreamReader sr = new StreamReader(hwres.GetResponseStream()); string s = sr.ReadToEnd(); hwres.Close(); MessageBox.Show(s); } 출처: http://lab.cliel.com/887 [CLIEL LAB] | cs |
두 코드를 사용해서 문제를 해결해야한다. 생각보다 비슷한 것을 많이 발견 할 수 있었다.
위쪽 코드에서 차이점은 Header 코드가 있다는 것 뿐인 것 같다. 이와 관련하여 다음 연구사항은 HttpWebRequest 관련 소스를 정리하는 것. 2018. 09. 11.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | Uri url = new Uri("http://cliel.com"); string sdata = "userid=tmpuser&userpassword=tmppassword"; if (url.Scheme == Uri.UriSchemeHttp) { HttpWebRequest hwr = (HttpWebRequest)HttpWebRequest.Create(url); hwr.Method = WebRequestMethods.Http.Post; hwr.Headers.Add("X-API-Key", "API Key"); hwr.ContentLength = sdata.Length; hwr.ContentType = "application/json"; System.IO.StreamWriter sw = new StreamWriter(hwr.GetRequestStream()); sw.Write(sdata); sw.Close(); HttpWebResponse hwres = (HttpWebResponse)hwr.GetResponse(); StreamReader sr = new StreamReader(hwres.GetResponseStream()); string s = sr.ReadToEnd(); hwres.Close(); MessageBox.Show(s); } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | Uri url = new Uri("http://에어부산.com/api/user"); string sdata = "name=Seungjun Lee&email=abcde@airbusan.com"; if (url.Scheme == Uri.UriSchemeHttp) { HttpWebRequest hwr = (HttpWebRequest)HttpWebRequest.Create(url); hwr.Method = WebRequestMethods.Http.Post; hwr.Headers.Add("X-API-Key", "API Key"); hwr.ContentLength = sdata.Length; hwr.ContentType = "application/json"; string responseText = string.Empty; // 결과를 받을 string 생성 using (HttpWebResponse resp = (HttpWebResponse)hwr.GetResponse()) // using 구문 사용하여 작업이 종료되면 자동으로 삭제되도록 { HttpStatusCode status = resp.StatusCode; Console.WriteLine(status); // 정상이면 "OK" Stream respStream = resp.GetResponseStream(); using (StreamReader sr = new StreamReader(respStream)) { responseText = sr.ReadToEnd(); // responseText에 결과 끝까지 넣기 } } MessageBox.Show(responseText); } | cs |
'취미와 코딩 > phpVMS' 카테고리의 다른 글
[phpVMS 7] Docs - Concept to Journals 번역 (0) | 2019.08.07 |
---|---|
[phpVMS 2.x] 로그인이 안되고 로그인 페이지로 Redirect 되는 현상 해결 (0) | 2019.04.19 |
GIt 시스템 한 방에 이해하는 짤 (0) | 2016.08.08 |
[Bitbucket] Visual Studio 2015 Community 에서 Bitbucket 사용하기 (0) | 2016.07.09 |
[phpVMS 잡설] ACARS 제작하기 (0) | 2016.05.28 |