public function cancelslicing() { $ret_val = 0; $status_current = ''; if (CoreStatus_checkInIdle($status_current)) { $this->_return_cr(ERROR_NO_SLICING); return; } if ($status_current == CORESTATUS_VALUE_SLICE) { $this->load->helper('slicer'); $ret_val = Slicer_sliceHalt(); if ($ret_val == ERROR_OK) { $this->_return_cr(ERROR_OK); } else { $this->load->helper('printerlog'); PrinterLog_logError('can not stop slicing by REST', __FILE__, __LINE__); $this->_return_cr($ret_val); } } else { $this->_return_cr(ERROR_NO_SLICING); } return; }
function Slicer_checkSlice(&$progress, &$message = NULL, &$array_extruder = array()) { $cr = 0; $ret_val = 0; if (file_exists(SLICER_FILE_REMOTE_STATUS)) { // remote slicing case $tmp_array = array(); $CI =& get_instance(); // read remote slicing status $CI->load->helper('json'); $tmp_array = json_read(SLICER_FILE_REMOTE_STATUS, TRUE); if (!file_exists(SLICER_FILE_REMOTE_STATUS)) { $progress = 99; $message = 'state_finalize_remote'; $cr = ERROR_OK; } else { if (isset($tmp_array['error'])) { $CI->load->helper('printerlog'); PrinterLog_logError('read json error: ' . json_encode($tmp_array), __FILE__, __LINE__); Slicer_sliceHalt(TRUE); // force to cancel remote slicing $cr = ERROR_INTERNAL; } else { $status_array = $tmp_array['json']; // check state if (!isset($status_array[SLICER_TITLE_REMOTE_STATE])) { $CI->load->helper('printerlog'); PrinterLog_logError('unknown remote slicing status json format', __FILE__, __LINE__); return ERROR_INTERNAL; } $cr = ERROR_OK; switch ($status_array[SLICER_TITLE_REMOTE_STATE]) { case SLICER_VALUE_REMOTE_STATE_INITIAL: $progress = 0; $message = 'state_initialize_remote'; break; case SLICER_VALUE_REMOTE_STATE_REQUEST: $progress = 0; $message = 'state_request_remote'; break; case SLICER_VALUE_REMOTE_STATE_UPLOAD: $progress = 0; $message = 'state_upload_remote'; break; case SLICER_VALUE_REMOTE_STATE_WORKING: // use default value for error cases (phrasing extended failed, etc.) $progress = 0; $message = 'state_working_remote'; $CI->load->helper('printerlog'); if (!file_exists(PRINTERLOG_STATS_TMPFILE_SLICE_UPLOAD_END)) { $stats_info = array(); $fp = fopen(PRINTERLOG_STATS_TMPFILE_SLICE_UPLOAD_END, 'w'); if ($fp) { fwrite($fp, 'upload_end'); fclose($fp); } // stats info $stats_info[PRINTERLOG_STATS_SLICE_SERVER] = isset($status_array[SLICER_TITLE_REMOTE_URL]) ? $status_array[SLICER_TITLE_REMOTE_URL] : PRINTERLOG_STATS_VALUE_REMOTE; PrinterLog_statsSlice(PRINTERLOG_STATS_ACTION_UPLOADED, $stats_info); } if (isset($status_array[SLICER_TITLE_REMOTE_EXTENDED])) { if ($status_array[SLICER_TITLE_REMOTE_EXTENDED] == SLICER_MSG_REMOTE_INITIAL) { // remote slicing initialization case $message = 'state_loading_remote'; break; } $explode_array = explode("=", $status_array[SLICER_TITLE_REMOTE_EXTENDED]); if (count($explode_array) >= 2) { $progress = (int) trim($explode_array[0]); $message = trim($explode_array[1]); // blind model path if (strpos($message, SLICER_MSG_EXPORTING_MODEL) !== FALSE) { $message = SLICER_MSG_EXPORTING_MODEL; } } } break; case SLICER_VALUE_REMOTE_STATE_DOWNLOAD: $progress = 99; $message = 'state_download_remote'; $CI->load->helper('printerlog'); if (!file_exists(PRINTERLOG_STATS_TMPFILE_SLICE_DOWNLOAD_START)) { $stats_info = array(); $fp = fopen(PRINTERLOG_STATS_TMPFILE_SLICE_DOWNLOAD_START, 'w'); if ($fp) { fwrite($fp, 'download_start'); fclose($fp); } // stats info $stats_info[PRINTERLOG_STATS_SLICE_SERVER] = isset($status_array[SLICER_TITLE_REMOTE_URL]) ? $status_array[SLICER_TITLE_REMOTE_URL] : PRINTERLOG_STATS_VALUE_REMOTE; PrinterLog_statsSlice(PRINTERLOG_STATS_ACTION_DOWNLOAD, $stats_info); } break; case SLICER_VALUE_REMOTE_STATE_LOCAL: $progress = 0; $message = 'state_local_remote'; break; case SLICER_VALUE_REMOTE_STATE_ERROR: default: $progress = -2; // $message = 'state_error_remote'; if ($status_array[SLICER_TITLE_REMOTE_STATE] != SLICER_VALUE_REMOTE_STATE_ERROR) { $CI->load->helper('printerlog'); PrinterLog_logError('unknown remote slicing status', __FILE__, __LINE__); } // use message as remote server url $message = isset($status_array[SLICER_TITLE_REMOTE_URL]) ? $status_array[SLICER_TITLE_REMOTE_URL] : PRINTERLOG_STATS_VALUE_REMOTE; $cr = ERROR_REMOTE_SLICE; break; } } } return $cr; } // local slicing case $ret_val = Slicer__requestSlicer(SLICER_URL_SLICE_STATUS, TRUE, $response); if ($ret_val == SLICER_RESPONSE_OK) { if ((int) $response < 0) { $cr = ERROR_NO_SLICING; $progress = -1; } else { $cr = ERROR_OK; $progress = (int) $response; if ($progress == 100) { $CI =& get_instance(); $CI->load->helper('printerstate'); $explode_array = explode("\n", $response); if (isset($explode_array[1])) { $explode_array = explode(';', $explode_array[1]); foreach ($explode_array as $key_value) { $tmp_array = explode(':', $key_value); $abb_filament = PrinterState_cartridgeNumber2Abbreviate((int) $tmp_array[0]); $array_extruder[$abb_filament] = ceil($tmp_array[1]); } } else { $cr = ERROR_INTERNAL; } } else { $explode_array = explode("\n", $response); if (isset($explode_array[1])) { $message = $explode_array[1]; // blind model path if (strpos($message, SLICER_MSG_EXPORTING_MODEL) !== FALSE) { $message = SLICER_MSG_EXPORTING_MODEL; } } } } } else { if ($ret_val == SLICER_RESPONSE_ERROR) { if (strpos($response, "InitalError") !== FALSE) { $cr = ERROR_WRONG_PRM; } else { if (strpos($response, "ExportError") !== FALSE) { $cr = ERROR_UNKNOWN_MODEL; } else { $cr = ERROR_INTERNAL; } } $progress = -1; $message = $response; $CI =& get_instance(); $CI->load->helper('printerlog'); PrinterLog_logError('slicer error: ' . $response); } else { $cr = ERROR_INTERNAL; } } return $cr; }