Ask Your Question

Seunghyun's profile - activity

2019-03-12 15:12:11 +0900 commented answer orm 관련해서 문의드립니다.

네 맞습니다.

Character 에 다른 Attribute 들이 많이 늘어날 게 예상되시면 별도의 NickName 모델을 만드시는 게 좋습니다.

2019-03-12 14:53:33 +0900 commented answer orm 관련해서 문의드립니다.

안녕하세요. https://answers.ifunfactory.com/quest... 참고 부탁드립니다.

감사합니다.

2019-03-12 14:52:10 +0900 edited answer orm 관련해서 문의드립니다.

ORM 관련해서 추가 질분 드립니다. 현재 모델 구조가 아래와 같다면,

"Account" : { "id" : "String(64) KEY", "Character": "Character Foreign" }, 
"Character": { "NickName": "String(64) KEY",  "Level": "Integer32" , "Exp": "Integer64" }

사용중인 DB 정보에서 NickName만 새로 변경해야 할 경우 로직적으로 어떤 작업이 필요한지 문의 드립니다.

2019-02-18 14:07:53 +0900 answered a question 매치메이킹 관련 문의 드립니다.

안녕하세요. 아이펀팩토리입니다.

MatchmakingClient 를 통해 전달된 사용자 정의 Context 는 MatchmakingServer 의 context["user_data"] 로 위치가 변경되었습니다.

CheckJoinable 함수에서

 int64_t player_level = player.context["user_data"]["player_level"].GetInteger();

로 수정 부탁드립니다.

해당 수정이 업데이트 Changelog 및 레퍼런스 문서, Poing Game 예제에 반영이 누락된 것을 확인 하였습니다. 번거롭게 해드려 죄송합니다. 곧 업데이트 하도록 하겠습니다.

감사합니다.

2018-12-13 11:49:43 +0900 commented answer 타이머 관련해서 문의드립니다.

Tag 를 무작위 값을 주시면됩니다. 이벤트 스레드 수 만큼 병렬로 실행됩니다.

EventTag tag = RandomGenerator::GenerateUuid();

Timer::ExpireAfter(..., tag);

2018-12-13 11:20:39 +0900 commented answer 타이머 관련해서 문의드립니다.

네 맞습니다. (Tag 인자를 생략하면 기본 값 Tag 를 사용하게 됩니다.)

2018-12-13 10:29:39 +0900 answered a question 타이머 관련해서 문의드립니다.

안녕하세요. 아이펀팩토리입니다.

타이머 핸들러는 이벤트 스레드에서 실행됩니다.

타이머 핸들러들은 타이머를 등록하는 Timer::Expire*(...) 함수의 Tag 인자별로 직렬화 되어 실행됩니다. 같은 Tag 값을 사용하는 타이머 핸들러는 순차적으로 실행됩니다. 만약 앞서 실행된 핸들러 함수가 오랫동안 끝나지 않으면 뒤에 실행될 타이머 핸들러들의 실행이 그 만큼 지연되게 됩니다.

별도로 Tag 인자 값을 지정하지 않으셨다면 모두 동일한 기본 값을 사용하게 되어 순차적으로 실행되게 됩니다.

감사합니다.

2018-12-10 17:44:29 +0900 commented answer ORM 오브젝트 관련 문의 드립니다.

네 맞습니다. 조회 목적의 Query 를 실행하신다면 적절한 Index 를 직접 추가하시면 됩니다.

2018-11-20 10:49:25 +0900 commented answer 패키징 시 MANIFEST 설정 문의

MANIFEST 의 인자가 Json Object 또는 Array 가 아닌 Primitvie 타입(bool, int, double 등) 인 경우 아래와 같이 읽을 수 있습니다.

DECLARE_uint64(api_service_port);

void Example() {
  LOG(INFO) << "ApiService Port=" << FLAGS_api_service_port;
}
2018-11-19 18:20:43 +0900 answered a question 패키징 시 MANIFEST 설정 문의

안녕하세요. 아이펀팩토리입니다.

서비스가 아니라 생성되는 런처 스크립트를 이용하여 실행하신다면 "{ProjectName}-local -api_service_port=1234" 와 같이 실행 인자로도 지정하실 수 있습니다.

감사합니다.

2018-10-16 11:50:20 +0900 answered a question Flavor 구성시 서버 이동 관련 문의 드립니다.

안녕하세요. 아이펀팩토리입니다.

서버 이동은 AccountManager::RedirectClient() 이용을 권장드립니다.

Redirect 된 후 flavor 를 알아내는 방법은 아래 링크 참고 부탁드립니다. https://www.ifunfactory.com/engine/do...

감사합니다.

2018-10-08 15:10:22 +0900 answered a question col__Object_id 질문입니다.

안녕하세요. 아이펀팩토리입니다.

col__Object_id 는 Uuid 값으로 무작위로 생성됩니다. 무작위로 생성하더라도 중복이 발생할 확률이 매우 낮아 중복이 없다고 가정하고 쓰셔도 됩니다.

감사합니다.

2018-07-24 11:26:46 +0900 commented answer 서버가 가끔 crash나는 현상이 발생합니다.

추후 다시 올려주시면 확인해보도록 하겠습니다. 감사합니다.

2018-07-23 09:24:30 +0900 answered a question 서버가 가끔 crash나는 현상이 발생합니다.

안녕하세요.

아이펀팩토리입니다.

확인을 위해 올려주신 로그 위쪽으로 50여줄도 올려주실 수 있으실지요?

감사합니다.

2018-05-24 12:30:15 +0900 edited answer 변경 가능한 닉네임 구현 문의

아래와 같은 방법으로 구현할 수 있습니다.

모델 정의

{
  "Nickname": {
    "Nickname": "String(12) Key",
    "User": "User Foreign"
  },
  "User": {
    "Id": "String(12) Key",
    "Nickname": "String(12)",
    ...
  },
  ...
}

닉네임 설정

string id = ...;
string new_nickname = ...;

Ptr<User> user = User::FetchById(id);

// 새 닉네임 생성
Ptr<Nickname> nickname = Nickname::Create(new_nickname);
if (not nickname) {
  // 이미 사용 중
  return;
}

// 기존 닉네임 제거
Ptr<Nickname> old_nickname = Nickname::FetchByNickname(user->GetNickname());
if (old_nickname) {
  old_nickname->Delete();
}

// 새 닉네임 할당
user->SetNickname(new_nickname);
nickname->SetUser(user->Id());
2017-12-28 15:58:22 +0900 answered a question pong server 실행오류 문의

NIC 은 정상적으로 인식 되어 있습니다. pong-source/src/MANIFEST.lobby.json 에서 RpcService 의 rpc_nic_name 값을 빈 문자열 값 "" 로 해주시거나, NIC 이름으로 변경하면 해결될 것으로 보입니다.

2017-12-28 15:12:28 +0900 commented answer pong server 실행오류 문의

리눅스 터미널에서 ifconfig 명령으로 확인할 수 있습니다. 이 명령 수행 후 출력되는 내용을 보여주실 수 있을까요?

2017-12-28 08:51:43 +0900 answered a question pong server 실행오류 문의

안녕하세요. 아이펀팩토리입니다.

Pong Server 를 실행하는 기계에 NIC(Network Interface Controller) 이 하나 이상인지 확인 부탁드립니다. Pong Server 는 아이펀엔진의 RpcService 를 이용하고 있는데, 이 기능은 NIC 이 없으면 작동하지 않습니다.

감사합니다.

2017-12-22 17:54:14 +0900 answered a question pong server 빌드 오류 문의

안녕하세요. 아이펀팩토리입니다.

  1. pong soruce 를 복사한 경로
  2. 빌드하실 때 입력하신 명령어 및 빌드 명령어를 실행한 경로

를 알려주실 수 있을까요?

2017-12-20 23:15:13 +0900 received badge  Famous Question (source)
2017-12-19 08:52:24 +0900 commented answer 튜토리얼 진행 중 DB 기능 활성화하기에 대한 질문이 있습니다.

재설치는 MySQL 이나 MariaDB 를 재설치를 말씀드린 것이며, root 계정 비밀번호를 다시 설정하기 위함입니다. DB root 계정의 비밀번호는 OS 의 것이 아니라 DB 계정입니다.

2017-12-18 18:23:44 +0900 commented answer 튜토리얼 진행 중 DB 기능 활성화하기에 대한 질문이 있습니다.

입력된 DB root 계정의 비밀번호가 틀린 것으로 예상되는데요, 비밀번호가 맞는지 확인 부탁드립니다. 비밀번호를 잊어버리셨거나, 해결되지 않으면 재설치하여 비밀번호를 다시 설정 부탁드립니다.

2017-12-18 18:12:17 +0900 answered a question 튜토리얼 진행 중 DB 기능 활성화하기에 대한 질문이 있습니다.

안녕하세요. 아이펀팩토리입니다.

MariaDB, MySQL 상관 없이 둘 중 하나를 설치하시면 됩니다.

감사합니다.

2017-10-27 14:55:06 +0900 commented answer aws s3 사용 문의

만약 src/CMakeLists.txt 에 추가했는데도 그렇다면 CMakeLists.txt 와 src/CMakeLists.txt 를 seunghyun@ifunfactory.com 으로 보내주실 수 있을까요?

2017-10-27 14:53:30 +0900 commented answer aws s3 사용 문의

src/CMakeLists.txt 에 추가하신 게 맞는지요?

2017-10-27 11:47:50 +0900 commented answer aws s3 사용 문의
  1. "g++ --version" 명령의 결과를 공유해 주시면 감사하겠습니다.
  2. CMakeLists.txt 의 가장 아래에 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-pedantic") 를 추가하여 해결되는지 확인 부탁드립니다.

감사합니다.

2017-10-26 17:25:35 +0900 answered a question aws s3 사용 문의

안녕하세요. 아이펀팩토리입니다.

빌드 에러 발생 시 출력된는 내용을 올려 주실 수 있으신지요?

2017-09-26 10:29:47 +0900 received badge  Famous Question (source)
2017-09-26 10:29:47 +0900 received badge  Popular Question (source)
2017-09-26 10:29:47 +0900 received badge  Notable Question (source)
2017-09-22 09:38:41 +0900 answered a question 복합키와 계정 ID 변경(계정 플랫폼 연동)은 어떻게 해야하나요?
  1. ID 와 ID 를 소유한 플랫폼을 표현하기 위해 두 가지 키가 필요한데 이 것을 복합키로 만들 수 없나요? => 아이펀엔진의 ORM 은 하나의 오브젝트가 둘 이상의 다른 종류의 키를 만들 수 있지만 복합키와 같이 작동하지는 않습니다. 각각 개별적으로의 유일성만 보장됩니다. 하지만 아래 설명된 방법으로 복합키 없이 구현할 수 있습니다.

  2. 게스트 계정을 나중에 Facebook 같은 플랫폼 계정으로 연동하려는데 어떻게 해야하나요? ID 는 Key 라서 변경이 안돼서요 => 아래와 같이 구현할 수 있습니다.

오브젝트 모델 예제

// Platform 계정을 표현
"GuestAccount": {
  "Id": "String(50) Key",
  "Account": "Account"
},
"FacebookAccount": {
  "Id": "String(50) Key",
  "Account": "Account"
},
"TwitterAccount": {
  "Id": "String(50) Key",
  "Account": "Account"
},


// 실제 계정을 표현
"Account": {
  "Cash": "Integer",
  "RegisterDate": "Integer",
  ... // 기타 계정 데이터
}

서버 코드 예제

// Guest 계정을 생성
void OnCreateGuestAccount(const Ptr<session> &session, ...) {
  const string guest_id = ...;  // client 에서 받은 message 에서 읽는다.

  // GuestAccount 생성
  Ptr<guestaccount> guest_account = GuestAccount::Create(guest_id);

  // Account 생성
  Ptr<account> account = Account::Create();

  // GuestAccount -> Account 연결
  guest_account->SetAccount(account);

  // Account 의 기본 값 설정 등 나머지 처리
  account->SetCash(100);
  account->SetRegisterDate(WallClock::GetTimestampInSec());
  ...
}


// Guest 계정을 Facebook 계정으로 연동
void OnCreateFacebookAccountFromGuestAccount(const Ptr<session> &session, ...) {
  const string guest_id = ...;     // client 에서 받은 message 에서 읽는다.
  const string facebook_id = ...;  // client 에서 받은 message 에서 읽는다.

  // Facebook Id 에 대한 인증은 AuthenticationService 로 수행하며,
  // 이 예제에선 생략

  // Guest 계정 불러오기
  Ptr<guestaccount> guest_account = GuestAccount::FetchById(guest_id);
  if (not guest_account) {
    // 존재하지 않는 Guest 계정에 대한 예외처리
    return;
  }

  // Facebook 계정 만들기
  Ptr<facebookaccount> facebook_account = FacebookAccount::Create(facebook_id);
  if (not facebook_account) {
    // 이미 존재하는 Facebook 계정에 대한 예외처리
    return;
  }

  // GuestAccount 로 실제 Account 를 가져온다
  Ptr<account> account = guest_account->GetAccount();

  // GeustAccount 와 Account 의 연결을 끊고, GuestAccount 를 삭제한다.
  guest_account->SetAccount(Account::kNullPtr);
  guest_account->Delete();

  // FacebookAccount 에 Account 를 연결한다.
  facebook_account->SetAccount(account);

  // 기타 나머지 처리
  ...
}

감사합니다.

2017-09-22 09:34:07 +0900 asked a question 복합키와 계정 ID 변경(계정 플랫폼 연동)은 어떻게 해야하나요?
  1. ID 와 ID 를 소유한 플랫폼을 표현하기 위해 두 가지 키가 필요한데 이 것을 복합키로 만들 수 없나요?
  2. 게스트 계정을 나중에 Facebook 같은 플랫폼 계정으로 연동하려는데 어떻게 해야하나요? ID 는 Key 라서 변경이 안돼서요
2017-09-05 10:35:41 +0900 answered a question Protobuf 메시지 파일 추가

안녕하세요. 아이펀팩토리입니다.

src/CMakeLists.txt 파일에 다음 내용이 있습니다.

set(                                                                            
  ADDITIONAL_PROTO_SOURCES                                                      
  ${PROJECT_NAME}_rpc_messages.proto                                            
  ${PROJECT_NAME}_messages.proto                                                
)                                                                               

여기에 추가하시면 됩니다. 예를 들어 my_messages_inven.proto 를 추가하신다면 이렇습니다.

set(                                                                            
  ADDITIONAL_PROTO_SOURCES                                                      
  ${PROJECT_NAME}_rpc_messages.proto                                            
  ${PROJECT_NAME}_messages.proto
  my_messages_inven.proto                                                 
)                                                                               

감사합니다.

2017-08-29 15:20:52 +0900 received badge  Commentator
2017-08-29 15:20:52 +0900 commented answer dump as json

안녕하세요. 아이펀팩토리입니다.

아직 C# 버전에서는 ORM 오브젝트를 JSON 으로 Dump 하는 기능은 지원하고 있지 않습니다. 빠른 시일내에 업데이트 하도록 하겠습니다.

답변이 늦어 죄송합니다.

감사합니다.

2017-08-16 14:42:48 +0900 answered a question guid를 이용한 create

안녕하세요. 아이펀팩토리입니다.

Create() 함수로 전달되는 Key 값은, 해당 이벤트에서 생성하는 난수 값을 쓰시면 안됩니다. (롤백 후 다시 실행될 때 값이 매번 바뀌어 계속 롤백하게 됩니다.)

  1. Guid.NewGuid() 대신 funapi.RandomGenerator.GenerateUuid() 함수를 쓰시면 롤백 후 다시 실행될 때 같은 값을 반환하기 때문에 위 문제가 해결됩니다.

  2. 하지만 그 것 보다 "OnAddUserPlayer()" 함수에서 Guid 를 만들고 새로운 Event 함수에서 UserPlayer.Create() 함수를 호출하는 것을 더 권장합니다.(Guid 를 만든 후 Event.Invoke() 로 새 이벤트를 실행해 UserPlayer 를 만드는 것입니다.)

답변이 늦어 죄송합니다.

감사합니다.

2017-07-12 12:28:12 +0900 answered a question unique id 생성 관련

안녕하세요. 아이펀팩토리입니다.

꼭 Integer 값이어야 하고, Increment 되어야 한다면 말씀하신 방법도 좋습니다.

그렇지 않고 UUID 값도 괜찮다면

RandomGenerator::GenerateUuid()
함수로 생성하거나, 또는 계정이나 캐릭터 Object 등의 ID 값(UUID) 를 쓰시는 것도 방법이 될 수 있습니다.

감사합니다.

2017-07-04 18:15:39 +0900 commented answer mysql json 값 가지고 오기 문의.

혹시 생각해 두신 MySQL Binary 타입에 대응되는 JSON 타입이 있으신지요?

2017-07-04 15:40:20 +0900 answered a question mysql json 값 가지고 오기 문의.

안녕하세요. 아이펀팩토리입니다.

아이펀엔진의 MySQL Connector 는 아직 MySQL 5.7.8 의 JSON Data Type 을 지원하지 않습니다. 지원할 수 있는지 내부 검토를 해보도록 하겠습니다.

아래 코드는 ResultSets 에서 Row 를 JSON 으로 변경하는 예제입니다.

감사합니다.

Json ToJson(const Ptr<resultsets> &rs) {                                        
  Json json;                                                                    
  json.SetObject();                                                             

  size_t col_count = rs->GetColumnCount();                                      
  for (size_t i = 0; i < col_count; ++i) {                                      
    string col_name = rs->GetColumnName(i);                                     
    enum_field_types col_type = rs->GetColumnType(i);                           
    switch (type) {                                                             
      // null                                                                   
      case MYSQL_TYPE_NULL: {                                                   
        json[col_name].SetNull();                                               
        break;                                                                  
      }                                                                         
      // integer                                                                
      case MYSQL_TYPE_NEWDECIMAL:                                               
      case MYSQL_TYPE_DECIMAL:                                                  
      case MYSQL_TYPE_BIT:                                                      
      case MYSQL_TYPE_TINY:                                                     
      case MYSQL_TYPE_SHORT:                                                    
      case MYSQL_TYPE_LONG:                                                     
      case MYSQL_TYPE_NULL:                                                     
      case MYSQL_TYPE_LONGLONG:                                                 
      case MYSQL_TYPE_INT24: {                                                  
        json[col_name] = rs->GetInt(i);                                         
        break;                                                                  
      }                                                                         
      // double                                                                 
      case MYSQL_TYPE_FLOAT:                                                    
      case MYSQL_TYPE_DOUBLE: {                                                 
        json[col_name] = rs->GetDouble(i);                                      
        break;                                                                  
      }                                                                         
      // string                                                                 
      case MYSQL_TYPE_VARCHAR:                                                  
      case MYSQL_TYPE_TINY_BLOB:                                                
      case MYSQL_TYPE_MEDIUM_BLOB:                                              
      case MYSQL_TYPE_LONG_BLOB:                                                
      case MYSQL_TYPE_BLOB:                                                     
      case MYSQL_TYPE_VAR_STRING:                                               
      case MYSQL_TYPE_STRING: {                                                 
        json[col_name] = rs->GetString(i);                                      
        break;                                                                  
      }                                                                         
      // datetime                                                               
      case MYSQL_TYPE_DATE:                                                     
      case MYSQL_TYPE_DATETIME: {                                               
        json[col_name] = WallClock::GetTimestring(rs->GetDateTime(i));          
        break;                                                                  
      }                                                                         
      // time                                                                   
      case MYSQL_TYPE_TIME: {                                                   
        json[col_name] = boost::lexical_cast<string>(rs->GetDate(i));           
        break;                                                                  
      }                                                                         
      default: {                                                                
        LOG(FATAL) << "Unexpected type: " << col_type;                          
        break;                                                                  
      }                                                                         
    }                                                                           
  }                                                                             

  return json;                                                                  
}      
2017-07-03 12:40:22 +0900 answered a question 퐁서버c# 빌드중에 오류입니다.

안녕하세요. 아이펀팩토리입니다.

올려주신 빌드 오류 로그만 가지고는 정확히 파악하기는 어려울 듯 합니다. 아래 방법들로 해결되지 않을 경우 src/pongcs_server.cc 파일을 올려주시면 해결이 수월할 듯 합니다.

  1. 아이펀엔진(funapi1-dev)이 설치되어 있지 않으면 발생할 수 있습니다. 설치 여부를 확인 부탁드립니다.

  2. C# 을 지원하지 않는 Stable 버전이 설치 되어있으면 Experimental 버전으로 설치 부탁드립니다. https://www.ifunfactory.com/engine/do...

감사합니다.

2017-07-03 12:25:27 +0900 edited question 퐁서버c# 빌드중에 오류입니다.

퐁서버 c# 빌드중 아래와 같은 오류가 났는데요. src폴더 쪽에서 에러나는거 보니 뭔가 누락된게 아닌가싶어요. c++은 잘 몰라서 어떻게든 아는 지식내로 해결해보려 했는데 잘 모르겠습니다. ㅜㅜ 확인 부탁드릴게요.

 [ 26%] Built target internal_import_manifest_dirs
[ 35%] Built target internal_import_resource_dirs
[ 38%] Building CXX object src/CMakeFiles/pongcs.dir/pongcs_server.cc.o
/home/baejh-3/game-pong-server-csharp-master/pongcs-source/src/pongcs_server.cc: In static member function ‘static bool {anonymous}::PongcsServer::Install(const fun::ArgumentMap&)’:
/home/baejh-3/game-pong-server-csharp-master/pongcs-source/src/pongcs_server.cc:30:57: error: ‘InstallMonoServer’ was not declared in this scope
     if (not InstallMonoServer("Pongcs.Server", arguments)) {
                                                         ^
/home/baejh-3/game-pong-server-csharp-master/pongcs-source/src/pongcs_server.cc: In static member function ‘static bool {anonymous}::PongcsServer::Start()’:
/home/baejh-3/game-pong-server-csharp-master/pongcs-source/src/pongcs_server.cc:38:29: error: ‘StartMonoServer’ was not declared in this scope
     if (not StartMonoServer()) {
                             ^
/home/baejh-3/game-pong-server-csharp-master/pongcs-source/src/pongcs_server.cc: In static member function ‘static bool {anonymous}::PongcsServer::Uninstall()’:
/home/baejh-3/game-pong-server-csharp-master/pongcs-source/src/pongcs_server.cc:45:33: error: ‘UninstallMonoServer’ was not declared in this scope
     if (not UninstallMonoServer()) {
                                 ^
make[2]: *** [src/CMakeFiles/pongcs.dir/pongcs_server.cc.o] 오류 1
make[1]: *** [src/CMakeFiles/pongcs.dir/all] 오류 2
make: *** [all] 오류 2
2017-06-26 09:03:50 +0900 edited answer 안녕하세요? 퐁서버 실행시 오류가 나는데요. 확인 부탁드릴게요.^^

음.. 이에러는 네트워크디바이스 이름이 'ens32'으로 되어있던것을 'eth0'으로 바꾸니 해결된 듯 한대요. 새로운 에러가 뜹니다.. ㅜㅜ 아래에 로그내용입니다. autheticator와 리더보드는 설치하고 샐행 해놓은 상태입니다.

aLog file created at: 2017/06/25 17:11:06
Running on machine: ifun
Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
I0625 17:11:06.856892  4025 main.cc:575] Engine version: 1.0.0-2144xenial
I0625 17:11:06.860296  4025 main.cc:581] Command line arguments: [pongcs_server.lobby]
I0625 17:11:06.860361  4025 main.cc:582] Server flavor: lobby
I0625 17:11:06.860473  4025 main.cc:596] Crashreporter initialized; .dmp will be written to /root/my-server-src/project-pong/game-pong-server/pongcs-build/debug/dumps
I0625 17:11:06.871268  4025 main.cc:612] License info: {"production":true,"expires":"2018-Jun-30 23:59:59"}
I0625 17:11:06.879022  4025 manifest_handler.cc:665] libpongcs.so loaded.
I0625 17:11:06.879545  4025 main.cc:662] Loading Mono runtime and managed app: mono_dll_path=/root/my-server-src/project-pong/game-pong-server/pongcs-source/mono/bin/Debug/Pongcs.dll
I0625 17:11:06.897527  4025 runtime.cc:146] Mono assembly loaded: Pongcs, Version=1.0.6382.30228
I0625 17:11:06.897716  4025 runtime.cc:146] Mono assembly loaded: protobuf-net, Version=2.0.0.668
I0625 17:11:06.897882  4025 runtime.cc:146] Mono assembly loaded: funapi, Version=1.0.6372.37359
I0625 17:11:06.900147  4025 runtime.cc:146] Mono assembly loaded: Newtonsoft.Json, Version=9.0.0.0
I0625 17:11:06.900305  4025 runtime.cc:120] Mono assembly loaded: mscorlib, Version=4.0.0.0
I0625 17:11:06.900614  4025 runtime.cc:120] Mono assembly loaded: System, Version=4.0.0.0
I0625 17:11:06.912540  4025 manifest_handler.cc:715] Initializing IoService
W0625 17:11:06.912855  4025 io_service.cc:62] 'IoService/io_service_threads_size' is deprecated. Use 'SessionService/network_io_threads_size' instead.
I0625 17:11:06.914289  4025 manifest_handler.cc:715] Initializing RawTimer
I0625 17:11:06.914381  4025 manifest_handler.cc:715] Initializing HardwareInfo
I0625 17:11:06.914711  4025 hardware_info.cc:140] loop-back 이 아닌 AF_INET 형태의 네트워크 카드를 찾았습니다: eth0, 192.168.111.130/255.255.255.0, 00:0c:29:28:c3:aa
I0625 17:11:06.914805  4025 hardware_info.cc:264] AWS API 를 통해 공인 IP 주소를 얻어내고 있습니다.
I0625 17:11:06.914849  4025 hardware_info.cc:168] RESETful API 롤 호출합니다: http://169.254.169.254/latest/meta-data/public-ipv4/
W0625 17:11:08.919112  4025 hardware_info.cc:183] AWS 의 API 를 호출하는데 실패했습니다. 스킵합니다.Timeout was reached
I0625 17:11:08.919575  4025 hardware_info.cc:267] 네트워크 카드로부터 공인 IP 주소를 얻어내고 있습니다.
I0625 17:11:08.919853  4025 hardware_info.cc:321] 공인 IP 주소를 얻어냈습니다: 192.168.111.130 (nic:eth0)
W0625 17:11:08.920030  4025 hardware_info.cc:325] 지정된 방법으로 공인 IP 를 얻어냈으나, 이 주소는 사설 IP 주소입니다. 만일 내부 테스트를 위해서 내부 네트워크에서 서버를 돌리고 있는 경우라면 문제가 없겠지만, 외부로부터 클라이언트 접속을 받아야되는 경우라면 해당 주소를 이용해서 클라이언트가 접속할 수 없습니다.
I0625 ...
(more)
2017-06-26 09:03:41 +0900 commented answer 안녕하세요? 퐁서버 실행시 오류가 나는데요. 확인 부탁드릴게요.^^

안녕하세요.

말씀하신 것처럼 게임 서버가 구동되지 않는 것은 리더보드와 연결되지 않아서 그런 것입니다.

올려주신 리더보드 로그가 구동 직후의 내용이 없어 정확히 확인은 안되지만, Database 와 연결에 문제가 있는 것은 아닌지요? 아니라면 리더보드 구동 직후 로그를 올려주시면 도움이 될 듯 합니다.

감사합니다.

2017-06-23 09:58:35 +0900 answered a question 안녕하세요? 퐁서버 실행시 오류가 나는데요. 확인 부탁드릴게요.^^

안녕하세요. 아이펀팩토리입니다.

만약 주키퍼를 설치하지 않으셨다면 주키퍼 연결에 실패하여 그럴 수 있습니다. 이 경우 주키퍼를 로컬에 설치하시면 해결됩니다.

또는 올려주신 로그 위에 혹시 아래와 같은 로그가 없는지요?

...
F0623 09:33:25.211426  4685 leaderboard_client.cc:459] failed to connect to leaderboard
...
또는
...
F0623 09:51:29.223446  4921 authentication_client.cc:150] failed to connect to authenticator
...

퐁 서버 예제는 랭킹과 유저 로그인 인증 처리를 위해 아이펀엔진의 Leaderboard, Authenticator Agent 서버를 필요로 합니다. 서버가 구동될 때 위 두 Agent 서버에 접속하는데 두 Agent 서버가 실행중이지 않아 접속에 실패하면 구동에 실패합니다.

https://github.com/iFunFactory/game-p... 에 설명을 참고하여 두 Agent 를 설치 하시거나, 또는 MANIFEST 설정에서 AuthenticationClient 에서 use_authenticator 를 false, LeaderboardClient 에서 use_leaderboard 를 false 로 설정하여 해결하실 수 있습니다. (인증과 랭킹 처리가 생략됩니다.)

이 문제가 아닐 경우 로그 파일을 올려주시면 파악에 도움이 될 듯 합니다.

감사합니다.

2017-06-22 10:31:23 +0900 edited answer pong 서버 빌드중 에러가 나는데요.

안녕하세요. 아이펀팩토리입니다.

최근 아이펀엔진 업데이트로 프로토콜의 태그 번호가 변경되어서 그렇습니다.

pongcs_messages.proto 파일의 38 번 줄

  optional PbufHelloMessage pbuf_hello = 9; 
  optional PbufHelloMessage pbuf_hello = 16; 
으로 변경하신 후 Rebuild 하시면 됩니다.

곧 Github 소스도 업데이트 하도록 하겠습니다.

감사합니다.