Ask Your Question

Jinuk's profile - activity

2018-10-18 17:48:59 +0900 commented answer col__Object_id 질문입니다.

ORM 객체가 User 라는 클래스라고 치면, 아래와 같이 col__ObjectId_ 값을 문자열 형식으로 얻을 수 있습니다.

  Ptr<User> user = User::FetchBySomeKey(...);
  DLOG(INFO) << "Primary key: " << boost::lexical_cast<std::string>(user->Id());
2018-10-15 10:33:19 +0900 answered a question ORM 속성 타입 문의드립니다.

TIMESTAMP 대신 integer 로 저장하시면 됩니다.

해당 데이터를 게임 서버에서 사용하실 때,

  • 값 -> 시간: fun::WallClock::FromTimestampInSec()
  • 시간 -> 값: fun::WallClock::ToTimestampInSec()

두 함수를 써서 변환해서 사용하시면 됩니다.

더불어 MySQL 내에서는 SELECT FROM_TIMESTAMP(col_timestamp_field) ... 처럼 사용하시면 됩니다.

2018-09-11 10:39:49 +0900 edited question [서포터즈] 패키징 후 배포한뒤 연결 실패 현상

안녕하세요!

비쥬얼 스튜디오로 ORM을 이용하여 데이터를 넣고 확인하는거까지 테스트 완료했습니다.

유니티 테스트 클라이언트에서 TCP로 데이터를 날리면 서버에서 받아서 처리하고 응답메세지까지 정상적으로 오는데요

우분트 테스트서버에 소스폴더에서 cmake 한뒤 make clean 다시 make pacakage 를 하고 dpkg 설치까지 했습니다.

처음엔 제가 설정을 잘못해서 서비스 등록및 실행이 안되서 dpkg 를 제거 후 다시 재설치를 여러번했는데요

결국엔 서비스 등록 및 서비스 실행까지 정상적으로 구동되었습니다.

클라이언트에서 다시 테스트를 시도하니

Broadcast message from systemd-journald@ubuntu (Sun 2018-08-05 19:32:35 UTC):

i_fun_engine_example_server.default[4693]: Assert failed: outputFile:

콘솔창에 이러한 실패 메세지가 뜨고 클라이언트 로그에도 접속 실패가 뜨네요

혹시나 해서 /etc/default/ 경로로 가서 런처에 로그출력 옵션을 더해서 직접 실행해봤습니다.

이부분부터가 오류가 발생하는 부분인데요

E0805 19:42:24.154207  5122 socket.cc:635] failed to bind listen address: Address already in use. error_code=system:98, listen_address=0.0.0.0:8014
F0805 19:42:24.154505  5122 manifest_handler.cc:748] Assert failed: started: Failed to start 'ApiService'

Broadcast message from systemd-journald@ubuntu (Sun 2018-08-05 19:42:24 UTC):

i_fun_engine_example_server.default[5122]: Assert failed: started: Failed to start 'ApiService'

*** Check failure stack trace: ***
E0805 19:42:24.154862  5122 framework.cc:54] System has been crashed. (1.0.0-2619xenial)
E0805 19:42:24.154876  5122 framework.cc:64] Shutdown AccountManager.
E0805 19:42:24.154886  5122 framework.cc:64] Shutdown EventDispatcher.
E0805 19:42:24.255102  5122 framework.cc:64] Shutdown ObjectTransaction.
E0805 19:42:24.255223  5122 framework.cc:64] Shutdown ObjectDatabase.
I0805 19:42:24.255237  5122 object_database.cc:3599] Flushing 0 update queries
/usr/share/funapi/bash/launcher-common.sh: line 89:  5122 Aborted                 (core dumped) $fork_prefix $FUNAPI_BIN_DIR/funapi_runner $args $@
[ERROR] i_fun_engine_example_server@ubuntu termianted with 134.

Analyzing crashdump /var/crash/funapi/i_fun_engine_example/5ac30717-cf48-4f48-57e69c4c-33ca57dd.dmp

OS Linux 0.0.0 Linux 4.4.0-130-generic #156-Ubuntu SMP Thu Jun 14 08:53:28 UTC 2018 x86_64
CPU amd64 family 23 model 17 stepping 0 2
Crash SIGSEGV 0x7f457b5afe00 0

0 libglog.so.0.0.0 (+0xb5f1)
1 libglog.so.0.0.0 (+0x21e420)
2 libglog.so.0.0.0 (+0x21e480)
3 libglog.so.0.0.0 (+0xd433)
4 libglog.so.0.0.0 (+0x21e440)
5 funapi_runner: _fini (+0x4a6bc)
6 funapi_runner: _fini (+0x4a6db)
7 libc-2.23.so (+0x100be2)
8 libglog.so.0.0.0 (+0x18fbf)
9 libglog.so.0.0.0 (+0xb15b)
10 libglog.so.0.0.0 (+0xb379)
11 funapi_runner: fun::StartComponents() (+0x43b)
12 funapi_runner: _init (+0x1600)
13  (+0x7f456850d2c0)
14 funapi_runner: HandleProtobufLogMessage(google::protobuf::LogLevel, char const*, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (+0xb00)
15 funapi_runner: main (+0xef1)

Run "/usr/bin/funapi_stackwalk '/var/crash/funapi/i_fun_engine_example/5ac30717-cf48-4f48-57e69c4c-33ca57dd.dmp' /usr/share/i_fun_engine_example/default/symbols /usr/share/funapi/symbols" to display crash-info

이 오류가 발생해서 접속이 안되는것이 맞나요??

혹 제가 빠트린 셋팅이 있거나 IDE 상에서 디버그 할때와는 다르게 릴리즈할때는 뭔가 다른 셋팅이 있는건지.. 궁금하네요

참고로 우분투버전은 16버전이구요 유투브에 올려주신 튜토리얼에 리눅스 셋팅 참고해서 설치했습니다.

더 필요한 정보가 있으면 알려주시면 덧글에 올리겠습니다.

감사합니다!

2018-09-11 10:33:20 +0900 answered a question RegisterZoneHandler 사용에 관한 질문

RegisterZoneHandler 로 등록한 콜백함수는 선언한 Zone 에 진입하거나, 나가는 경우 한 번 씩 호출됩니다.

생성한 Zone 을 들어가거나 나가는 상황이 맞는지 확인 부탁드리빈다. (하나의 Zone 내에서 이동하면 호출하지 않습니다)

2018-09-11 10:02:48 +0900 edited question RegisterZoneHandler 사용에 관한 질문

안녕하세요. iFun engine으로 월드맵을 만들어보면서 테스트해보고 있습니다.

현재 WorldManager 에 하나의 월드와 4개의 존을 추가해 놨습니다. WorldManager 에서 RegisterZoneHandler 를 사용해 존을 출입할 때 통보 받을 수 있다고 해서 간단한 콜백함수(단순 로그만 출력)를 하나 만들어서 등록해놓고 테스트를 해봤는데요. 처음엔 월드맵에서 캐릭터를 이동시키면 좌표에 따라 이벤트가 발생해서 콜백함수가 수행되고 로그가 출력되는 걸 확인했습니다만 어느 순간부터 월드에서 캐릭을 이동시켜도 콜백함수가 호출되지 않고 있습니다. 이럴 경우 어떤 부분을 확인해봐야 할까요?

월드와 존 셋팅, 함수 등록 등등 가이드 문서를 참고해서 작업을 했습니다. 예제나 설명이 너무 간단하게만 적혀있어서 좀 불편합니다. 이 부분에 대한 업데이트도 부탁드리겠습니다.

2018-09-11 09:59:18 +0900 asked a question Sanity check

Sanity check posting.

2018-09-03 14:53:27 +0900 commented answer 서버가 가끔 crash나는 현상이 발생합니다.

버그가 게임 서버와 MySQL 서버 사이의 연결 종료 후에 생기는 것으로 보이며, 이 부분을 완화하기 위해서 아래설정을 수정 부탁드립니다.

문제 파악 후에 패치를 진행할 예정입니다

2018-09-03 13:34:26 +0900 edited answer 서버가 가끔 crash나는 현상이 발생합니다.

안녕하세요 일단 이곳에 올리겠습니다.

E0902 18:14:52.081010 102191 curl.cc:166] curl_easy_perform() failed: 56
E0902 18:14:52.085912 102191 google_plus_authentication.cc:80] Failed to authenticate google plus. http request failure. error code=56, error desc=Failure when receiving data from the peer
E0902 18:14:52.086588 102191 (Mono)Server.HandleLogin.cs:188] Failed to verify the authentication.
E0902 18:18:30.049185 102188 curl.cc:166] curl_easy_perform() failed: 56
E0902 18:18:30.049405 102188 google_plus_authentication.cc:80] Failed to authenticate google plus. http request failure. error code=56, error desc=Failure when receiving data from the peer
E0902 18:18:30.051548 102188 (Mono)Server.HandleLogin.cs:188] Failed to verify the authentication.
E0902 18:36:15.820564 102188 curl.cc:166] curl_easy_perform() failed: 56
E0902 18:36:15.826800 102188 google_plus_authentication.cc:80] Failed to authenticate google plus. http request failure. error code=56, error desc=Failure when receiving data from the peer
E0902 18:36:15.827343 102188 (Mono)Server.HandleLogin.cs:188] Failed to verify the authentication.
E0902 18:53:11.262465 102188 curl.cc:166] curl_easy_perform() failed: 56
E0902 18:53:11.262734 102188 google_plus_authentication.cc:80] Failed to authenticate google plus. http request failure. error code=56, error desc=Failure when receiving data from the peer
E0902 18:53:11.263173 102188 (Mono)Server.HandleLogin.cs:188] Failed to verify the authentication.
E0902 19:07:50.617856 102190 curl.cc:166] curl_easy_perform() failed: 56
E0902 19:07:50.618100 102190 google_plus_authentication.cc:80] Failed to authenticate google plus. http request failure. error code=56, error desc=Failure when receiving data from the peer
E0902 19:07:50.618578 102190 (Mono)Server.HandleLogin.cs:188] Failed to verify the authentication.
E0902 19:07:53.326472 102191 (Mono)Server.HandlePvPMyInfo.cs:117] System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
  at System.Collections.Generic.Dictionary`2[funapi.Session,System.String].get_Item (funapi.Session key) [0x00000] in <filename unknown>:0 
  at InfiniteSlayers.Server.OnPvPMyInfo (funapi.Session session, Newtonsoft.Json.Linq.JObject message) [0x00008] in /home/casper7609/xxxx-source/mono/Server/PvP/Server.HandlePvPMyInfo.cs:17 
E0902 19:07:53.366467 102189 (Mono)Server.HandlePvPMyInfo.cs:117] System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
  at System.Collections.Generic.Dictionary`2[funapi.Session,System.String].get_Item (funapi.Session key) [0x00000] in <filename unknown>:0 
  at InfiniteSlayers.Server.OnPvPMyInfo (funapi.Session session, Newtonsoft.Json.Linq.JObject message) [0x00008] in /home/casper7609/xxxx-source/mono/Server/PvP/Server.HandlePvPMyInfo.cs:17 
E0902 19:07:53.366804 102189 (Mono)Server.HandlePvPHistory.cs:108] System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
  at System.Collections.Generic.Dictionary`2[funapi.Session,System.String].get_Item (funapi.Session key) [0x00000] in <filename unknown>:0 
  at InfiniteSlayers.Server.OnPvPHistory (funapi.Session session, Newtonsoft.Json.Linq.JObject message) [0x00008] in /home/casper7609/xxxx-source/mono/Server/PvP/Server.HandlePvPHistory.cs:17 
E0902 20:02:40.737157 102190 curl.cc:166] curl_easy_perform ...
(more)
2018-09-03 09:37:39 +0900 commented answer 서버가 가끔 crash나는 현상이 발생합니다.

로그를 추가 댓글로 붙여주시거나, funapi-support@ifunfactory.com 으로 보내주세요. 후자로 보내주시면 저희가 관련있는 내용만 포함해서 여기에 댓글로 다시 올릴 예정입니다.

2018-06-12 15:21:53 +0900 answered a question Test 용 matchmaker 서버 오류 종료 문의

pong.lobby 와 pong.matchmaker 가 서로 다른 버전의 아이펀엔진을 사용해서 빌드한 것으로 보입니다. 두 서버를 같은 곳에서 빌드했는지 (같은 서버의 같은 빌드 디렉터리) 여부를 확인해주세요. 같은 디렉터리가 아니라면 make clean 후 다시 빌드 부탁 드립니다.

(오류 로그의 Unknown RPC message ... 부분이 한쪽 서버가 이해하지 못하는 메시지를 받았다는 의미인데, 양쪽 서버의 버전이 다를 때만 발생할 수 있습니다 (RPC를 사용한다면 같은 서버 군에서 빌드 / 실행 시간 버전이 모두 호환되는 버전이어야 합니다.)

2018-06-12 15:16:20 +0900 edited question Test 용 matchmaker 서버 오류 종료 문의

안녕하세요 ifunengine 을 검토 중에 matchmaker 서버 오류가 발생하여 문의를 드립니다.

테스트 환경 ( windows10, virtualbox, ubuntu 14.04 LTS ) 을 구성하였고,

테스트 서버 소스 ( https://github.com/iFunFactory/game-p... ) 를 내려 받아서 빌드까지 완료 하였습니다.

이후 funapi-authenticator-launcher 실행 funapi-leaderboard-launcher 실행 후

pong.lobby-local 실행 pong.matchmaker-local 실행 직후 아래와 같은 오류가 발생하면 서버가 죽습니다.

이런 경우 어떻게 해결을 해야 하는지요? 확인 부탁 드립니다.

감사합니다.

--- 아래 ---
I0612 09:36:29.596633  4162 pong_server.cc:47] Starting matchmaker server
I0612 09:36:29.601740  4174 rpc_service.cc:711] RPC server handshaking completed: peer=08002724-0f62-7f17-0000-000000000000(P)(10.0.2.15:6015), Total RPC peers=2
F0612 09:36:29.601932  4174 rpc_service.cc:769] Unknown RPC message: type=FODSFingerprintCheck
*** Check failure stack trace: ***
E0612 09:36:29.602370  4174 framework.cc:54] System has been crashed. (1.0.0-2619trusty)
E0612 09:36:29.602380  4174 framework.cc:64] Shutdown EventDispatcher.
E0612 09:36:29.702494  4174 framework.cc:64] Shutdown ObjectLeaser.
E0612 09:36:29.702527  4174 framework.cc:64] Shutdown ObjectTransaction.
E0612 09:36:29.702563  4174 framework.cc:64] Shutdown ZookeeperClient.
I0612 09:36:30.702806  4174 zookeeper_client.cc:141] Finalizing zookeeper client. Disconnecting the zookeeper session. session_id=0x163f16977a10004, state=CONNECTED_STATE
I0612 09:36:30.702927  4174 zookeeper_client.cc:162] The zookeeper session disconnected. session_id=0x163f16977a10004, state=CLOSED_STATE
I0612 09:36:30.702965  4174 zookeeper_client.cc:141] Finalizing zookeeper client. Disconnecting the zookeeper session. session_id=0x163f16977a10005, state=CONNECTED_STATE
I0612 09:36:30.703085  4174 zookeeper_client.cc:162] The zookeeper session disconnected. session_id=0x163f16977a10005, state=CLOSED_STATE
I0612 09:36:30.703126  4174 zookeeper_client.cc:141] Finalizing zookeeper client. Disconnecting the zookeeper session. session_id=0x163f16977a10006, state=CONNECTED_STATE
I0612 09:36:30.703183  4174 zookeeper_client.cc:162] The zookeeper session disconnected. session_id=0x163f16977a10006, state=CLOSED_STATE
I0612 09:36:30.703207  4174 zookeeper_client.cc:141] Finalizing zookeeper client. Disconnecting the zookeeper session. session_id=0x163f16977a10007, state=CONNECTED_STATE
I0612 09:36:30.703296  4174 zookeeper_client.cc:162] The zookeeper session disconnected. session_id=0x163f16977a10007, state=CLOSED_STATE
E0612 09:36:30.728139  4174 main.cc:193] Crashdump written to /home/jacob/work/game-pong-server/pong-build/debug/dumps/53b886ae-a0dd-44ec-3d8cf7b8-60660773.dmp
/usr/share/funapi/bash/launcher-common.sh: line 89:  4162 세그멘테이션 오류 (core dumped) $fork_prefix $FUNAPI_BIN_DIR/funapi_runner $args $@
[ERROR] pong_server@jacob-VirtualBox termianted with 139.

Analyzing crashdump /home/jacob/work/game-pong-server/pong-build/debug/dumps/53b886ae-a0dd-44ec-3d8cf7b8-60660773.dmp
2018-05-18 10:48:22 +0900 commented answer Missing ApiService finisher 로그 질문드립니다.

분산서버인 경우에 자동으로 클라이언트를 이동시켜주진 않습니다.

  • 서버의 부하 상황을 알 수 있는 값을 만드시고
  • 해당 값에 따라서 AccountManager::RedirectClient 로 다른 서버로 옮기기

를 쓰시는게 좋아보입니다.

2018-05-18 09:31:48 +0900 answered a question Missing ApiService finisher 로그 질문드립니다.

4

Session::IsTransportAttached() 혹은 Session::IsTransportAttached(transport_type) 함수를 이용해서 연결이 하나라도 되어있는지, 혹은 특정 타입의 연결이 있는지 확인할 수 있습니다.

2018-05-18 09:30:31 +0900 answered a question Missing ApiService finisher 로그 질문드립니다.

3

  • Flavor 가 동일한 서버가 여러대 존재하는 것에는 문제가 없습니다. 분산처리가 된다라고 말씀하시는게 생각할 수 있는 범위가 많은데, 아이펀엔진에서 보장하거나 제공하는 것은 아래와 같습니다. (기능이 많아서 간단한 것만 적었습니다. 자세한 사항은 레퍼런스 매뉴얼을 참고해주세요)

  • AccountManager 를 통한 분산 서버군 전체의 로그인 상태 관리

  • ORM을 사용한 경우, 한 번에 한 이벤트에서만 특정 디비 객체에 접근할 수 있게 제어
  • 서로 다른 서버에 있는 유저에게 메시지 전송
  • 아이펀엔진에서 제공하는 각종 서비스 (매치 메이킹, 빌링, 리더보드, dedicated server 관리, ...) 지원

만약 특정 서버에서 변경한 메모리 상태를 바로 다른 서버에서 보길 원한다면 해당하는 방식의 동기화는 지원하지 않으며, 클라이언트 이동 기능으로 특정 서버로 보내거나, RPC메시지를 통해서 동기화해야 합니다.

2018-05-18 09:26:49 +0900 answered a question Missing ApiService finisher 로그 질문드립니다.

2 해당 로그는 데이터베이스 연결이 DB 쪽 타임아웃 후에 다시 연결할 때 나오는 메시지입니다. 해당 변수와 관련이 있으며, 나온다고 해도 크게 문제되진 않습니다. (짧은 시간 안에 지속적으로 연결에 실패하는 경우에는 데이터베이스 서버가 떠 있는지 확인해주세요)

2018-05-18 09:25:46 +0900 answered a question Missing ApiService finisher 로그 질문드립니다.
  1. W0518 08:43:05.342229 10327 api_service.cc:159] Missing ApiService finisher: "GET /users/ 는 해당 HTTP API 호출에 대해서 응답을 보내지 않으면 (보낼 때까지 혹은 연결이 끊길 때까지) 지속적으로 로그가 출력됩니다. 해당 URL로 들어온 요청을 처리하는 함수가 HTTP 응답을 보내지 않는 경우가 있는지 확인해주세요.
2018-05-08 11:55:19 +0900 edited answer C# 프로젝트 빌드 중 오류 질문드립니다.

{ "CreatedUserCount": { "ServerName": "String(20) Key",// "CreatedCount": "Integer" }, "GooglePlusAccount": { "ClientId": "String(24) Key", "Email": "String(74)", "DisplayName": "String(64)", "User": "User Foreign" }, "UserName": { "UserName": "String(20) Key", "User": "User Foreign" }, "User": { "HashId": "String(16) KEY", "UserName": "String(20)",//사용자 이름 "HasChangedUserName": "Boolean", "AuthType": "Integer",//EAuthType "IsAdmin": "Boolean", //Admin 이면 게임에 아무런 영향도 주지 않는다 ex.) 랭킹이나 그런데 포함 안됨, PvP MatchMaking에 포함 안됨 등등 "IsBanned": "Boolean",//차단된 사용자 "BannedTimeFrom": "Integer", "BannedTimeTo": "Integer", "BannedReason": "String(256)", "UserLevel": "Integer",//사용자 레벨 "Gold": "Double",//골드, 캐릭터 가짜 레벨업에 사용 "Gem": "Integer",//젬 "GemAccum": "Integer",//gem received, except for purchase "CharacterPoint": "Integer",//캐릭터 진짜 레벨업, 스킬 업에 사용 "ItemPoint": "Integer",//아이템 레벨업에 사용 "DungeonKey": "Integer",//던전 입장에 사용 "DungeonKeyRechargeTime": "Integer", "PvPEnabled": "Boolean",//Can Play PvP? 500 stage clear is required "PvPPoint": "Integer",//PvP 입장에 사용 "PvPPointRechargeTime": "Integer", "BonusBoxRechargeTime": "Integer", "AdGoldTimeLeft": "Integer",//Gold rewarded Ad time left, 단위: 초 "DoubleSpeedTimeLeft": "Integer",//2배 속도 남은 시간, 단위: 초 "TripleSpeedTimeLeft": "Integer",//3배 속도 남은 시간, 단위: 초 "CreationDate": "Integer",//생성 날짜 "LastLoginTime": "Integer",//마지막 로그인 시각 "LastAliveTime": "Integer",//Used For OfflineStage and to show the most recent active time "LastResetStageTime": "Integer",//

    "PossibleOfflineStage": "Integer",//최대 오프라인 시 도달 스테이지
    "CurrentStage": "Integer",
    "MaxStage": "Integer",
    "ReturnCount": "Integer",//귀환 횟수

    "AdWatchCount": "Integer",//how many times user has watched ad?
    "Payment": "Double",//how much this user paid us in currency


    "BonusBoxEnabled": "Boolean",//Can Open BonusBox? 150 stage clear is required
    "BerserkEnabled": "Boolean",//Can Use Berserk? 30 stage clear is required
    "ItemForgeEnabled": "Boolean",//Can Use Use Item Forge? 250 stage clear is required
    "HasReferredUser": "Boolean",//HasReferredUser


    "HurdleStage": "Integer",
    "PvPCount": "Integer",
    "PvPReward": "PvPReward Foreign",

    "DailyQuestResetTime": "Integer",
    "WeeklyQuestResetTime": "Integer",

    "RewardsPerHundred": "Integer[]",
    "BanHistories": "BanHistory[] Foreign",
    "SystemMails": "SystemMail[] Foreign",
    "CharacterDatas": "CharacterData[] Foreign",
    "PetInstances": "ItemInstance[] Foreign",
    "Investments": "Investment[] Foreign",
    "Quests": "Quest[] Foreign",
    "PvPResults": "PvPResult[] Foreign",
    "PvPWinRatio": "PvPWinRatio Foreign",
    "GooglePlusAccount": "GooglePlusAccount Foreign"
  },
  "BanHistory": {
     "User": "User Foreign",
     "IsBanned": "Boolean",
     "BannedTimeFrom": "Integer",
     "BannedTimeTo": "Integer",
     "BannedReason": "String(256)"
  },
  "Coupon": {
     "RewardKey": "String(20) KEY",
     "User": "User Foreign",
     "ReceivedTime": "Integer"
  },
  "SystemMail": {
     "User": "User Foreign",
     "Title": "String(128)",
     "TitleTemplate": "Integer",
     "Sender": "String(128)",
     "Message": "String(1024)",
     "MessageTemplate": "Integer",
     "SystemRewards": "SystemReward[] Foreign",
     "CreatedTime": "Integer",
     "ReceivedTime": "Integer",
     "DeletedTime": "Integer",
     "HasReceived": "Bool"
  },
  "SystemReward": {
     "SystemMail": "SystemMail Foreign",
     "RewardType": "Integer",
     "Count": "Integer"
  },
  "Investment": {
     "User": "User Foreign",
     "InvestmentId": "Integer",
     "CurrentCount": "Integer",
     "Level": "Integer"
  },
  "Quest": {
     "User": "User Foreign",
     "QuestType": "Integer",
     "CurrentCount": "Integer",
     "HasReceivedReward": "Bool"
  },
  "ItemInstance": {
     "User": "User Foreign",
     "CharacterData": "CharacterData Foreign",
     "ItemId": "Integer",//EItemId
     "ItemType": "Integer",//EItemType
     "Proficiency": "Integer",
     "CharacterType": "Integer",//ECharacterType. When it's None it doesn't belong to character, it belongs to user. Maybe implemented sometime later.
     "Level": "Integer",
     "IsUnlocked": "Bool",
     "IsEquipped": "Bool",
     "RemainingUses": "Integer"
  },
  "CharacterSkillLevel": {
     "CharacterData": "CharacterData Foreign",
     "CharacterType": "Integer",//ECharacterType
     "SkillId": "Integer",//ESkillIdType
     "Level": "Integer",
     "IsPassive": "Bool"
  },
  "CharacterData": {//Actual Character User Owns
     "User": "User Foreign",
     "CharacterType": "Integer",//ECharacterType
     "GoldLevel": "Integer",
     "RealLevel": "Integer",
     "ActiveType": "Integer",
     "PvPActiveType": "Integer",
     "IsUnlocked": "Bool",
     "CharacterSkillLevels": "CharacterSkillLevel[] Foreign",
     "ItemInstances": "ItemInstance[] Foreign"
  },
  "PvPResult": {
     "User": "User Foreign",
     "Time": "Integer",
     "ResultFromAttacker": "Integer",
     "AttackerUserId": "String(36)",
     "AttackerScore": "Double",
     "AttackerScoreDiff": "Double",
     "AttackerEloDiff": "Double",
     "DefenderUserId": "String(36)",
     "DefenderScore": "Double",
     "DefenderScoreDiff": "Double",
     "DefenderEloDiff": "Double"
  },
  "PvPWinRatio": {
     "User": "User Foreign",
     "Win": "Integer",
     "Lose": "Integer",
     "Draw": "Integer"
  },
  "PvPReward": {
     "User": "User Foreign",
     "PreviousScore": "Integer",
     "PreviousRank": "Integer ...
(more)
2018-05-08 11:54:42 +0900 edited question C# 프로젝트 빌드 중 오류 질문드립니다.

안녕하세요. 배포용 패키지를 만들려고 빌드하는 도중 오류가 나서 질문드립니다.

오류 내용은 다음과 같습니다.

root@ubuntu:/home/test/test_proj-build/debug# make
Not using ccache.
No flavor was given. Adding a default flavor
-- Configuring done
-- Generating done
-- Build files have been written to: /home/test/test_proj-build/debug
[  2%] Extracting a build number from the source tree.
-- Found Git: /usr/bin/git (found version "1.9.1") 
Build number from is 8a460ea~dirty
[  2%] Built target extract_buildno
[  7%] Built target internal_create_launchers
[  9%] Built target internal_import_manifest_dirs
[ 16%] Built target internal_import_resource_dirs
[ 19%] Generating /home/test/test_proj-source/src/test_proj_object.h, /home/test/test_proj-source/src/object_model/test_proj_object.cc, /home/test/test_proj-source/src/test_proj_object.py, /home/test/test_proj-source/src/../mono/ObjectModel/test_proj_object.cs
/usr/lib/python2.7/dist-packages/funapi/json/__init__.pyc
Scanning dependencies of target test_proj
[ 21%] Building CXX object src/CMakeFiles/test_proj.dir/object_model/test_proj_object.cc.o
c++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.8/README.Bugs> for instructions.
make[2]: *** [src/CMakeFiles/test_proj.dir/object_model/test_proj_object.cc.o] Error 4
make[1]: *** [src/CMakeFiles/test_proj.dir/all] Error 2
make: *** [all] Error 2

혹시 어느곳을 확인해야되는지 가이드 해주시면 감사하겠습니다.

좋은 하루 되세요!

2018-04-12 12:30:32 +0900 edited answer 구글 결제 검증 관련 질문드립니다.

안녕하세요, 아이펀팩토리입니다. redirect_uri 의 경우 따로 설정하지 않으셔도 괜찮습니다.

funapi-biller 내에서 refresh_token 을 이용해서 access_token 을 발급 받아서 사용하는데요, 그 과정에서 올바른 값을 입력하지 않아서 정상적으로 access_token 을 가져오지 못하는 문제가 발생한 듯 보입니다 (로그상 구글쪽 통신과 실패시 응답 받은 부분은 아래에 해당합니다.

W0411 21:34:57.296624  3623 google_play_adapter.cc:112] status code is not OK(200): 400
W0411 21:34:57.296880  3623 google_play_adapter.cc:126] failed to get google api access token: {"error":"invalid_grant","error_description":"Bad Request"}

엔진 MANIFEST.json 에 입력한 입력하신 googleplay_refresh_token 은 어떤 방식으로 가져오셨는지 말씀해주시면 조금 더 확인이 가능할 것 같습니다.

2018-04-12 11:24:05 +0900 edited question 구글 결제 검증 관련 질문드립니다.

안녕하세요. 이제 결제 검증 쪽 구현하고 있는데 잘 안되어서 질문 드립니다. ㅠㅠ

I0411 21:34:57.043345  3601 billing_agent.cc:1401] begin to authenticate google api server account: google paly client id(~~.apps.googleusercontent.com)
I0411 21:34:57.043493  3601 google_play_adapter.cc:289] begin to refresh google api access token: ~~.apps.googleusercontent.com
I0411 21:34:57.043582  3601 google_play_adapter.cc:48] try to request google api access token: google client id(~~.googleusercontent.com), google client secret(...), google refresh token(4/~~)
W0411 21:34:57.296624  3623 google_play_adapter.cc:112] status code is not OK(200): 400
W0411 21:34:57.296880  3623 google_play_adapter.cc:126] failed to get google api access token: {"error":"invalid_grant","error_description":"Bad Request"}
W0411 21:34:57.297214  3623 google_play_adapter.cc:450] google play authentication failed: 1
W0411 21:34:57.297327  3623 google_play_adapter.cc:503] failed to refresh google api access token: google client id(~~.apps.googleusercontent.com)
W0411 21:34:57.297412  3623 billing_agent.cc:1229] failed to get google api access token: error(Funapi-Biller: wrong service provider authentication key(6)), session(85e88583-b80c-4702-bdec-5a907facfaf8(state: kCreated, client_id: ~~, gp_client_id:~~.apps.googleusercontent.com, gp_client_secret: ~~, gp_refresh_token: 4/~~))

대강 저런식으로 로그가 뜨는데요. 뭔가 메인 서버에 입력한 정보가 맞지 않아서 발생하는 것 같긴한데 구글쪽에서 refresh token 을 받아 오려할때,

https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/androidpublisher&response_type=code&access_type=offline&redirect_uri=...&client_id=...

부분에서 client_id 부분은 ~~.apps.googleusercontent.com 같은 값으로 넣어주는게 맞는것 같은데 redirect_uri 부분을 알수가 없네요. 혹시 이부분이 billing 서버의 특정 주소가 입력 되어야 하는건가요? 혹시 그렇다면 예시를 좀 부탁드려도 될지요?

미리 감사합니다. 좋은 하루 되세요!

2018-03-16 09:04:48 +0900 answered a question C++ 최신 표준 사용

C++ 11 / 14 / 17 기능을 모두 사용할 수 있는지는 컴파일러 버전에 따라 다릅니다. 그래서 현재 아이펀 엔진에 해당 플래그를 주시는 경우 다음과 같이 동작합니다.

  • GCC 5.0 미만인 경우: C++ 11 기능만 활성화합니다. (GCC 4.9 까지는 모든 C++14 기능이 들어가있지 않습니다; 또한 실험적으로 들어간 기능은 대부분 c++0x 플래그로 쓸 수 있습니다)
  • GCC 5.0 이상인 경우: C++ 11/14 기능을 활성화 합니다.

4월말 ubuntu 18.04 릴리즈 이후에는 해당 플랫폼에서 일부 C++17 기능이 활성화될 수 있습니다.

2018-03-07 09:20:34 +0900 answered a question Mysql 연결에서 col__Object_id를 가져오는 방법

해당 값은 BLOB인데 문자열로 가져오려고 해서 크래시합니다. 아이펀엔진에 포함된 ResultSet 인터페이스가 GetBlob 에 해당하는 부분이 없어서 현재는 col__Object_Id_ 를 바로 가져오지는 못합니다. 우회적으로 다음과 같이 해결할 수 있습니다.

  1. ORM을 사용해서 접근한 후, GetID 를 하면 boost::uuid 형식으로 object_id 를 반환합니다.
  2. SELECT 를 HEX(col__Object_Id_) 를 하면 GetString() 으로 가져올 수 있습니다.
2018-02-11 20:29:09 +0900 answered a question IFUN엔진 실행 관련 문의

해당 문제는 docker community edition 에서 생기는 문제입니다. 해결책은 두 가지가 가능합니다.

  1. Docker enterprise 에서는 해당 문제가 생기지 않습니다.

  2. 혹은, community 버전 지원 부분을 수정한 experimental 버전을 사용해서 해결할 수도 있습니다. https://ifunfactory.com/engine/docume... 를 참고해서 experimental 버전으로 재설치하면 됩니다.

2017-12-28 17:32:12 +0900 answered a question pong server 실행 시 leaderboard 연결 실패 오류 문의

sudo systemctl status funapi-leaderboard 로 현재 리더보드 실행 상태를 확인할 수 있습니다. 실행 중으로 나오는지 아니면 오류 상태인지 확인 부탁 드리겠습니다.

떠 있지 않다면 다음 부분에 대한 확인이 필요합니다.

  1. 데이터베이스가 정상적으로 설정되었는지 여부 (MANIFEST.json 에 있는 mysql_??? 설정 값으로 mysql 에 연결할 수 있는지를 mysql -ufunapi -p funapi_leaderboard 로 확인 부탁 드리겠습니다. (이 값은 퐁 게임 서버 readme 에 있는 값이고 다른 값으로 설정하셨다면 해당 값으로 확인해주세요)
  2. redis 가 설정되었는지 여부 (redis-cli 로 로컬 호스트에 있는 redis 서버에 연결되는지 확인하시면 됩니다.)
2017-12-26 13:38:14 +0900 answered a question pong server 빌드 오류 문의

/home/{user-name}/projects/game-pong-server 에서 다음과 같은 명령 실행 부탁 드리겠습니다.

ls -alht setup_build_environment

이 결과로 나오는 출력이

lrwxrwxrwx 1 user user 39 12 26 13:34 setup_build_environment -> /usr/bin/funapi_setup_build_environment

처럼 setup_build_environment -> /usr/bin/funapi_setup_build_environment 가 나온다면 문제가 없지만, 다른 형식으로 나온다면 문제가 생깁니다. 이 경우 아래 해결 방법을 사용해주시기 바랍니다.

다음 두 가지 방법 중 하나늘 사용해서 해결 할 수 있습니다.

  1. 리눅스 서버에서 직접 저장소 클론 (git clone https://github.com/iFunFactory/game-pong-server)
  2. setup_build_environment 경로 수정 (ln -sf /usr/bin/funapi_setup_build_environment setup_build_environment)

두 방법 중 하나를 택해서 진행하시면 됩니다.

2017-12-19 09:09:59 +0900 answered a question 버전 2525 로 업하고 나서 에러 문의

해당 부분은 무시하셔도 됩니다.

이미 사용 중이더라도, 버전 업 후에는 해당 버전에 대한 사용이 허용되는지 알 수 없어서 해당 오류 메시지가 출력됩니다.

2017-12-18 17:59:08 +0900 answered a question 서버 실행 후, 실행을 중단하는건 어떻게 해야 하나요?

빌드한 디렉터리에서 ./projectname-local 로 실행하셨다면, ctrl + c 를 눌러서 종료하시면 됩니다.

2017-09-26 16:59:04 +0900 received badge  Supporter (source)
2017-05-15 20:27:07 +0900 answered a question Protobuf 사용시 에러

프로젝트 이름이 hello 라면 다음과 같이 입력해주시면 됩니다.

using hello_messsages;
2017-03-27 11:56:39 +0900 answered a question VS remote 디버깅..

WIndows 위에 Virtualbox 위에 Docker로 엔진을 구동한다고 이해했습니다. (이 부분이 틀리면 얘기해주세요)

  1. GDB가 docker안에서 동작하나요 혹은 Virtualbox 안에서 바로 동작하나요?
  2. GDB가 docker안에서 동작하려면 해당 컨테이너는 추가 권한을 가지고 실행해야 합니다. (--privileged 혹은 --cap_add 를 써야 합니다. 후자의 경우 필요한 권한을 각각 나열할 필요가 있습니다.)

해당 사항에 대해서 확인 부탁 드립니다.

2017-03-20 14:19:18 +0900 answered a question 게임 서버 배포 문의.

서버 개발환경이 Ubuntu 14.04 인지 16.04 인지 알 수 있을까요?

cat /etc/lsb-release

해서 나오는 출력을 보시면 확인할 수 있습니다.

Ubuntu 16.04의 경우 upstart가 없어져서 위 명령으로 서비스를 띄울 수 없습니다.

2017-02-22 18:50:39 +0900 edited question fun::Json 문의입니다.

안녕하세요.

현재 안전하게 Json내 데이터에 접근하려면 Json의 함수를 두번 호출해야되서 불편한점이 있습니다. 현재는 아래처럼 사용중입니다.

Json json_value;
// ...
if (json_value.HasAttribute("AttrName")) {
    Json attr_value = json_value["AttrName"];
}

기존에는 rapidjson::GenericValue 에는 FindMember 함수가 있어서 한번의 함수 호출로 위의 구현을 할 수 있었습니다. rapidjson::GenericValue을 private로 계승하다보니 FindMember 함수에 접근을 할 수가 없네요.

안전하게 Json의 멤버에 접근할 수 있는 다른 방법이 있을까요? 아니면 혹시 rapidjson::GenericValue 을 public으로 계승하도록 변경하는 것은 어떨까요?

감사합니다.

2017-01-18 15:05:23 +0900 received badge  Enthusiast
2016-12-27 12:06:21 +0900 answered a question Github에 있는 PONG 게임 서버 예제 실행 관련..

위 내용을 보면 로그 중간에,

I1227 02:21:15.104840 19208 object_database.cc:529] The object model has been changed: shard id: ffffffff-ffff-ffff-ffff-ffffffffffff, db fingerprint: e20216d120c1356d0e5e416f39499126, model fingerprint: f313433d956c2cb512c8b2baf2e5de6
F1227 02:21:15.105386 19208 object_database.cc:860] Mismatches object_model=User, table_name=tb_Key_User_Id, column_name=col_Id, expected_model_column_type=CHAR(12), mismatched_db_column_type=char(16)

처럼 호환안되는 형식의 ORM 정의 변환이 있습니다.

데이터베이스 테이블 정의를 강제로 바꿀 수 없는 경우, 해당 지점에서 동작을 멈추게 됩니다.

두 예제가 같은 MySQL 데이터베이스 테이블을 사용하는 것으로 보이는데요, 새 데이터베이스를 생성한 후 해당 데이터로 MANIFEST.json 을 수정해주시면 정상적으로 쓸 수 있습니다.

https://ifunfactory.com/engine/docume... 의 내용을 확인하시고, db_mysql_database 값을 새 데이터베이스로 변경해주시면 됩니다.

2016-12-27 12:02:17 +0900 edited question Github에 있는 PONG 게임 서버 예제 실행 관련..

안녕하세요.

github에 올라와있는 pong 게임이나 duck 게임 등 예제들을 서버 부분 유니티 클라이언트 부분 모두 올려서 클라이언트의 코드와 서버의 코드를 비교해 보며 익혀보려 하는데요. pong 게임 서버를 돌림에 있어 기본적으로 설정해줘야 하는 값들이 있는지요..? Github 에서 내려받은 후에 AWS에서 프리티어로 구축한 ubuntu 14.04 서버에 기존에 튜토리얼 단계를 진행하여 Hello World 까지 출력해본 서버에 내려받은 프로젝트를 올리고 빌드도 성공하였는데 서버 실행하면 실행되다가 도중에 꺼지는 것 같네요?

[INFO] pong_server@ip-172-31-11-13 is starting.
I1227 02:21:15.070350 19208 main.cc:506] Engine version: 1.0.0-1904trusty
I1227 02:21:15.070657 19208 main.cc:512] Command line arguments: [pong_server.default]
I1227 02:21:15.070703 19208 main.cc:513] Server flavor: default
I1227 02:21:15.070848 19208 main.cc:526] Crashreporter initialized; .dmp will be written to /home/ubuntu/game-pong-example/pong-build/debug/dum
ps
I1227 02:21:15.081960 19208 main.cc:541] License info: {"production":true,"expires":"2017-Jun-16 23:59:59"}
I1227 02:21:15.088501 19208 manifest_handler.cc:663] libpong.so loaded.
I1227 02:21:15.088963 19208 manifest_handler.cc:713] Initializing IoService
I1227 02:21:15.089156 19208 manifest_handler.cc:713] Initializing RawTimer
I1227 02:21:15.089239 19208 manifest_handler.cc:713] Initializing Logging
I1227 02:21:15.089438 19208 manifest_handler.cc:713] Initializing HardwareInfo
I1227 02:21:15.089679 19208 hardware_info.cc:140] Found non-loopback AF_INET NIC: eth0, 172.31.11.13/255.255.240.0, 02:1e:13:54:e4:8b
I1227 02:21:15.089753 19208 hardware_info.cc:264] Trying to resolve an external IP through AWS API
I1227 02:21:15.089792 19208 hardware_info.cc:168] Invoking RESETful API: http://169.254.169.254/latest/meta-data/public-ipv4/
I1227 02:21:15.092211 19208 hardware_info.cc:321] Resolved an external IP: 52.78.133.122 (aws)
I1227 02:21:15.092272 19208 manifest_handler.cc:713] Initializing RandomGenerator
I1227 02:21:15.092320 19208 manifest_handler.cc:713] Initializing AppInfo
I1227 02:21:15.092372 19208 manifest_handler.cc:713] Initializing WallClock
I1227 02:21:15.092406 19208 manifest_handler.cc:713] Initializing ZookeeperClient
I1227 02:21:15.092486 19208 manifest_handler.cc:713] Initializing RpcService
I1227 02:21:15.092624 19208 rpc_service.cc:1427] Using NIC 'eth0' for RPC
I1227 02:21:15.092748 19208 manifest_handler.cc:713] Initializing ObjectDirectoryService
I1227 02:21:15.092842 19208 manifest_handler.cc:713] Initializing Object
I1227 02:21:15.093029 19208 object_database.cc:729] key shard: address(tcp://127.0.0.1:3306), id(funapi), database(funapi)
I1227 02:21:15.093072 19208 object_database.cc:733] object shard: range(00000000-0000-0000-0000-000000000000~ffffffff-ffff-ffff-ffff-ffffffffff
ff), address(tcp://127.0.0.1:3306), id(funapi), database(funapi)
I1227 02:21:15.093214 19208 manifest_handler.cc:713] Initializing EventDispatcher
I1227 02:21:15.094110 19229 event_queue.cc:227] the event thread has been started.
I1227 02:21:15.094166 19208 manifest_handler.cc:713] Initializing ApiService
I1227 02:21:15.095088 19208 api_service.cc:426] Registered API: GET /v1/
I1227 02:21:15.095147 19208 manifest_handler.cc:713] Initializing CounterService
I1227 02:21:15.095191 19208 api_service.cc ...
(more)
2016-12-12 15:10:55 +0900 asked a question UE4 dedicated server

어떻게 띄우나요?

ㅁㄴㅇㄹ

2016-12-12 15:08:00 +0900 asked a question UE4 Dedicaqted server

...

asdf

asdf

2016-12-12 15:05:36 +0900 asked a question 언리얼 엔진 데디케이티드 서버는 어떻게 띄우나요?

테스트 테스트 테스트.

 으아아아
2016-12-12 14:58:48 +0900 received badge  Organizer (source)
2016-12-12 14:58:33 +0900 edited question Socket [127.0.0.1:2181] zk retcode=-7, errno=110 에러 관련(2016-10-28, david_yoo)

12:54:16,799:26874(0x7f52263d6700):ZOO_ERROR@handle_socket_error_msg@1643: Socket [127.0.0.1:2181] zk retcode=-7, errno=110(연결 시간 초과): connection to 127.0.0.1:2181 timed out (exceeded timeout by 6897ms) I1028 12:54:16.815192 26922 zookeeper_client.cc:773] The zookeeper session has disconnected and is recoverable. Trying to reconnect to Zookeeper: session_id=0x157f169691a0014 E1028 12:54:16.826941 26920 object_directory_service.cc:1977] Failed to read external object lock requests: zerror=operation timeout

서버를 계속 켜놨는데 가끔 이렇게 튕기면서 서버가 꺼지네요.. 원인이 어떤건가요? 그리고 지난번에 cocos 2dx 암호화된 샘플 이랑 서버 샘플 올려주신다고 했는데 올라와있는건가요?

2016-12-12 14:58:33 +0900 received badge  Editor (source)