-
Notifications
You must be signed in to change notification settings - Fork 1
net
muune edited this page Feb 27, 2019
·
14 revisions
- Ch.net.apiRequestTask()
- Ch.net.apiRequestItemTask()
- Ch.net.apiResponseTask()
- Ch.net.get()
- Ch.net.add()
- Ch.net.remove()
- ★Ch.net.api()
- ★Ch.net.http()
- Ch.net.isOn()
- Ch.net.connectedType()
- 네트워크, api관련
Ch.net.apiRequestTask(key: String, block: requestTaskF)
- Ch.net.api를 호스트 코드에서 실행하기전에 request에 처리해야 할 일들을 넣어줌(프로젝트를 하기 전에 정의해줌)
- requestTaskF = (http:ChHttp, arg:MutableList<Pair<String, Any>>, taskArg:List)->Boolean
- 참고 ChHttp 메서드 : header, from, json, body, file, send
Ch.net.apiRequestTask("akey"){http, _, _->
val a = Ch.crypto.aesKey()
App.akey = a
http.header("akey", (Ch.crypto.rsaEncrypt(a, App.pkey.second) + App.pkey.first).replace("\n", ""))
true
}
Ch.net.apiRequestTask("gateway"){ http, arg, _ ->
val body = "{\"key\":[${arg.find { it.first == "id" }?.second}]}"
http.extra["body"] = body
true
}
Ch.net.apiResponseTask(key: String, block: responseTaskF)
- Ch.net.api를 호스트 코드에서 실행하기전에 Response에 처리해야 할 일들을 넣어줌(프로젝트를 하기 전에 정의해줌)
- responseTaskF = (response:ChResponse, taskArg:List)-> Boolean
- 참고 ChResponse 메서드, 변수 : header(), body, byte
Ch.net.apiResponseTask("network"){res,_->res.body != null}
Ch.net.apiResponseTask("pkey"){ res, _ ->
res.header("pkey")?.let{
App.pkey = App.setPkey(it)
}
true
}
Ch.net.get(k: String):Api?
- Api를 key로 찾음
Ch.net.add(k:String, api:Api)
- Api를 추가함
Ch.net.remove(k:String)
- 해당 key를 가진 Api를 삭제함
Ch.net.api(key:String, vararg arg:Pair<String, Any>, block:(ChResponse)->Unit):Ch.ApiResult
- 해당 키를 가진 Api를 실행하고 통신함. arg를 보내고 response(ChResponse)를 받고 할 일을 적을 수 있고 결과 값은 Ch.ApiResult로 받음
- Ch.ApiResult로 받으면 isFail()메서드로 통신이 fail인지 아닌지 알 수 있음
- apiRequestTask, apiResponseTask에 등록된 Task들이 통신하면서 자동으로 실행됨
val result = Ch.net.api("login", "userid" to InputId.userid, "pass" to InputPw.pass){
val user = it.result as User
it.header("authtoken")?.let{user.authtoken = it}
App.user = user
//Ch.sql.DB?.exec("se_add", user)
App.modalRouter.pop()
SigninVM.isLock = false
}
if(result.isFail()){
Signin.alert(Ch.i18n["signin.failed"])
SigninVM.isLock = false
}
val result = Ch.net.api("gateway", "id" to Ch.res.ids){
Ch.res.load(it.result as JSONObject)
go()
}
if(result.isFail()){
Log.i("ch", result.msg )
go()
}
Ch.net.api("islogin") {
val json = it.result as JSONObject
App.isLoading(false)
if (json._int("islogin") == 1) App.router.push(Main, false)
else {
Signin.ok = {
App.router.push(Main, false)
}
App.modalRouter.push(Signin, false)
}
}
Ch.net.http(method:String, url:String): ChHttp
- 해당 프로젝트에서 사용하는 api가 아닌 단순히 http통신만 하고 싶은 경우 사용한다.
- method : "GET" or "POST"*
- 참고 ChHttp 메서드 : header, from, json, body, file, send
ChNet.http("GET", path).send{res ->
res.byte?.let { data ->
if(f.createNewFile()) FileOutputStream(f).use{
it.write(data)
}
addFont(k, f)
fonts[k]?.let{font->fontListener[k]?.let{
it.forEach{it(font)}}
fontListener.remove(k)
}
}
}
Ch.net.isOn(): Boolean
- 네트워크가 사용 가능한 상태인지 여부를 리턴한다.
if(Ch.net.isOn()){
App.isLoading(true)
Log.i("ch", "Ch.res.ids - ${Ch.res.ids}")
val result = Ch.net.api("gateway", "id" to Ch.res.ids){
Ch.res.load(it.result as JSONObject)
go()
}
...
}
if(!Ch.net.isOn()) Signin.alert(Ch.i18n["alert.disconnect"])
Ch.net.connectedType(): Ch.Value
- 네트워크의 상태를 리턴한다.
- WIFI, MOBILE, NONE
- ChHttp 메서드
header(key:String, value:String): ChHttp
header에 추가
http.header("akey", (Ch.crypto.rsaEncrypt(a, App.pkey.second) + App.pkey.first).replace("\n", ""))
http.header("authtoken", App.user.authtoken)
form(key:String, value:String): ChHttp
FormBody에 추가
form(key:String, value:String): ChHttp
body(body:String): ChHttp
body(ByteArray): ChHttp
- body
http.body(Ch.crypto.aesEncryptByte("${http.extra["body"]}", App.akey!!))
file(key:String, filename:String, mine:String, file:ByteArray): ChHttp
- file
send(block:httpCallBack)
- send
Ch.net.http("GET", path).send{res ->
res.byte?.let { data ->
if(f.createNewFile()) FileOutputStream(f).use{
it.write(data)
}
addFont(k, f)
fonts[k]?.let{font->fontListener[k]?.let{
it.forEach{it(font)}}
fontListener.remove(k)
}
}
}
- Response 클래스
result:Any
- response의 데이터를 받음
// it이 ChResponse
val result = Ch.net.api("login", "userid" to InputId.userid, "pass" to InputPw.pass){
val user = it.result as User
it.header("authtoken")?.let{user.authtoken = it}
...
}
// it이 ChResponse
Ch.net.api("islogin") {
val json = it.result as JSONObject
App.isLoading(false)
if (json._int("islogin") == 1) App.router.push(Main, false)
}
byte:ByteArray?
- response의 body를 ByteArray로 받음
ChNet.http("GET", path).send{res ->
res.byte?.let { data ->
if(f.createNewFile()) FileOutputStream(f).use{
it.write(data)
}
addFont(k, f)
fonts[k]?.let{font->fontListener[k]?.let{
it.forEach{it(font)}}
fontListener.remove(k)
}
}
}
body:String?
- response의 body를 String로 받음
Ch.net.apiResponseTask("network"){res,_->res.body != null}
body:String?
- response의 header를 추가함
// it이 ChResponse
val result = Ch.net.api("login", "userid" to InputId.userid, "pass" to InputPw.pass){
val user = it.result as User
it.header("authtoken")?.let{user.authtoken = it}
...
}