SMAPI: Multiplayer Events

Phonedolly·2021년 6월 6일
0
post-thumbnail
post-custom-banner

이곳의 내용을 번역(약간의 의역)한 것입니다.


오늘은 SMAPI에서 제공하는 Multiplayer 이벤트들을 알아보도록 하자.

멀티플레이어 메세지와 connection 관련하여 this.Helper.Events.Multiplayer가 여러 이벤트를 지니고 있다.

event summary
PeerContextReceived

플레이어가 mod context를 받으면 발생한다. 호스트, 클라이언트(framhand) 상관 없이 모든 플레이어에게 적용된다. SMAPI가 설치되어있지 않아도 해당된다. 이 이벤트는 SMAPI로 플레이어에게 메세지를 보낼 수 있는 가장 초기 시점이라 보면 된다.

게임이 연결을 승인하기 직전 이 이벤트가 발생하기 때문에, 그 시점에 플레이어는 아직 게임에 없다. 호스트에 연결할 때 Game1.isMasterGame, Context.IsMultiplayer 같은 contextual 필드가 초기화되지 않았을 수도 있다. 대신 호스트 context는 가장 빨리 수신되므로 e.Peer.isHost을 이용하여 현재 플레이어가 클라이언트(framhand)인지 검사할 수 있다. 다른 모드가 연결을 방해하지 않는다는 가정 하에 연결(connection)은 이 이벤트 다음 시점(직후)에 승인된다.

Event arguments:

event arg type description
e.Peer IMultiplayerPeer peer의 context가 수신되었을 때 ( Multiplayer#Get connected player info를 참고하라)
PeerConnected

다른 플레이어의 연결이 게임에서 승인되었을 때 발생한다. (호스트, 클라이언트 상관 없이) 모든 플레이어에게 적용된다. SMAPI를 설치하지 않은 플레이어도 해당된다. 이 이벤트는 PeerContextReceived 이후에 발생한다.

플레이어가 이 시점에 게임에 연결되므로 Game1.server.kick같은 메서드가 실행될 것이다.

Event arguments:

event arg type description
e.Peer IMultiplayerPeer 연결된 피어 ( Multiplayer#Get connected player info를 참고하라)
ModMessageReceived

mod message가 네트워크를 통해 수신되었을 때 발생한다.

Event arguments:

event arg type description
e.FromPlayerID long 메시지를 보낸 플레이어의 unique ID.
e.FromModID string 메시지를 보낸 mod의 unique ID.
e.Type string 핸들링해야할지 결정할 때 사용하는 메시지 타입. 전역적으로 unique하다는 보장이 없기 때문에 FromModID 필드도 검사해야 한다.
e.ReadAs<TModel>() method returns TModel e.ReadAs<MyMessageClass>() or e.ReadAs<string>()과 같이 주어진 타입으로 메시지 데이터를 읽어들인다. 또한 데이터를 읽어들일때마다 새로운 인스턴스를 리턴한다.
PeerDisconnected 플레이어의 접속이 끊겼을 때 발생한다.

Event arguments:

event arg type description
e.Peer IMultiplayerPeer 접속이 종료된 peer( Multiplayer#Get connected player info를 참고하라)

이제 무엇을 해야 하나?

지금까지 정해진건 이렇다.

어떤 서버를 사용하는가

  • Amazon Web Services EC2 t3a.small 인스턴스
  • 8 GB EBS Storage
  • Amazon Linux 2 (레드햇 기반)

서버에서 무엇을 돌리는가

  • Stardew Valley!
  • SMAPI를 이용한 관리 모드
  • Node.js를 이용한 웹서버 (관리페이지, SMAPI 모드와 통신)
  • Redis 데이터베이스. SQL은 싫어🙄 Redis를 메인 데이터베이스로 쓸거다.

어떻게 접속할 수 있는가

  • 클라이언트에서 굳이 SMAPI를 설치할 필요는 없다. 관리페이지에 접속해서 로그인하고 서버 접속 버튼을 눌러놓으면, 잠시 뒤 서버가 자동으로 여러분에게 (Stardew Valley) 멀티플레이 초대를 한다. 게임 초대를 승인하면 클라이언트가 서버에서 실행중인 Stardew Valley와 통신하기 시작한다.

예상 비용은?

한 달 총 비용 2400원이 목표. 사람을 더 모으면 1인당 몇백원대로 떨어질거다. 그 전까지는 열심히 서비스에 다이어트를 시키자.

그래서 무엇을 해야 하나?


Node.js는 나머지 파트를 계속 배우면 되고, SMAPI용 모드를 만들려면 C#도 학습해야 한다. C#Java와 비슷한 점이 너무 많아서 하루에 100페이지씩 나가도 될 것 같다. C# 이거는 2019년에 산 책인데... 이제는 그만 놀고 좀 읽어야 하지 않겠니?

예상 외로 SMAPI가 멀티플레이 관련해서 제공하는 기능이 너무 적었다. 그래서 Steam API쪽도 더 훑어볼 필요가 있다. 생각보다 Node.js에 더 많은 작업을 끼얹을 것 같은 느낌이다.😶

post-custom-banner

1개의 댓글

comment-user-thumbnail
2021년 7월 25일

사무실에 gpu 달린 서버가 있는데 테스트 해볼 수 있을까요??

답글 달기