public function processRequest($req) { $request = json_decode($req['q'], true); $sender_node = $this->parseSenderNode($request); if ($sender_node !== NULL) { $this->updateKBuckets($sender_node); } switch ($request['query']['type']) { case 'FIND_NODE': $needle_id = \Kademlia\Node::hexId2bin($request['query']['node_id']); $response = @json_encode($this->createFindNodeResponse($needle_id, $sender_node)); break; case 'FIND_VALUE': $key_id = \Kademlia\Node::hexId2bin($request['query']['key_id']); $data = $this->createFindValueResponse($key_id, $sender_node); $data['values'] = array_map(base64_encode, $data['values']); $response = @json_encode($data); break; case 'STORE': $key_id = \Kademlia\Node::hexId2bin($request['query']['key_id']); $value = base64_decode($request['query']['value']); $expire = $request['query']['expire']; $this->createStoreResponse($sender_node, $key_id, $value, $expire); $response = '{}'; break; default: $response = '{}'; break; } return $response; }