본문 바로가기
728x90
반응형

전체 글286

다른 기기 로그인을 바로 알려 주기, 이벤트 스트림과 푸시 동시 로그인을 허용하지 않는 계정은 다른 기기에서 로그인하면 예전 세션이 삭제된다. 기존에는 예전 기기에 이를 바로 알리는 경로가 없었다. 2026년 9월 28일 커밋에서 열린 화면을 위한 서버 전송 이벤트(SSE)와 닫힌 앱을 위한 푸시 전송 기능을 추가했다.예전 세션 찾기부터 고쳤다원래는 세션 JSON 문자열에 LIKE로 사용자 아이디를 찾았다. 문자열 검색에 의존하는 방식이라 정확한 사용자 구분에 한계가 있었다. 이를 만료되지 않은 세션을 읽고 JSON을 파싱해 사용자 아이디를 비교하는 방식으로 바꿨다.const sessionData = JSON.parse(row.data);if (String(sessionData.userId || '') !== String(userId)) return null;세.. 2026. 11. 9.
로그 수집 에이전트에 반대 방향 명령 열기, 격리 삭제와 이어받기 다운로드 파일 에이전트와 서버 사이에 원격 파일 명령을 추가했다. 2026년 9월 11일 아침, 1분 간격으로 서버와 에이전트 커밋을 올렸다. 서버는 1.8.0, 에이전트는 1.6이 됐다.원격 파일 명령 다섯 개서버에 파일 내려받기, 폴더 만들기, 복사, 이동, 삭제 명령을 추가했다. 여러 명령을 한꺼번에 대기열에 넣는 기능도 넣었다. 에이전트는 명령을 처리하고 결과를 서버로 돌려보내며, 지원하지 않는 명령은 거절한다.if (type == "DELETE_PATH") { var result = DeletePath(PayloadString(cmd, "path"), cfg.AllowedRoots); ScheduleFileIndexRefresh(TimeSpan.FromSeconds(1)); await a.. 2026. 11. 9.
자동 스크롤 중 터치 다듬기, 화면 잠금부터 1.5초 쉬기까지 웹툰 자동 읽기 앱의 화면 잠금과 자동 스크롤 중 터치 처리를 2024년 12월 10일부터 20일까지 수정했다. 화면 잠금과 스크롤 방식 선택, 버튼 터치 효과를 손봤고, 재생 중 터치를 놓으면 1.5초 뒤 상태를 확인해 다시 스크롤하도록 바꿨다. 반년 뒤에는 같은 파일의 인터페이스 등록과 테스트, 테마 코드도 정리했다.화면 잠금화면을 잠글 수 있도록 isLocked 상태를 추가했다. 잠금 중에는 웹뷰의 터치 리스너가 true를 반환해 이벤트를 소비하도록 했다.setOnTouchListener { _, event -> if (isLocked) { true // 잠금 상태일 때 터치 이벤트 소비 } else { false }}잠금 버튼은 떠 있는 버튼 묶음에 넣고,.. 2026. 11. 9.
웹툰 자동 읽기 앱, 새 창 뒤로가기와 스크롤 폭 설정 웹툰 자동 읽기 안드로이드 앱에서 새 창 뒤로가기와 스크롤 이동 폭을 수정했다. 2024년 12월 8일 세 차례 커밋으로 웹뷰 목록 관리, 로컬 HTML 첫 화면, 스크롤 비율 설정을 추가했다.새 창을 웹뷰 목록으로 관리했다웹툰 사이트에서 새 창을 요청할 때 처리할 수 있도록 WebChromeClient의 onCreateWindow를 구현했다. 새 웹뷰를 만들어 목록에 넣고, 요청 메시지에 해당 웹뷰를 전달하도록 했다.override fun onCreateWindow(view: WebView?, isDialog: Boolean, isUserGesture: Boolean, resultMsg: Message?): Boolean { val newWebView = createNewWebView() .. 2026. 11. 9.
중계 프로그램 버전 기록 따라가기, 시간대와 버스 버전과 ADC 512 단말 스캔 프로그램과 수신기를 잇는 중계 프로그램은 헤더 파일 주석에 버전 기록을 남겼다. 2025년 6월부터 12월까지 세 커밋에서 시간대 설정, 버스 버전 전달, 아날로그 값 전송 조건이 차례로 바뀌었다.3.12: 시간대를 서울로 설정했다6월 4일 커밋 제목은 '시간대 문제 수정'이었다. 수신기에서 받은 날짜와 시간을 장비 시계에 쓰는 함수에서 시간대를 먼저 설정하도록 바꿨다.bool SetTimezone(int biasMinutes, const wchar_t* standardName, const wchar_t* daylightName){ TIME_ZONE_INFORMATION tzi; memset(&tzi, 0, sizeof(TIME_ZONE_INFORMATION)); tzi.Bia.. 2026. 11. 9.
체크섬 오류가 이어지면 포트를 다시 열고, 단락 판정에 여유 주기 단말을 순서대로 불러 응답을 받는 스캔 프로그램에서 단락 판정과 체크섬 오류 처리를 고쳤다. 단락 판정의 응답 길이와 횟수 기준을 바꾸고, 체크섬 오류가 이어지면 포트를 다시 열도록 했다. 7월 28일에 수정한 뒤 8월 1일에 기준 숫자 두 개를 다시 조정했다.체크섬 오류를 세고 포트를 다시 연다응답 세 바이트 중 마지막은 앞 두 바이트를 더해 7비트로 자른 체크섬이다. 맞지 않으면 체크섬 오류를 돌려주기만 했다. 이번에 오류 횟수를 세는 전역 변수를 두고, 맞으면 0으로 되돌리게 했다. 그래서 이 값은 연속으로 틀린 횟수다.cks = (rbuf[h] + rbuf[h + 1]) & 0x7f;if (rbuf[h + 2] != cks){ cksumerrcnt++; return TERR_CHKSUM;}else.. 2026. 11. 9.
728x90
반응형