逐步实现TCP服务端Step03-14:整理s的主逻辑

主逻辑是指main函数中的大流程。经过一系列变化,目前的s已变得比较臃肿,散落的变量和全局函数使代码变得不易维护,需要对主逻辑进行整理。

定义Control类来整合主流程用到的函数和变量:

这个地方没什么好说的,就是把现有的那些函数和变量都放到Control中。数据内置在Control中,就不需要再向函数中传递这么多参数了,这是一个修改的地方。

另外,一开始创建共享内存的那些代码,统一放到了全局函数Init中。因为共享内存是最基础的构件,其它东西都应晚于它出现,还是把这些操作放到全局函数中比较合理。

整理后的s代码变得比较简洁,能方便地查看主流程:

 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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Control* g_control = NULL;

int Init();

int main(int argc, char** argv)
{
    if (Init()) return -1;
    // Register message 
    /////////////////////////////////////////
    RegisterMsgBodyCreateFunc(ID_ECHO, 
        REQUEST, RequestEcho::Create);
    /////////////////////////////////////////
    while (1) {
        g_control->GetClientMessages(); 
        g_control->DispatchMessages(); 
    }
    return 0;
}

int Init()
{
    SharedMemory* main_shm = NULL;
    SharedMemory* c2s_code_queue_shm = NULL; 
    SharedMemory* s2c_code_queue_shm = NULL; 
    bool is_new_shm = false;
    if (!(main_shm = SHMFactory::CreateProduct(0x1109,
        Control::CountSize(), is_new_shm))) {
        std::cout << "Create share memeory for " 
            << "code queue failed." << std::endl;
        return 1;
    }
    is_new_shm = false;
    if (!(c2s_code_queue_shm = SHMFactory::CreateProduct(0x1110,
        CodeQueue::CountSize(MAX_CODE_BUF_LEN), is_new_shm))) {
        std::cout << "Create share memeory for " 
            << "c2s code queue failed." << std::endl;
        return 1;
    }
    is_new_shm = false;
    if (!(s2c_code_queue_shm = SHMFactory::CreateProduct(0x1111, 
        CodeQueue::CountSize(MAX_CODE_BUF_LEN), is_new_shm))) { 
        std::cout << "Create share memeory for " 
            << "s2c code queue failed." << std::endl;
        return 1;
    }
    Control::shared_memory_ = main_shm;
    g_control = new Control(c2s_code_queue_shm, s2c_code_queue_shm);
    if (!g_control) {
        std::cout << "New control failed." << std::endl;
        return -1;
    }
    return 0;
}

此次新增及改动的文件:

<==  index  ==>