디시인사이드 갤러리

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

갤러리 본문 영역

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

나르시갤로그로 이동합니다. 2025.09.27 18:50:14
조회 82 추천 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
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 공개연애가 득보다 실인 것 같은 스타는? 운영자 25/10/06 - -
AD 프로게이머가 될테야!! 운영자 25/10/01 - -
2893377 미국 국기 이모티콘은 두개 발명도둑잡기(118.216) 10.02 34 0
2893376 카카오 코테.. c없네.. 프갤러(112.170) 10.02 275 0
2893371 리눅스 창시자 리누스 방한하면 유퀴즈에 나와야 합니다 [1] 발명도둑잡기(118.216) 10.02 64 0
2893367 요즘은 국비교육 인기가 없나보네 [3] 프갤러(219.251) 10.02 171 0
2893366 근데 오히려 못생긴거<<이거 나름 나쁘지 않은듯 [1] ㅆㅇㅆ(113.192) 10.02 75 0
2893364 북돼지새끼는 왜 외제품 사용하는거임?? 타이밍뒷.통수한방(1.213) 10.02 44 0
2893363 커널 패치가드 조지는 중인데 루도그담당(58.239) 10.02 53 0
2893362 오늘의 영화 실마리: 온라인게임 역사 다큐 발명도둑잡기(118.216) 10.02 49 0
2893360 수면쉬야햇당 [2] ♥냥덩이♥갤로그로 이동합니다. 10.02 76 0
2893359 울트라리스크 [2] ♥냥덩이♥갤로그로 이동합니다. 10.01 74 0
2893358 남자도 여신 유튜버 되기 가능 발명도둑잡기(118.216) 10.01 36 0
2893357 뭔가 덥넹 ♥냥덩이♥갤로그로 이동합니다. 10.01 60 0
2893356 애인과 수갑 한쪽씩 차면 뭐 하고 놀아야 하나요? 발명도둑잡기(118.216) 10.01 35 0
2893355 너희 좃찐따라서 나님 없으면 개노잼이잖아 [1] ♥냥덩이♥갤로그로 이동합니다. 10.01 61 0
2893354 나는 supabase의 기능중에 db를 벡터화 하는게 존나 편해서 ㅆㅇㅆ찡갤로그로 이동합니다. 10.01 59 0
2893353 나도 만약 성공했으면 운이 좋았다라고 변명했을듯 타이밍뒷.통수한방(1.213) 10.01 49 0
2893352 인생이 운이라는새끼는 그냥 집안이 좋은새끼들이나 하는 핑계거리이지 타이밍뒷.통수한방(1.213) 10.01 46 0
2893351 CIA에 신고한 냥덩이 외환죄로 최고 사형 가능 [1] 발명도둑잡기(118.216) 10.01 53 0
2893350 실력이라 포장된 운에 현혹되지 말기를 바래 ㅇㅇ(121.168) 10.01 41 0
2893349 근데 supabase 존나 편하네 왜 백엔드 안하고 supabase [5] ㅆㅇㅆ(113.192) 10.01 92 0
2893347 인생은 운이 절대아님 타이밍뒷.통수한방(1.213) 10.01 45 0
2893345 실력은 운이야. 운은 실력이 아니야 ㅇㅇ(121.168) 10.01 39 0
2893344 .. [4] ♥냥덩이♥갤로그로 이동합니다. 10.01 108 0
2893343 와 한화 우승못했네 [10] 개멍청한유라갤로그로 이동합니다. 10.01 86 0
2893342 이재명 대통령과 박진영 대중문화교류위원회 공동위원장 [1] 발명도둑잡기(118.216) 10.01 48 0
2893341 사기조심 프갤러(211.45) 10.01 51 0
2893340 이재명,조국 [1] ♥냥덩이♥갤로그로 이동합니다. 10.01 64 0
2893339 찢재명이 알트먼 보고 행복하겠누 자기보다 작은사람 만나서 ㅋㅋㅋ 타이밍뒷.통수한방(1.213) 10.01 45 0
2893338 금융권 다니는 사람들 다닐만 해? ㅇㅇ(121.168) 10.01 52 0
2893334 아빠 여행간김에 아빠술을 털어보자 ㅇㅅㅇ [1] ㅇㅇ(223.39) 10.01 73 0
2893333 수갑차고 데이트, 네티즌 인기 폭발 발명도둑잡기(118.235) 10.01 29 0
2893332 알트먼 키 뭐임??찢재명보다 작누 타이밍뒷.통수한방(1.213) 10.01 47 0
2893331 날이 쌀쌀하니 길거리 오뎅국물이 땡기는구낭 ♥냥덩이♥갤로그로 이동합니다. 10.01 57 0
2893328 야구 미쳤다 이기양 !! ♥냥덩이♥갤로그로 이동합니다. 10.01 62 0
2893327 홍대 근처 지하철에 미인들이 많이 다니네 발명도둑잡기(118.235) 10.01 65 0
2893326 경험과상상 모노씨어터 첫 날 잘 봤습니다 발명도둑잡기(118.235) 10.01 46 0
2893325 제조업 좆소는 절대 들어가지마라 [3] 프갤러(211.234) 10.01 107 0
2893321 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ ♥덩냥이♥갤로그로 이동합니다. 10.01 52 0
2893320 드라이버 개발하는거 재밌긴하네 [2] 루도그담당(58.239) 10.01 71 0
2893319 하... 맛있는 양념소갈비 하나 먹고싶긴하네... ㅇㅇ(223.39) 10.01 43 0
2893318 난 왜이렇게 실력이 없을까 [2] 프갤러(210.217) 10.01 79 1
2893317 4ㅌㅊ는 내년 1분기안에 가느응~?!? ♥냥덩이♥갤로그로 이동합니다. 10.01 46 0
2893315 금월까지 가능할듯? ♥냥덩이♥갤로그로 이동합니다. 10.01 36 0
2893314 우분투 제발 살려주세요 [5] 프갤러(210.97) 10.01 71 0
2893312 야 개발 스텍이 어떻고 실력이 어떻고 다 의미 없어. gilgarion(211.235) 10.01 62 0
2893311 오라클 ms 토발즈 머스크 보면 it쪽이 좌파인이유알수있지않누?? 타이밍뒷통수한방(1.213) 10.01 36 0
2893310 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ ♥냥덩이♥갤로그로 이동합니다. 10.01 36 0
2893308 이 사람은 통신 패킷, 직렬화 개념을 모르시는 듯 [4] 나르시갤로그로 이동합니다. 10.01 73 0
2893307 지치고 삶이 힘든데... [1] 3ㅇㄴㅁ(211.235) 10.01 46 0
2893306 아.. 그리고 freebsd ports에서 patch 만드는 명령 있잖 나르시갤로그로 이동합니다. 10.01 36 0
뉴스 스톤 아일랜드 한국 단독 컬렉션 출시 ... 브랜드 역사상 최초 디시트렌드 10.04
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2