[홈페이지 개발조건]

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 데이터의 재확인이 가능하다.

[ACARS Data 전송 간략정리]
  1. POST 로 /api/pireps/prefile 에 PIREP 정보를 전송한다. id를 응답하게 될 것이다.
  2. POST 로 /api/pireps/{PIREP_ID}/acars/positions에 PIREP 관련 비행정보 업데이트를 지속적으로 전송한다.
  3. POST 로 /api/pireps/{PIREP_ID}/acars/events 에 비행 중 발생한 정보/이벤트 등을 전송한다. 이는 필수적인 것은 아니다.
  4. 마지막으로 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

ContentType = application/json으로 변경(Headers Example 따라서)

myHttpWebRequest.Method = "POST";

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


+ Recent posts