wanglizhong
2025-05-05 9b8a7157bb9c401de973a4107f74ff3e723ec156
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
<?php
class LtCacheConfigBuilder
{
    protected $servers = array();
 
    protected $defaultConfig = array(
        "adapter"    => "phps",     //apc,xcach,ea; file, phps; memcached
    //"prefix"     => ""
    //"host"       => "localhost", //some ip, hostname
    //"port"       => 3306,
    );
 
    public function addSingleHost($hostConfig)
    {
        $this->addHost("group_0", "node_0", "master", $hostConfig);
    }
 
    public function addHost($groupId, $nodeId = "node_0", $role = "master", $hostConfig)
    {
        if (isset($this->servers[$groupId][$nodeId][$role]))
        {//以相同role的第一个host为默认配置
            $ref = $this->servers[$groupId][$nodeId][$role][0];
        }
        else if ("slave" == $role && isset($this->servers[$groupId][$nodeId]["master"]))
        {//slave host以master的第一个host为默认配置
            $ref = $this->servers[$groupId][$nodeId]["master"][0];
        }
        else if (isset($this->servers[$groupId]) && count($this->servers[$groupId]))
        {//以本group第一个node的master第一个host为默认配置
            $refNode = key($this->servers[$groupId]);
            $ref = $this->servers[$groupId][$refNode]["master"][0];
        }
        else
        {
            if (!isset($hostConfig["adapter"]))
            {
                trigger_error("No db adapter specified");
            }
            $ref = $this->defaultConfig;
        }
        $conf = array_merge($ref, $hostConfig);
        $this->servers[$groupId][$nodeId][$role][] = $conf;
    }
 
    public function getServers()
    {
        return $this->servers;
    }
}