1 | <?php |
||
20 | class Factory |
||
21 | { |
||
22 | |||
23 | /** |
||
24 | * @param string $json |
||
25 | * |
||
26 | * @return AbstractMessage |
||
27 | * @throws UnknownRequestException |
||
28 | * @throws MalformedRequestException |
||
29 | */ |
||
30 | 2 | public static function factory($json) |
|
31 | { |
||
32 | 2 | $deserialized = json_decode($json); |
|
33 | |||
34 | 2 | if (!isset($deserialized->type)) |
|
35 | 1 | throw new MalformedRequestException('Missing required parameter "type"'); |
|
36 | |||
37 | 1 | $type = $deserialized->type; |
|
38 | |||
39 | // Not all requests have a payload |
||
40 | 1 | if (isset($deserialized->payload)) |
|
41 | $payload = $deserialized->payload; |
||
42 | else |
||
43 | 1 | $payload = null; |
|
44 | |||
45 | switch ($type) |
||
46 | { |
||
47 | 1 | case AbstractMessage::TYPE_POPULAR_CHANNELS_REQUEST: |
|
48 | return new PopularChannelsRequest($payload); |
||
49 | 1 | case AbstractMessage::TYPE_MOST_ACTIVE_WATCHERS_REQUEST: |
|
50 | return new MostActiveWatchersRequest($payload); |
||
51 | 1 | case AbstractMessage::TYPE_AUTHENTICATION_REQUEST: |
|
52 | return new AuthenticationRequest($payload); |
||
53 | 1 | case AbstractMessage::TYPE_INSTANCES_REQUEST: |
|
54 | return new InstancesRequest(); |
||
55 | 1 | case AbstractMessage::TYPE_USERS_REQUEST: |
|
56 | return new UsersRequest($payload); |
||
57 | default: |
||
58 | 1 | throw new UnknownRequestException($type); |
|
59 | } |
||
60 | } |
||
61 | |||
62 | |||
63 | /** |
||
64 | * Don't allow instantiation |
||
65 | */ |
||
66 | private function __construct() |
||
70 | |||
71 | } |
||
72 |