디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

프붕이들 깜놀랄 프로토콜 설계 ㅋㅋ

나르시갤로그로 이동합니다. 2025.09.27 18:50:14
조회 77 추천 0 댓글 5

전에 어떤 프붕이가..

프로코콜에 관한 질문했길레..


메시지

메시지 헤더

메시지 바디


올려본다. ㅋㅋ


/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */
/*
 * nimf-msg-priv.h
 * This file is part of Nimf.
 * Copyright (C) 2015-2025 Hodong Kim, All rights reserved.
 * Unauthorized copying of this software, via any medium is strictly prohibited.
 * Proprietary and confidential.
 * Written by Hodong Kim <hodong@nimfsoft.art>
 */

#ifndef __NIMF_MSG_H__
#define __NIMF_MSG_H__

#include <stdatomic.h>
#include "c-macros.h"
#include <stdint.h>
#include "c-types.h"

C_BEGIN_DECLS

typedef struct _NimfMsg       NimfMsg;
typedef struct _NimfMsgHeader NimfMsgHeader;

/* nimf message type */
#if (defined(__GNUC__) && (GCC_VERSION < 13)) || \
    (defined(__clang__) && (__clang_major__ < 16))
enum {
#else
enum : uint16_t {
#endif
  NIM_NONE = 0,
  NIM_ERROR,
  NIM_LAST_000_099
};

#if (defined(__GNUC__) && (GCC_VERSION < 13)) || \
    (defined(__clang__) && (__clang_major__ < 16))
enum {
#else
enum : uint16_t {
#endif
  /* input method context request: client ---> server */
  NIM_CREATE_CONTEXT = 100,
  NIM_CREATE_CONTEXT_REPLY,
  NIM_DESTROY_CONTEXT,
  NIM_DESTROY_CONTEXT_REPLY,
  NIM_FILTER_EVENT,
  NIM_FILTER_EVENT_REPLY,
  NIM_RESET,
  NIM_RESET_REPLY,
  NIM_FOCUS_IN,
  NIM_FOCUS_IN_REPLY,
  NIM_FOCUS_OUT,
  NIM_FOCUS_OUT_REPLY,
  NIM_SET_CURSOR_LOCATION,
  NIM_SET_CURSOR_LOCATION_REPLY,
  NIM_SET_CB_MASK,
  NIM_SET_CB_MASK_REPLY,
  NIM_ACTIVATE_CANDIDATE_ITEM,
  NIM_ACTIVATE_CANDIDATE_ITEM_REPLY,
  NIM_CHANGE_CANDIDATE_PAGE,
  NIM_CHANGE_CANDIDATE_PAGE_REPLY,
  NIM_LAST_100_199
};

#if (defined(__GNUC__) && (GCC_VERSION < 13)) || \
    (defined(__clang__) && (__clang_major__ < 16))
enum {
#else
enum : uint16_t {
#endif
/* callbacks: server ---> client */
  NIM_PREEDIT_START = 200,
  NIM_PREEDIT_START_REPLY,
  NIM_PREEDIT_END,
  NIM_PREEDIT_END_REPLY,
  NIM_PREEDIT_CHANGED,
  NIM_PREEDIT_CHANGED_REPLY,
  NIM_CANDIDATE_SHOW,
  NIM_CANDIDATE_SHOW_REPLY,
  NIM_CANDIDATE_HIDE,
  NIM_CANDIDATE_HIDE_REPLY,
  NIM_CANDIDATE_CHANGED,
  NIM_CANDIDATE_CHANGED_REPLY,
  NIM_CANDIDATE_SELECTED,
  NIM_CANDIDATE_SELECTED_REPLY,
  NIM_COMMIT,
  NIM_COMMIT_REPLY,
  NIM_GET_SURROUND,
  NIM_GET_SURROUND_REPLY,
  NIM_DELETE_SURROUND,
  NIM_DELETE_SURROUND_REPLY,
  NIM_LAST_200_299
};

#if (defined(__GNUC__) && (GCC_VERSION < 13)) || \
    (defined(__clang__) && (__clang_major__ < 16))
enum {
#else
enum : uint16_t {
#endif
/* misc: protocols that are not important */
  /* callbacks: server ---> client */
  NIM_NOTIFY = 300,
  NIM_NOTIFY_REPLY,
  /* methods: client ---> server */
  NIM_RESET_LAST_FOCUSED_SERVICE_IC,
  NIM_RESET_LAST_FOCUSED_SERVICE_IC_REPLY,
  NIM_RELOAD_CONFIG,
  NIM_RELOAD_CONFIG_REPLY,
  NIM_RETRY_SERVICES,
  NIM_RETRY_SERVICES_REPLY,
  NIM_LAST_300_399
};

struct _NimfMsgHeader
{
  uint16_t icid;
  uint16_t type;
  uint16_t data_len;
  uint16_t padding;
};

struct _NimfMsg
{
  NimfMsgHeader header;
  uint8_t*      data;
  CFreeFunc     data_free_func;
  unsigned      ref_count;
};

typedef struct _NimfResult NimfResult;

struct _NimfResult
{
  bool       is_dispatched;
  NimfMsg*   reply;
  atomic_int ref_count;
};

NimfMsg* nimf_msg_new      (void);
NimfMsg* nimf_msg_new_full (uint16_t  type,
                            uint16_t  im_id,
                            void*     data,
                            uint16_t  data_len,
                            CFreeFunc data_free_func);
NimfMsg* nimf_msg_ref   (NimfMsg* msg);
void     nimf_msg_unref (NimfMsg* msg);
const NimfMsgHeader* nimf_msg_get_header (NimfMsg* msg);
uint16_t nimf_msg_get_header_size ();
void     nimf_msg_set_body (NimfMsg*  msg,
                            uint8_t*  data,
                            uint16_t  data_len,
                            CFreeFunc data_free_func);
const uint8_t* nimf_msg_get_body (NimfMsg* msg);
uint16_t nimf_msg_get_body_size (NimfMsg* msg);
const char* nimf_msg_type_to_name (uint16_t type);

NimfResult* nimf_result_new   ();
NimfResult* nimf_result_ref   (NimfResult* result);
void        nimf_result_unref (NimfResult* result);
bool nimf_result_wait2 (NimfResult* result, uint16_t icid, uint16_t type);
bool nimf_send_message (int       sock_fd,
                        uint16_t  im_id,
                        uint16_t  type,
                        void*     data,
                        uint16_t  data_len,
                        CFreeFunc data_free_func);
NimfMsg* nimf_recv_message (int sock_fd);

C_END_DECLS

#endif /* __NIMF_MSG_H__ */


추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 우리나라를 대표해서 UN 연설자로 내보내고 싶은 스타는? 운영자 25/09/29 - -
AD 프로게이머가 될테야!! 운영자 25/10/01 - -
2892636 프갤럼들 맨날 하는게 영업 아니었나?? [2] ㅇㅇ갤로그로 이동합니다. 09.28 66 0
2892635 ■AI 때문에 웹개발 자체를 포기해야하나 고민중이다 [3] ㅇㅇ갤로그로 이동합니다. 09.28 145 0
2892634 친중무능극좌 리짜이밍 부정평가 48% 과반 붕괴 ♥냥덩이♥갤로그로 이동합니다. 09.28 67 1
2892630 사람이 정말 열심히 살아야 하는것 같아... 항상 제대로 똑바로 살아야해 [1] ㅇㅇ(223.38) 09.28 51 0
2892627 월요일날 우체국에서 틀딱들 정모 하겟네 야옹아저씨갤로그로 이동합니다. 09.28 48 0
2892626 냥덩이 ♥냥덩이♥갤로그로 이동합니다. 09.28 59 0
2892620 [대한민국] 미 - 콜로비아 대통령 비자 취소 프갤러(121.172) 09.28 47 0
2892619 자러감..ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 09.28 38 0
2892618 미용실에 왔어요 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 09.28 50 0
2892617 태연 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 09.28 38 0
2892616 하루 한 번 헤르미온느 찬양 헤르 미온느갤로그로 이동합니다. 09.28 59 0
2892614 러빨러는 왜 러스트 코드 안 올리는 거임? [3] 나르시갤로그로 이동합니다. 09.28 81 0
2892613 병렬처리 먹통 디버깅 ㅋㅋ [1] 나르시갤로그로 이동합니다. 09.28 61 0
2892567 난데요. 고장한 SSD 펌웨어 복구 어려워요. 넥도리아(223.38) 09.28 66 0
2892565 야동 보는데, 미쳐버릴 것 같다. 넥도리아(223.38) 09.28 81 0
2892562 보통 외주받는 랜딩페이지는 길게 세로로 휴대폰 스크롤에 [4] ㅆㅇㅆ(118.235) 09.28 96 0
2892555 일단 타로 관련 도메인 사려고 고민중 ㅆㅇㅆ(124.216) 09.28 56 0
2892547 로우 포인터 안 쓸거면 뭐하러 C++ 씀 [2] ㅇㅇ(106.241) 09.28 94 1
2892545 Ada 프로그래밍, 3.2 예약어 (reserved words) 나르시갤로그로 이동합니다. 09.28 48 0
2892544 Ada 프로그래밍, 3.1 식별자 (identifier) 나르시갤로그로 이동합니다. 09.28 55 0
2892543 근데 영업 전환이라는게 결국은 CTO로써 도태됐거나 그 이상의 기술이 [2] ㅆㅇㅆ(124.216) 09.28 96 0
2892542 어딜가도 커리어 최종은 영업인게 맞냐? [3] 프갤러(125.128) 09.28 95 0
2892541 러스트 사용하는 이유 프갤러(110.8) 09.28 67 0
2892540 C++ 을 사용하는 이유. 프갤러(59.16) 09.28 73 0
2892536 카톡 업데이트 욕하는 애들 특징 [7] 야옹아저씨갤로그로 이동합니다. 09.27 390 7
2892535 c++ 왜쓰냐 [2] 프갤러(1.245) 09.27 105 0
2892533 aws 공부를 한다는게 뭔 말임? [1] 프갤러(220.93) 09.27 86 0
2892532 리액트를 하려다가도 안하게 되는게 프갤러(220.93) 09.27 49 0
2892528 터미네이터3가 시리즈 중 최고임 [1] ♥냥덩이♥갤로그로 이동합니다. 09.27 92 0
2892527 핵전쟁 ♥냥덩이♥갤로그로 이동합니다. 09.27 41 0
2892525 아이폰폴드 펜지원 안하면 절대 안 사줌 ㅅㄱ [1] ♥냥덩이♥갤로그로 이동합니다. 09.27 109 0
2892524 저장용 ♥냥덩이♥갤로그로 이동합니다. 09.27 41 0
2892522 야 아래 포폴 사이트 찾는놈아 내가 찾음 ㅇㅇ ㅆㅇㅆ(124.216) 09.27 75 0
2892520 제 N장: C 언어 인터페이스 연동 나르시갤로그로 이동합니다. 09.27 59 0
2892519 Ada 저술, Cim을 Ada로 코딩, Nimf를 Ada로 코딩... 흠 나르시갤로그로 이동합니다. 09.27 47 0
2892518 누구땜에 또 갤... 난장판 됐네 그려 ㅠㅠ 나르시갤로그로 이동합니다. 09.27 68 0
2892517 코딩천재는 신체부터가 다르당 ♥냥덩이♥갤로그로 이동합니다. 09.27 66 0
2892516 포폴 웹사이트 만들려 하는데 이 템플릿 뭔지 아는사람??? [6] 프갤러(61.75) 09.27 89 0
2892515 ㅆㅇㅆ 도대체 뭘 알려준다는거냐? [1] 프갤러(210.217) 09.27 97 5
2892513 한국인이 체취 없는 이유 ♥냥덩이♥갤로그로 이동합니다. 09.27 87 0
2892511 병렬처리 디버깅 비법 알려준다. [1] ㅆㅇㅆ(124.216) 09.27 91 0
2892509 병렬처리에서 멈추는건 원인이 99퍼 락 경합임? [3] 프갤러(58.29) 09.27 82 0
2892508 구해조 나 좀 구해조 ♥냥덩이♥갤로그로 이동합니다. 09.27 42 0
2892507 나님 살짝쿵야 끙야 기운.. ♥냥덩이♥갤로그로 이동합니다. 09.27 56 0
2892504 파워 정상이 컬러가 자체적으로 안돌고 메인보드에서 돌림. 넥도리아(220.74) 09.27 40 0
2892503 파워 테스텨 하얀색은 1개만 연결하라던데... 넥도리아(220.74) 09.27 40 0
2892502 마키마씨의 발냄새 똥팬티냄새.. ♥냥덩이♥갤로그로 이동합니다. 09.27 87 0
2892501 요즘은 코딩보다 비트코인투자 영어공부중 [4] 초코냥갤로그로 이동합니다. 09.27 98 0
2892497 인간이 문명을 이룬건 두 손의 정밀한 조작과 언어소통이 가능한 구강구조 ♥냥덩이♥갤로그로 이동합니다. 09.27 37 0
2892496 이게 항상 그래, 내가 평소에 뭘 쓴다 이런건 기억도 안돼 ㅆㅇㅆ(124.216) 09.27 56 0
뉴스 ‘CEO’ 송은이, 직원들 퇴사 징크스 고백…“‘이것’ 하면 꼭 나가더라” 디시트렌드 14:00
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2