Skip to content
muune edited this page Feb 27, 2019 · 14 revisions

net[목차]

Ch.net

ChHttp

ChResponse

Ch.net

  • 네트워크, api관련

Ch.net.apiRequestTask()

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()

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()

Ch.net.get(k: String):Api?
  • Api를 key로 찾음

Ch.net.add()

Ch.net.add(k:String, api:Api)
  • Api를 추가함

Ch.net.remove()

Ch.net.remove(k:String)
  • 해당 key를 가진 Api를 삭제함

Ch.net.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()

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()

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.net.connectedType(): Ch.Value
  • 네트워크의 상태를 리턴한다.
  • WIFI, MOBILE, NONE

ChHttp(class)

  • ChHttp 메서드

header()

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()

form(key:String, value:String): ChHttp

FormBody에 추가

json()

form(key:String, value:String): ChHttp

body()

body(body:String): ChHttp 
body(ByteArray): ChHttp 
  • body
http.body(Ch.crypto.aesEncryptByte("${http.extra["body"]}", App.akey!!))

file()

file(key:String, filename:String, mine:String, file:ByteArray): ChHttp 
  • file

send()

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)
        }
    }
}

ChResponse(class)

  • Response 클래스

result

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

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

body:String?
  • response의 body를 String로 받음
Ch.net.apiResponseTask("network"){res,_->res.body != null}

header() : ChResponse

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}
    ...
}