validated(); $room= Room::where([['branch_id',$validated['branch_id']],['name',$validated['room_name']]])->first(); if (!$room) { return \App\Http\Responses\ApiResponse::error("'找不到對應包廂'"); } $room->internal_ip = $validated['room_ip']; $room->port =1000; $room->touch(); $room->status=RoomStatus::Closed; $room->save(); return \App\Http\Responses\ApiResponse::success($room); } /** * @OA\Post( * path="/api/room/sendSwitch", * summary="送出包廂控制指令", * description="依據傳入的 room_id 與 command,透過 TCP 傳送對應指令給包廂電腦。", * operationId="sendRoomSwitchCommand", * tags={"Room Control"}, * security={{"Authorization":{}}}, * @OA\RequestBody( * required=true, * @OA\JsonContent(ref="#/components/schemas/SendRoomSwitchCommandRequest") * ), * @OA\Response( * response=200, * description="成功傳送指令並回傳 TCP 回應", * @OA\JsonContent( * allOf={ * @OA\Schema(ref="#/components/schemas/ApiResponse"), * @OA\Schema( * @OA\Property(property="data", ref="#/components/schemas/Room") * ) * } * ) * ), * @OA\Response( * response=401, * description="Unauthorized", * @OA\JsonContent( * allOf={ * @OA\Schema(ref="#/components/schemas/ApiResponse"), * @OA\Schema( * @OA\Property(property="code", type="string", example="UNAUTHORIZED"), * @OA\Property(property="message", type="string", example="Unauthorized"), * @OA\Property(property="data", type="null") * ) * } * ) * ), * @OA\Parameter( * name="Accept", * in="header", * required=true, * @OA\Schema(type="string", default="application/json") * ) * ) */ public function sendSwitch(SendRoomSwitchCommandRequest $request): JsonResponse { $validated = $request->validated(); $room= Room::where([['branch_id',$validated['branch_id']],['name',$validated['room_name']]])->first(); $ip = $room->internal_ip; $port = $room->port; $data=(substr($room->name, -3) ?? $room->name).",".($validated['command']=='active' ? 'O':'X'); //dd($data); $client = new TcpSocketClient($ip, $port); try { $response = $client->send($data); $room->status=$validated['command']; $room->started_at=$validated['started_at']; $room->ended_at=$validated['ended_at']; $room->save(); return \App\Http\Responses\ApiResponse::success($room); } catch (\Throwable $e) { $room->status=RoomStatus::Error; $room->started_at=null; $room->ended_at=null; $room->save(); return \App\Http\Responses\ApiResponse::error($e->getMessage()); } } }