반응형
Asynchronous HTTP (비동기 HTTP)
이 기능은 HTTP 메소드 (GET,POST 등)를 사용하거나 개발자가 header와 body를 사용해서 비동기식 HTTP와 HTTPS/SSL 콜을 만들도록 합니다.
코로나는 이 때 서버로부터 어떤 응답을 받는 동안 멈출 필요가 없도록 하는 기능을 제공합니다.
여러분은 네트워크를 통해서 파일을 다운로드 할 수 있습니다. 이 파일을 메모리에 로딩 할 필요가 없습니다. 이것은 해당 파일이나 이미지가 아주 큰 경우에 아주 유용합니다.
코로나는 이와 관련 두개의 샘플 프로젝트를 제공합니다.
AsynchHTTP
local myText = display.newText("(Waiting for response)", 0, 0, native.systemFont, 16)
myText.x = display.contentCenterX
myText.y = 120
local function networkListener( event )
if ( event.isError ) then
myText.text = "Network error!"
else
myText.text = "See Corona Terminal for response"
print ( "RESPONSE: " .. event.response )
end
end
-- Access Google over SSL:
network.request( "https://encrypted.google.com", "GET", networkListener )
편의를 위해 주석부분은 제거했습니다.
간단히 살펴보면 첫 세줄은 텍스트를 뿌려주는 겁니다.
networkListener 함수를 보면 event를 받아서 에러일 경우 에러메세지를 뿌려주고 에러가 아닐 경우는 그 결과값을 터미널에 뿌려줍니다.
결과값은 맨 마지막 줄 network.request를 통해서 받아온 겁니다.
뭐 request 하는 것도 없고 그냥 network.request() 에서 get 방식으로 가져오는 것 밖에는 없네요.
두 번째 예제도 보면요.
AsynchImageDownload
local function networkListener( event )
if ( event.isError ) then
print ( "Network error - download failed" )
else
myImage = display.newImage( "helloCopy.png", system.TemporaryDirectory, 60, 40 )
myImage.alpha = 0
transition.to( myImage, { alpha = 1.0 } )
end
print ( "RESPONSE: " .. event.response )
end
network.download(
"http://developer.anscamobile.com/demo/hello.png",
"GET",
networkListener,
"helloCopy.png",
system.TemporaryDirectory )
-- NOTE: files saved to system.TemporaryDirectory are not guaranteed to persist across launches.
-- Use system.DocumentsDirectory if you want files to persist.
----------------------------------------------------------------------------------------------------
-- Method 2: use display.loadRemoteImage() to get the file and create a display object in one step
local function networkListener2( event )
if ( event.isError ) then
print ( "Network error - download failed" )
else
event.target.alpha = 0
transition.to( event.target, { alpha = 1.0 } )
end
print ( "RESPONSE: " .. event.response )
end
myImage2 = display.loadRemoteImage(
"http://developer.anscamobile.com/demo/hello.png",
"GET",
networkListener2,
"helloCopy2.png",
system.TemporaryDirectory,
60, 280 )
이 샘플은 HTTP로 이미지를 download할 수 있도록 한 건데요.
network.download()부터 보시면 경로가 있고 GET방식으로 불러오고 파일 이름이 있고 이 파일을 system.TemporaryDirectory 에 저장하네요.
중간에 보면 networkListener함수를 불러오는데요.
이 함수는 event를 파라미터로 받습니다.
함수 안을 보면 에러일 경우 에러 메세지 뿌려주고 에러가 아닐경우는 system.TemporaryDirectory에 있는 이미지를 뿌려줍니다.
두 번째 myImage2 변수선언 부분을 보면요.
display.loadRemoteImage()함수를 썼는데 이것도 그 안의 내용은 network.download()와 똑 같습니다.
불러오는 함수가 networkListener2를 불러오고 맨 마지막에 60,280 이란 숫자가 있는게 다르네요.
networkListener2 함수를 살펴보면 마찬가지로 에러일 경우 에러메세지 뿌려주고 에러가 아닐경우는 event.target.alpha =0으로 투명하게 하고 이것을 transition.to함수로 투명도를 없앴습니다.
대충 보니까 network.download()는 다운로드만 받는거고 display.loadRemoteImage() 는 다운로드 받은 다음에 이것을 화면에 뿌려주기까지 하는 거네요.
먼저 공부도 하기 전에 샘플코드를 분석했는데요. 제대로 공부를 함 해 보겠습니다.
Network Requests
network.request( url, method, listener [, params] )
여기서 디폴트 method 는 GET 입니다.
결과 event는 아래와 같은 프로퍼티들을 가집니다.
• event.response -- 서버로부트 받은 결과 값 (String)
• event.isError -- 네트워크 에러와 관련한 True, False 값
이 두 파라미터는 첫 번째 예제에서 사용했었죠?
예제에는 없지만 여기에 헤더나 바디를 추가할 수 있습니다.
params.headers - 테이블로 선언 함
params.body - 스트링을 담은 HTTP 바디
headers = {}
headers["Content-Type"] = "application/json"
headers["Accept-Language"] = "en-US"
headers.body = "This is an example request body."
위 샘플을 보면 헤더에는 json 사용한다는 것과 언어는 미국식 영어를 사용한다는게 있고요. body에는 예제 바디라는 문장이 있습니다.
HTML 많이 사용해 보신 분들은 이게 뭔지 다 아시겠죠?
Network Downloads
위의 Network Requests와 거의 유사하구요 + 다운로드 기능까지 있는 겁니다.
메모리에 캐싱하지 않고 제공된 디렉토리에 제공된 이름의 파일을 HTTP로 다운로드 하는 겁니다. 큰 파일일 경우 유용하게 사용 하실 수 있습니다.
network.download( url, method, listener [, params], destFilename [, baseDir] )
디폴트 method는 GET입니다. baseDir는 system.DocumentsDirectory나 system.TemporaryDirectory가 될 수 있습니다.
결과 event로는 Network Requests와 같이 event.response와 event.isError가 있습니다.
예제는 위의 두 번째 예제를 봐 주세요.
Displaying Remote Images
이건 예제에서도 봤듯이 다운로드 하면서 곧바로 화면에 이미지를 출력해 주는 기능입니다.
display.loadRemoteImage( url, method, listener [, params], destFilename [, baseDir] [, x, y] )
다 똑 같구요. 마지막에 이미지의 x,y 값이 있는게 다릅니다.
이 함수에는 세가지 프로퍼티가 있습니다. event.response와 event.isError는 위에것들이랑 똑 같구요. 이 외에 event.target이 있습니다.
이 프로퍼티는 이미지가 다운로드 된 후의 새로 만들어진 display object입니다.
예제는 위 두 번째 예제파일 두 번째 부분을 봐 주세요.
오늘 살펴 본 것은 비동기식 HTTP 통신입니다.
이외에 코로나 DOC에 있는 내용은 OpenFeint, Credit, In-App Purchase 입니다.
Open Feint가 무엇인지 아시려면 아래 링크를 보시면 도움이 될 거예요 .
http://novathin.kr/146
그리고 일반 안드로이드 앱 프로그래밍에서 활용하려면 아래 링크를 참조하시구요.
http://blog.daum.net/gkrttod/1091
코로나에서 이 Open Feint를 사용하는 방법은 제가 공부하고 테스트 하고 난 다음에 올리겠습니다.
Credit은 코로나SDK를 만든 회사인 Ansca Mobile에서 제공하는 서비스 인 것 같습니다.
원격으로 User의 Point를 적립하고 이것을 나중에 in-App Purchase 등 현금 구매 할 때 사용할 수 있도록 하는 서비스 같은데요.
저도 이 부분은 공부를 좀 해 봐야겠어요.
개인적으로 In-App Purchase 에 관심이 있어서요.
나머지 네트워킹 주제들 중에 이 In-App Purchase를 먼저 공부하고 글을 올릴 예정입니다.
그럼...
이 기능은 HTTP 메소드 (GET,POST 등)를 사용하거나 개발자가 header와 body를 사용해서 비동기식 HTTP와 HTTPS/SSL 콜을 만들도록 합니다.
코로나는 이 때 서버로부터 어떤 응답을 받는 동안 멈출 필요가 없도록 하는 기능을 제공합니다.
여러분은 네트워크를 통해서 파일을 다운로드 할 수 있습니다. 이 파일을 메모리에 로딩 할 필요가 없습니다. 이것은 해당 파일이나 이미지가 아주 큰 경우에 아주 유용합니다.
코로나는 이와 관련 두개의 샘플 프로젝트를 제공합니다.
AsynchHTTP
local myText = display.newText("(Waiting for response)", 0, 0, native.systemFont, 16)
myText.x = display.contentCenterX
myText.y = 120
local function networkListener( event )
if ( event.isError ) then
myText.text = "Network error!"
else
myText.text = "See Corona Terminal for response"
print ( "RESPONSE: " .. event.response )
end
end
-- Access Google over SSL:
network.request( "https://encrypted.google.com", "GET", networkListener )
편의를 위해 주석부분은 제거했습니다.
간단히 살펴보면 첫 세줄은 텍스트를 뿌려주는 겁니다.
networkListener 함수를 보면 event를 받아서 에러일 경우 에러메세지를 뿌려주고 에러가 아닐 경우는 그 결과값을 터미널에 뿌려줍니다.
결과값은 맨 마지막 줄 network.request를 통해서 받아온 겁니다.
뭐 request 하는 것도 없고 그냥 network.request() 에서 get 방식으로 가져오는 것 밖에는 없네요.
두 번째 예제도 보면요.
AsynchImageDownload
local function networkListener( event )
if ( event.isError ) then
print ( "Network error - download failed" )
else
myImage = display.newImage( "helloCopy.png", system.TemporaryDirectory, 60, 40 )
myImage.alpha = 0
transition.to( myImage, { alpha = 1.0 } )
end
print ( "RESPONSE: " .. event.response )
end
network.download(
"http://developer.anscamobile.com/demo/hello.png",
"GET",
networkListener,
"helloCopy.png",
system.TemporaryDirectory )
-- NOTE: files saved to system.TemporaryDirectory are not guaranteed to persist across launches.
-- Use system.DocumentsDirectory if you want files to persist.
----------------------------------------------------------------------------------------------------
-- Method 2: use display.loadRemoteImage() to get the file and create a display object in one step
local function networkListener2( event )
if ( event.isError ) then
print ( "Network error - download failed" )
else
event.target.alpha = 0
transition.to( event.target, { alpha = 1.0 } )
end
print ( "RESPONSE: " .. event.response )
end
myImage2 = display.loadRemoteImage(
"http://developer.anscamobile.com/demo/hello.png",
"GET",
networkListener2,
"helloCopy2.png",
system.TemporaryDirectory,
60, 280 )
이 샘플은 HTTP로 이미지를 download할 수 있도록 한 건데요.
network.download()부터 보시면 경로가 있고 GET방식으로 불러오고 파일 이름이 있고 이 파일을 system.TemporaryDirectory 에 저장하네요.
중간에 보면 networkListener함수를 불러오는데요.
이 함수는 event를 파라미터로 받습니다.
함수 안을 보면 에러일 경우 에러 메세지 뿌려주고 에러가 아닐경우는 system.TemporaryDirectory에 있는 이미지를 뿌려줍니다.
두 번째 myImage2 변수선언 부분을 보면요.
display.loadRemoteImage()함수를 썼는데 이것도 그 안의 내용은 network.download()와 똑 같습니다.
불러오는 함수가 networkListener2를 불러오고 맨 마지막에 60,280 이란 숫자가 있는게 다르네요.
networkListener2 함수를 살펴보면 마찬가지로 에러일 경우 에러메세지 뿌려주고 에러가 아닐경우는 event.target.alpha =0으로 투명하게 하고 이것을 transition.to함수로 투명도를 없앴습니다.
대충 보니까 network.download()는 다운로드만 받는거고 display.loadRemoteImage() 는 다운로드 받은 다음에 이것을 화면에 뿌려주기까지 하는 거네요.
먼저 공부도 하기 전에 샘플코드를 분석했는데요. 제대로 공부를 함 해 보겠습니다.
Network Requests
network.request( url, method, listener [, params] )
여기서 디폴트 method 는 GET 입니다.
결과 event는 아래와 같은 프로퍼티들을 가집니다.
• event.response -- 서버로부트 받은 결과 값 (String)
• event.isError -- 네트워크 에러와 관련한 True, False 값
이 두 파라미터는 첫 번째 예제에서 사용했었죠?
예제에는 없지만 여기에 헤더나 바디를 추가할 수 있습니다.
params.headers - 테이블로 선언 함
params.body - 스트링을 담은 HTTP 바디
headers = {}
headers["Content-Type"] = "application/json"
headers["Accept-Language"] = "en-US"
headers.body = "This is an example request body."
위 샘플을 보면 헤더에는 json 사용한다는 것과 언어는 미국식 영어를 사용한다는게 있고요. body에는 예제 바디라는 문장이 있습니다.
HTML 많이 사용해 보신 분들은 이게 뭔지 다 아시겠죠?
Network Downloads
위의 Network Requests와 거의 유사하구요 + 다운로드 기능까지 있는 겁니다.
메모리에 캐싱하지 않고 제공된 디렉토리에 제공된 이름의 파일을 HTTP로 다운로드 하는 겁니다. 큰 파일일 경우 유용하게 사용 하실 수 있습니다.
network.download( url, method, listener [, params], destFilename [, baseDir] )
디폴트 method는 GET입니다. baseDir는 system.DocumentsDirectory나 system.TemporaryDirectory가 될 수 있습니다.
결과 event로는 Network Requests와 같이 event.response와 event.isError가 있습니다.
예제는 위의 두 번째 예제를 봐 주세요.
Displaying Remote Images
이건 예제에서도 봤듯이 다운로드 하면서 곧바로 화면에 이미지를 출력해 주는 기능입니다.
display.loadRemoteImage( url, method, listener [, params], destFilename [, baseDir] [, x, y] )
다 똑 같구요. 마지막에 이미지의 x,y 값이 있는게 다릅니다.
이 함수에는 세가지 프로퍼티가 있습니다. event.response와 event.isError는 위에것들이랑 똑 같구요. 이 외에 event.target이 있습니다.
이 프로퍼티는 이미지가 다운로드 된 후의 새로 만들어진 display object입니다.
예제는 위 두 번째 예제파일 두 번째 부분을 봐 주세요.
오늘 살펴 본 것은 비동기식 HTTP 통신입니다.
이외에 코로나 DOC에 있는 내용은 OpenFeint, Credit, In-App Purchase 입니다.
Open Feint가 무엇인지 아시려면 아래 링크를 보시면 도움이 될 거예요 .
http://novathin.kr/146
그리고 일반 안드로이드 앱 프로그래밍에서 활용하려면 아래 링크를 참조하시구요.
http://blog.daum.net/gkrttod/1091
코로나에서 이 Open Feint를 사용하는 방법은 제가 공부하고 테스트 하고 난 다음에 올리겠습니다.
Credit은 코로나SDK를 만든 회사인 Ansca Mobile에서 제공하는 서비스 인 것 같습니다.
원격으로 User의 Point를 적립하고 이것을 나중에 in-App Purchase 등 현금 구매 할 때 사용할 수 있도록 하는 서비스 같은데요.
저도 이 부분은 공부를 좀 해 봐야겠어요.
개인적으로 In-App Purchase 에 관심이 있어서요.
나머지 네트워킹 주제들 중에 이 In-App Purchase를 먼저 공부하고 글을 올릴 예정입니다.
그럼...
반응형
'Corona SDK > Corona Doc' 카테고리의 다른 글
이벤트, 리스너로 다이나믹한 표현 하기 3 (4) | 2011.11.03 |
---|---|
이벤트, 리스너로 다이나믹한 표현 하기 2 (4) | 2011.11.02 |
이벤트, 리스너로 다이나믹한 표현 하기 1 (0) | 2011.11.01 |
System과 OS Library (5) | 2011.10.31 |
코로나 네트워킹 과 웹 서비스 3 (In App Purchase 1) (2) | 2011.10.25 |
코로나 네트워킹 과 웹 서비스 1 (0) | 2011.10.21 |
오디오, 비디오, 사진 컨트롤 2 (4) | 2011.10.20 |
오디오, 비디오, 사진 컨트롤 1 (0) | 2011.10.19 |
코로나 SDK에서 파일 다루기 (2) | 2011.10.18 |
코로나에서 SQLITE DB 이용하기 (2) | 2011.10.17 |