Azure Functions에서 드랍박스의 파일을 읽어올 수 있습니다.

이 기능은 Function이 외부의 설정 파일등을 읽어서 동작해야 하거나, 혹은 Function의 실행 결과를 파일에 저장해야 할 때 사용할 수 있습니다.




함수의 '통합' 메뉴를 클릭합니다.



a


입력 항목에 '외부 파일'을 추가합니다.



'API' 를 Dropbox로 선택하고, 안내에 따라 드랍박스 로그인을 수행합니다.





드랍박스 내의 읽어올 파일 경로를 설정합니다. (test.json 등)




설정이 완료되면 함수 내에 파라미터를 선언함으로써, 파일을 읽어올 수 있습니다.


아래 코드의 inputFile에 자동으로 파일 내용이 로드됩니다.



* outputFile은 위 설정과 똑같은 방법으로 설정하시면 됩니다.

* inputFile, outputFile의 타입은 string 뿐만 아니라 Stream, TextReader, TextWriter로 설정할 수 있습니다.

* out 키워드는 async 메소드에는 사용할 수 없기 때문에 함수 본문을 반드시 async가 아닌 메소드로 만들어야 합니다.


Posted by pjc0247



SERVER_PROCESS_CRASHED
Server Process exited without calling process ending with exit code -532462766. (C:\game\Sample.exe a)






게임리프트 콘솔에 빌드를 업로드하고 플릿을 만들었는데 Activating 상태에서 넘어가질 않는다.

조금 더 기다리면 위와 같은 에러 이벤트를 볼 수 있다.


ProcessReady 함수만 제대로 호출되도 Active 상태로 전환될텐데, 아무래도 해당 함수가 호출이 안되서 계속 Activating 상태로 남아있는듯 보인다.



* ProcessReady 호출 이전에 프로그램이 죽는 포인트가 없는지 검사한다.

* 빠진 DLL이 없는지 검사한다. (DLL에서 사용하는 또다른 DLL도 있을 수 있으니 ilspy / dependency walker 등을 사용하자)

* VS 재배포 가능 패키지가 미리 설치된 이미지를 기반으로 할 수는 없는 것 같으니, 서버 빌드에 설치파일 포함시켜서 스크립트를 짜자

* vs2015의 경우 msvcXXX 말고도 concrt140, vcruntime140, ucrtbase 파일도 필요하다.

* 지원하는 OS가 Windows Server 2012 이기 때문에 닷넷은 4.5.x 까지 기본으로 돌아간다.



[가장 쉬운 방법은 ec2 인스턴스를 새로 만들고, 완전 클린상태에서 게임 빌드를 복붙해놓고 돌아가는지 안돌아가는지 체크한다. 그러면 왜 안돌아가는지까지도 볼 수 있다.]


* exit code : -1073741819 AccessViolation

                      -532462766 디펜던시 에러

Posted by pjc0247
TAG AWS

C++에는 없지만 다른 언어에는 존재하는 ToString 기능이 부러워서 만들어 보았습니다.


소스 코드와 사용법 : https://github.com/pjc0247/to.cpp



대략적인 사용법은 아래와 같습니다.



* 다른 곳에서 std::to_string과 뭐가 다르냐는 소리를 하도 들어서 추가로 적는 부분


std::to_string은 C++의 기본타입들에대해서만 문자열 변환 기능을 제공합니다. 심지어 STL 컨테이너조차도 문자열화가 불가능합니다.


to.cpp는 STL 컨테이너 뿐만 아니라 유저 클래스에 대해서도 문자열화가 가능합니다. 유저 클래스는 사용자가 to_string 메소드를 생성하여 이 클래스가 어떻게 문자열화되어야하는지 구성할 수 있습니다. (다른 언어와 동일)

to_string 메소드를 구현하지 않은 경우에도, 최소한 클래스 이름과 메모리 주소값은 찍어주기 때문에 두개의 오브젝트가 같은지 다른 인스턴스인지는 구분할 수 있습니다.


또한 유틸리티 기능인 CREATE_TO_STRING 매크로를 제공합니다. 이는 자동으로 클래스에 대해서 to_string 메소드를 만들어줍니다. 자세한 사항은 github 를 참조하세요.

Posted by pjc0247
단축키 작업 만들기
vscode 확장에서는 코드로 직접 키 입력을 감지해서 단축키 작업을 실행하는것이 아니라, 특정한 이름으로 커맨드를 만들고 유저가 직접 커맨드와 단축키를 바인딩하는 과정을 거칩니다.

확장 프로그램의 activate 함수 아래에 아래와 같은 코드를 작성합니다.
커맨드 이름은 extension.확장프로그램이름.기능이름 과 같이 작성합니다.


커맨드를 등록하는 코드를 작성했으면, 실제로 단축키와 연결하기 위해 vscode의 단축키 설정을 변경해야 합니다.
단축키 조합은 파일 -> 기본 설정 -> 바로가기 키 에서 설정할 수 있습니다.





텍스트 가져오기





텍스트 편집하기
소스를 수정할때는 직접 string 값에 접근해 작업하는것이 아닌, edit 메소드를 이용합니다.


edit 메소드의 반환값에 then을 이용하여 모든 편집이 수행된 후의 작업을 지정할 수 있습니다.


Posted by pjc0247

WebSocket Data Frame Format



FIN : 현재 패킷이 마지막 조각임을 나타냅니다.
RSV1 ~ 3 : 특별히 지정되지 않은 경우 기본적으로 항상 0이어야 합니다. 0이 아닌 값을 지정할 경우 에러를 발생합니다. (발생시켜야 합니다.)

OPCODE : 패킷의 타입입니다.

MASK : PayloadData가 마스킹되었는지 여부를 나타냅니다. 클라이언트가 서버로 보내는 패킷은 항상 1이어야 합니다. 서버가 클라이언트로 보내는 패킷은 항상 0이어야 합니다.

PAYLOAD_LEN : PayloadData의 길이입니다. 이 값이 125이하일경우 이 필드 자체가 PayloadData의 실제 길이를 나타내며 126/127일 경우 뒤따라올 EXTENDED_PAYLOAD_LEN의 길이를 나타내는 플래그 역할을 합니다.

EXTENDED_PAYLOAD_LEN : PAYLOAD_LEN이 126 또는 127일 때에만 존재합니다. 126일 경우 2바이트 (unsigned short) 값이고 / 127일 경우 8바이트 (long long) 값입니다.

MASKING_KEY : 이 필드는 MASK가 1일때만 존재합니다. PayloadData를 언마스킹 할 때 사용할 키입니다.

PAYLOAD_DATA : 실제 데이터입니다. (UTF-8인코딩된 문자열 또는 바이너리)



주의

PAYLOAD_DATA 필드의 사이즈가 가변인건 당연하지만

EXTENDED_PAYLOAD_LEN 필드와 MASKING_KEY의 사이즈도 가변적인것에 주의해야 합니다.


* EXTENDED_PAYLOAD_LEN : 0바이트일수도 또는 2바이트 / 혹은 8바이트일 수 있습니다.

* MASKING_KEY : 0바이트일수도 / 4바이트일수도 있습니다.


예시

* 클라이언트서버에게 100바이트 문자열을 보낼 경우

PAYLOAD_LEN : 보내려는 사이즈가 125이하이므로 100을 그대로 담습니다.

EXTENDED_PAYLOAD_LEN : 이 필드는 존재하지 않습니다.

MASK : 클라이언트가 보내는 패킷은 항상 마스킹되어야 합니다. 

MASKING_KEY : MASK 값이 1이므로 이 필드는 존재합니다. 클라이언트는 이 키로 PAYLOAD_DATA를 마스킹해야 합니다.

PAYLOAD_DATA : 100바이트의 UTF-8 인코딩된 문자열을 전송합니다. 


패킷의 사이즈는

고정 2바이트(FIN/RSV/OPCODE/MASK/PAYLOAD_LEN)

MASKING_KEY 4바이트

PAYLOAD_DATA 100바이트

총 106바이트입니다.

* 서버클라이언트에게 100바이트 문자열을 보낼 경우

PAYLOAD_LEN : 보내려는 사이즈가 125이하이므로 100을 그대로 담습니다.

EXTENDED_PAYLOAD_LEN : 이 필드는 존재하지 않습니다.

MASK : 서버가 보내는 패킷은 항상 마스킹되면 안됩니다.

MASKING_KEY : MASK 값이 0이므로 이 필드는 존재하지 않아야 합니다. PAYLOAD_DATA는 마스킹되지 않은 채 보내집니다.

PAYLOAD_DATA : 100바이트의 UTF-8 인코딩된 문자열을 전송합니다. 


패킷의 사이즈는

고정 2바이트(FIN/RSV/OPCODE/MASK/PAYLOAD_LEN)

PAYLOAD_DATA 100바이트

총 102바이트입니다.


* 클라이언트서버에게 200바이트 문자열을 보낼 경우

PAYLOAD_LEN : 보내려는 사이즈가 125보다 크고 unsigned short 범위 이내이므로 126으로 설정합니다.

EXTENDED_PAYLOAD_LEN : 이 필드는 2바이트의 길이를 가지게 됩니다. 값은 200을 적습니다.

이하생략



'기타' 카테고리의 다른 글

[C++] ToString() 사용하기  (0) 2016.08.12
[VSCode] 확장 프로그램 작성하기  (0) 2016.07.11
웹소켓 프레임 구조  (0) 2016.06.30
C++의 Nested Namespace  (0) 2016.04.08
[cocos2d-x] Vibration(진동) 기능 사용하기  (0) 2016.02.22
[Lumberyard] What is Cloud Canvas?  (0) 2016.02.11
Posted by pjc0247

C++의 Nested Namespace

기타 2016.04.08 16:13

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4230.html


C++17 예상 목록에 포함된 중첩 네임스페이스,


이미 죽을대로 다 죽은 망겜에서
진작에 했어야됬는데 안한거 이제서야 패치하는느낌


'기타' 카테고리의 다른 글

[VSCode] 확장 프로그램 작성하기  (0) 2016.07.11
웹소켓 프레임 구조  (0) 2016.06.30
C++의 Nested Namespace  (0) 2016.04.08
[cocos2d-x] Vibration(진동) 기능 사용하기  (0) 2016.02.22
[Lumberyard] What is Cloud Canvas?  (0) 2016.02.11
test  (0) 2016.01.26
Posted by pjc0247
TAG c++
cocos2d-x 3.8 버전부터 진동 API가 추가되어, 진동으로 사용자에게 햅틱 피드백을 전달할 수 있다.

API 사용법은 아래와 같다.


인자는 진동을 울릴 초(sec)이며,

진동이 지원되지 않는 플랫폼에서는 무시되고, iOS 환경에서는 진동 시간을 설정할 수 없어 진동은 울리지만 지정한 시간은 무시된다.
안드로이드 환경에서는 정상적으로 동작한다.

안드로이드에서 API상으로 입력 가능한 최소 진동 단위는 1ms 로 보여진다.(http://developer.android.com/intl/ko/reference/android/os/Vibrator.html#vibrate(long))


* 안드로이드 환경의 경우 진동을 울리기 위해서 추가적인 퍼미션이 필요하다.
  proj.android/AndroidManifest.xml 에 아래 퍼미션을 추가한다.


'기타' 카테고리의 다른 글

[VSCode] 확장 프로그램 작성하기  (0) 2016.07.11
웹소켓 프레임 구조  (0) 2016.06.30
C++의 Nested Namespace  (0) 2016.04.08
[cocos2d-x] Vibration(진동) 기능 사용하기  (0) 2016.02.22
[Lumberyard] What is Cloud Canvas?  (0) 2016.02.11
test  (0) 2016.01.26
Posted by pjc0247
TAG cocos2d-x

What is Cloud Canvas?

Cloud Canvas 기능은 엔지니어 혹은 테크니컬 디자이너들이 커뮤니티 뉴스피드, 일일접속 보상, 서버 사이드 전투 계산 등의 작업을 만들고자 할 때, 서버측의 백엔드 지식 없이도 비쥬얼 스크립팅을 통해서 이를 가능할 수 있도록 도와줍니다.
Cloud Canvas와 Lumberyard Flow Graph를 이용하면 게임에서 바로 AWS 서비스(DynamoDB, Lambda, S3, Cognito, SNS, SQS)에 접근하는것이 가능합니다.
이 기능에 대한 데모는 Lumberyard 기본 샘플 중 하나인 "Don't Die" 게임에 포함되어있으며, 이 샘플 게임에서는 일반적인 온라인 기능들(선물, 리더보드, 인게임 메세지 등등)을 어떻게 만들어야 하는지에 대한 방법을 보여줍니다.


클라우드 캔버스를 사용하면 아래와 같은 장점이 있습니다.

 직접 서버를 호스팅하고, 운영하고, 셋업하는 수고를 없에줍니다.

 Flow Graph 비쥬얼 스크립팅 도구를 이용하면, 클라우드 기능들을 디자이너들과 게임플레이 엔지니어들이 직접 다룰 수 있게 되면서 게임 제작에 소모되는 버틀넥을 줄여줍니다.

 Lumberyard 에디터 안에서 클라우드 리소스를 업데이트 할 수 있게 되어서 개발 주기가 단축됩니다.

 

클라우드 캔버스는 아래의 기능들을 제공합니다.

 게임에 클라우드 기능을 추가할 수 있는 도구들을 제공합니다.

 플로우그래프의 노드가 아마존 서비스들에 직접적으로 통신할 수 있는 기능이 제공됩니다. (DynamoDB, S3, Cognito, Lambda, SQS, SNS)

 AWS 리소스들을 개발자들과 플레이어들이 각각 어디까지 접근 가능한지에 대한 퍼미션 제어 도구가 제공됩니다.

 AWS 디플로이를 관리할 수 있습니다.

 플레이어 로그인 기능을 제공합니다. (익명 로그인, 혹은 아마존, 페이스북, 구글, 등등) 유저들은 다양한 기기에서 하나의 데이터에 접근할 수 있게 됩니다.


* 이 글은 아래 문서의 일부에 대한 번역입니다.

https://s3.amazonaws.com/gamedev-tutorials/Tutorials/Cloud_Canvas-Overview_of_Cloud_Canvas-(01)_What_is_Cloud_Canvas_v1.pdf


* 아래부터는 직접 작성한 내용입니다.


위에서 언급된 바와 같이 Cloud Canvas는 Lumberyard 엔진에 AWS 기능들을 사용할 수 있도록 도와줍니다.
이는 Flow Graph 스크립트에서 작동하며, 만약 Flow Graph 스크립트가 아닌 C++ 환경에서 AWS 를 사용하고자 한다면 그냥 C++ 용 AWS SDK를 바로 사용하시면 됩니다.


Lumberyard의 기본 샘플 중 Don't Die 예제에는 AWS Lambda를 이용하여 리더보드/최고점수 저장 기능을 구현하는 예제를 보여줍니다.


게임 코드 중 Flow Graph 노드로 AWS Lambda 함수 실행을 수행하는 모습


클라우드 서비스 이용에 있어 필수적이라고 할 수 있는 JSON,
JSON 기능 또한 노드 형태로 제공됩니다. (파싱, 덤프, 이터레이트)


Flow Graph 에디터에서 AWS 노드를 추가하는 화면,
코드 없이 DynamoDB에 바로 접근하여 데이터를 조작할 수 있습니다. 이러한 기능들은 프로그래머 뿐만 아니라 레벨 디자이너들도 클라우드 기능을 다룰 수 있도록 해줍니다.



'기타' 카테고리의 다른 글

[VSCode] 확장 프로그램 작성하기  (0) 2016.07.11
웹소켓 프레임 구조  (0) 2016.06.30
C++의 Nested Namespace  (0) 2016.04.08
[cocos2d-x] Vibration(진동) 기능 사용하기  (0) 2016.02.22
[Lumberyard] What is Cloud Canvas?  (0) 2016.02.11
test  (0) 2016.01.26
Posted by pjc0247

test

기타 2016.01.26 17:50

'기타' 카테고리의 다른 글

[VSCode] 확장 프로그램 작성하기  (0) 2016.07.11
웹소켓 프레임 구조  (0) 2016.06.30
C++의 Nested Namespace  (0) 2016.04.08
[cocos2d-x] Vibration(진동) 기능 사용하기  (0) 2016.02.22
[Lumberyard] What is Cloud Canvas?  (0) 2016.02.11
test  (0) 2016.01.26
Posted by pjc0247