// File: fieryzig[P]GameServer/LogicServer/LogicServer.cpp
// Function: fieryzig::LogicServer::SetConfig(char const*)
RS LogicServer::SetConfig(const char* configFile)
{
    string json = GetStringFromFile(configFile);
    if (json == "") {
        cout << configFile << " doesn't exist!" << endl;
        return RS::FAILED;
    }
    using rapidjson::Document;
    
    Document d;
    d.Parse(json.c_str());
    
    string type; ServerType st;
    int port = -1;
    string ip;
    
    using rapidjson::Value;
    
    Value& v = d["ServerType"];
    if (v.IsString()) {
        type = v.GetString();
        if (type == "CLIENT") {
            st = ServerType::CLIENT;
        }
        else if (type == "GATEWAY") {
            st = ServerType::GATEWAY;
        }
        else if (type == "LOGIC") {
            st = ServerType::LOGIC;
        }
        else {
            cout << "Wrong Server Type!" << endl;
            return RS::FAILED;
        }
    }
    v = d["IP"];
    if (v.IsString()) {
        ip = v.GetString();
    }
    else {
        cout << "Wrong IP Format!" << endl;
    }
    
    v = d["PORT"];
    if (v.IsInt()) {
        port = v.GetInt();
    }
    else {
        cout << "Wrong port!" << endl;
    }
    
    v = d["GATEWAY"];
    if (v.IsArray()) {
        for (int i = 0; i < v.Size(); i++) {
            Value& content = v[i];
            string ip; int port;
            if (content.HasMember("IP") && content["IP"].IsString()) {
                ip = content["IP"].GetString();
            }
            if (content.HasMember("PORT") && content["PORT"].IsInt()) {
                port = content["PORT"].GetInt();
            }
            gateway = make_pair(ip,port);
        }
    }

    config = new ServerConfig(st, ip, port);
    return RS::SUCCESS;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x280, %rsp            # imm = 0x280
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x190(%rbp)
movq -0x18(%rbp), %rsi
leaq -0x38(%rbp), %rdi
movq %rdi, -0x188(%rbp)
callq 0x25e0
movq -0x188(%rbp), %rdi
leaq 0xe0b5(%rip), %rsi      # 0x10dd5
callq 0x3620
movb %al, -0x17a(%rbp)
jmp 0x2d2d
movb -0x17a(%rbp), %al
testb $0x1, %al
jne 0x2d39
jmp 0x2da7
movq -0x18(%rbp), %rsi
movq 0x14294(%rip), %rdi     # 0x16fd8
callq 0x2200
movq %rax, -0x198(%rbp)
jmp 0x2d52
movq -0x198(%rbp), %rdi
leaq 0xb2fd(%rip), %rsi      # 0xe05d
callq 0x2200
movq %rax, -0x1a0(%rbp)
jmp 0x2d6e
movq -0x1a0(%rbp), %rdi
movq 0x1424c(%rip), %rsi     # 0x16fc8
callq 0x2230
jmp 0x2d83
movl $0x1, -0x4(%rbp)
movl $0x1, -0x48(%rbp)
jmp 0x347d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x3492
xorl %eax, %eax
movl %eax, %ecx
leaq -0xa8(%rbp), %rdi
movl $0x400, %edx            # imm = 0x400
movq %rcx, %rsi
callq 0x3890
jmp 0x2dc1
leaq -0x38(%rbp), %rdi
callq 0x2100
movq %rax, %rsi
leaq -0xa8(%rbp), %rdi
callq 0x3990
jmp 0x2ddb
leaq -0xc8(%rbp), %rdi
callq 0x2300
movl $0xffffffff, -0xd0(%rbp) # imm = 0xFFFFFFFF
leaq -0xf0(%rbp), %rdi
callq 0x2300
leaq 0xb269(%rip), %rsi      # 0xe06d
leaq -0xa8(%rbp), %rdi
callq 0x39c0
movq %rax, -0x1a8(%rbp)
jmp 0x2e19
movq -0x1a8(%rbp), %rax
movq %rax, -0xf8(%rbp)
movq -0xf8(%rbp), %rdi
callq 0x3a40
movb %al, -0x1a9(%rbp)
jmp 0x2e3b
movb -0x1a9(%rbp), %al
testb $0x1, %al
jne 0x2e4a
jmp 0x2f7c
movq -0xf8(%rbp), %rdi
callq 0x3a60
movq %rax, -0x1b8(%rbp)
jmp 0x2e5f
movq -0x1b8(%rbp), %rsi
leaq -0xc8(%rbp), %rdi
callq 0x22d0
jmp 0x2e74
leaq 0xb1fd(%rip), %rsi      # 0xe078
leaq -0xc8(%rbp), %rdi
callq 0x3620
movb %al, -0x1b9(%rbp)
jmp 0x2e8f
movb -0x1b9(%rbp), %al
testb $0x1, %al
jne 0x2e9b
jmp 0x2ecc
movl $0x0, -0xcc(%rbp)
jmp 0x2f7a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x346f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x3457
leaq 0xb1ac(%rip), %rsi      # 0xe07f
leaq -0xc8(%rbp), %rdi
callq 0x3620
movb %al, -0x1ba(%rbp)
jmp 0x2ee7
movb -0x1ba(%rbp), %al
testb $0x1, %al
jne 0x2ef3
jmp 0x2eff
movl $0x1, -0xcc(%rbp)
jmp 0x2f78
leaq 0xb181(%rip), %rsi      # 0xe087
leaq -0xc8(%rbp), %rdi
callq 0x3620
movb %al, -0x1bb(%rbp)
jmp 0x2f1a
movb -0x1bb(%rbp), %al
testb $0x1, %al
jne 0x2f26
jmp 0x2f32
movl $0x2, -0xcc(%rbp)
jmp 0x2f76
movq 0x1409f(%rip), %rdi     # 0x16fd8
leaq 0xb14d(%rip), %rsi      # 0xe08d
callq 0x2200
movq %rax, -0x1c8(%rbp)
jmp 0x2f4e
movq -0x1c8(%rbp), %rdi
movq 0x1406c(%rip), %rsi     # 0x16fc8
callq 0x2230
jmp 0x2f63
movl $0x1, -0x4(%rbp)
movl $0x1, -0x48(%rbp)
jmp 0x3431
jmp 0x2f78
jmp 0x2f7a
jmp 0x2f7c
leaq 0xb11d(%rip), %rsi      # 0xe0a0
leaq -0xa8(%rbp), %rdi
callq 0x39c0
movq %rax, -0x1d0(%rbp)
jmp 0x2f98
movq -0x1d0(%rbp), %rsi
movq -0xf8(%rbp), %rdi
callq 0x3ae0
movq -0xf8(%rbp), %rdi
callq 0x3a40
movb %al, -0x1d1(%rbp)
jmp 0x2fbf
movb -0x1d1(%rbp), %al
testb $0x1, %al
jne 0x2fcb
jmp 0x2ff7
movq -0xf8(%rbp), %rdi
callq 0x3a60
movq %rax, -0x1e0(%rbp)
jmp 0x2fe0
movq -0x1e0(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0x22d0
jmp 0x2ff5
jmp 0x302a
movq 0x13fda(%rip), %rdi     # 0x16fd8
leaq 0xb09e(%rip), %rsi      # 0xe0a3
callq 0x2200
movq %rax, -0x1e8(%rbp)
jmp 0x3013
movq -0x1e8(%rbp), %rdi
movq 0x13fa7(%rip), %rsi     # 0x16fc8
callq 0x2230
jmp 0x3028
jmp 0x302a
leaq 0xb083(%rip), %rsi      # 0xe0b4
leaq -0xa8(%rbp), %rdi
callq 0x39c0
movq %rax, -0x1f0(%rbp)
jmp 0x3046
movq -0x1f0(%rbp), %rsi
movq -0xf8(%rbp), %rdi
callq 0x3ae0
movq -0xf8(%rbp), %rdi
callq 0x3b40
movb %al, -0x1f1(%rbp)
jmp 0x306d
movb -0x1f1(%rbp), %al
testb $0x1, %al
jne 0x3079
jmp 0x309b
movq -0xf8(%rbp), %rdi
callq 0x3b60
movl %eax, -0x1f8(%rbp)
jmp 0x308d
movl -0x1f8(%rbp), %eax
movl %eax, -0xd0(%rbp)
jmp 0x30ce
movq 0x13f36(%rip), %rdi     # 0x16fd8
leaq 0xb010(%rip), %rsi      # 0xe0b9
callq 0x2200
movq %rax, -0x200(%rbp)
jmp 0x30b7
movq -0x200(%rbp), %rdi
movq 0x13f03(%rip), %rsi     # 0x16fc8
callq 0x2230
jmp 0x30cc
jmp 0x30ce
leaq 0xafaa(%rip), %rsi      # 0xe07f
leaq -0xa8(%rbp), %rdi
callq 0x39c0
movq %rax, -0x208(%rbp)
jmp 0x30ea
movq -0x208(%rbp), %rsi
movq -0xf8(%rbp), %rdi
callq 0x3ae0
movq -0xf8(%rbp), %rdi
callq 0x3bb0
movb %al, -0x209(%rbp)
jmp 0x3111
movb -0x209(%rbp), %al
testb $0x1, %al
jne 0x3120
jmp 0x3361
movl $0x0, -0xfc(%rbp)
movl -0xfc(%rbp), %eax
movl %eax, -0x214(%rbp)
movq -0xf8(%rbp), %rdi
callq 0x3bd0
movl %eax, -0x210(%rbp)
jmp 0x314a
movl -0x214(%rbp), %eax
movl -0x210(%rbp), %ecx
cmpl %ecx, %eax
jae 0x335f
movq -0xf8(%rbp), %rdi
movl -0xfc(%rbp), %esi
callq 0x3c20
movq %rax, -0x220(%rbp)
jmp 0x3179
movq -0x220(%rbp), %rax
movq %rax, -0x108(%rbp)
leaq -0x128(%rbp), %rdi
callq 0x2300
movq -0x108(%rbp), %rdi
leaq 0xaeff(%rip), %rsi      # 0xe0a0
callq 0x3cb0
movb %al, -0x221(%rbp)
jmp 0x31ae
movb -0x221(%rbp), %al
testb $0x1, %al
jne 0x31bd
jmp 0x325e
movq -0x108(%rbp), %rdi
leaq 0xaed5(%rip), %rsi      # 0xe0a0
callq 0x39c0
movq %rax, -0x230(%rbp)
jmp 0x31d9
movq -0x230(%rbp), %rdi
callq 0x3a40
movb %al, -0x231(%rbp)
jmp 0x31ed
movb -0x231(%rbp), %al
testb $0x1, %al
jne 0x31f9
jmp 0x325e
movq -0x108(%rbp), %rdi
leaq 0xae99(%rip), %rsi      # 0xe0a0
callq 0x39c0
movq %rax, -0x240(%rbp)
jmp 0x3215
movq -0x240(%rbp), %rdi
callq 0x3a60
movq %rax, -0x248(%rbp)
jmp 0x322a
movq -0x248(%rbp), %rsi
leaq -0x128(%rbp), %rdi
callq 0x22d0
jmp 0x323f
jmp 0x325e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x128(%rbp), %rdi
callq 0x2160
jmp 0x3457
movq -0x108(%rbp), %rdi
leaq 0xae48(%rip), %rsi      # 0xe0b4
callq 0x3cb0
movb %al, -0x249(%rbp)
jmp 0x3279
movb -0x249(%rbp), %al
testb $0x1, %al
jne 0x3285
jmp 0x32fd
movq -0x108(%rbp), %rdi
leaq 0xae21(%rip), %rsi      # 0xe0b4
callq 0x39c0
movq %rax, -0x258(%rbp)
jmp 0x32a1
movq -0x258(%rbp), %rdi
callq 0x3b40
movb %al, -0x259(%rbp)
jmp 0x32b5
movb -0x259(%rbp), %al
testb $0x1, %al
jne 0x32c1
jmp 0x32fd
movq -0x108(%rbp), %rdi
leaq 0xade5(%rip), %rsi      # 0xe0b4
callq 0x39c0
movq %rax, -0x268(%rbp)
jmp 0x32dd
movq -0x268(%rbp), %rdi
callq 0x3b60
movl %eax, -0x26c(%rbp)
jmp 0x32f1
movl -0x26c(%rbp), %eax
movl %eax, -0x12c(%rbp)
leaq -0x158(%rbp), %rdi
leaq -0x128(%rbp), %rsi
leaq -0x12c(%rbp), %rdx
callq 0x3d00
jmp 0x3319
movq -0x190(%rbp), %rdi
addq $0x170, %rdi            # imm = 0x170
leaq -0x158(%rbp), %rsi
callq 0x3d40
leaq -0x158(%rbp), %rdi
callq 0x3d80
leaq -0x128(%rbp), %rdi
callq 0x2160
movl -0xfc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xfc(%rbp)
jmp 0x312a
jmp 0x3361
movl $0x30, %edi
callq 0x2210
movq %rax, -0x278(%rbp)
jmp 0x3374
movb $0x1, -0x179(%rbp)
movl -0xcc(%rbp), %eax
movl %eax, -0x27c(%rbp)
leaq -0x178(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x2110
jmp 0x339c
movl -0x27c(%rbp), %esi
movq -0x278(%rbp), %rdi
movl -0xd0(%rbp), %ecx
leaq -0x178(%rbp), %rdx
callq 0x3da0
jmp 0x33bd
movq -0x190(%rbp), %rax
movq -0x278(%rbp), %rcx
movb $0x0, -0x179(%rbp)
movq %rcx, 0x8(%rax)
leaq -0x178(%rbp), %rdi
callq 0x2160
movl $0x0, -0x4(%rbp)
movl $0x1, -0x48(%rbp)
jmp 0x3431
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x3418
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x178(%rbp), %rdi
callq 0x2160
testb $0x1, -0x179(%rbp)
jne 0x3423
jmp 0x342f
movq -0x278(%rbp), %rdi
callq 0x21f0
jmp 0x3457
leaq -0xf0(%rbp), %rdi
callq 0x2160
leaq -0xc8(%rbp), %rdi
callq 0x2160
leaq -0xa8(%rbp), %rdi
callq 0x3df0
jmp 0x347d
leaq -0xf0(%rbp), %rdi
callq 0x2160
leaq -0xc8(%rbp), %rdi
callq 0x2160
leaq -0xa8(%rbp), %rdi
callq 0x3df0
jmp 0x3492
leaq -0x38(%rbp), %rdi
callq 0x2160
movl -0x4(%rbp), %eax
addq $0x280, %rsp            # imm = 0x280
popq %rbp
retq
leaq -0x38(%rbp), %rdi
callq 0x2160
movq -0x40(%rbp), %rdi
callq 0x23b0
nopw %cs:(%rax,%rax)