Steamworks ドキュメンテーション
ISteamNetworking Interface
可能な場合にはNAT通過を適用した、クライアント間での接続の確立とデータ通信のためのネットワーク関数。

:このAPIは使用されていないため、今後のSteamworks SDKリリースから削除される可能性があります。
代わりに、ISteamNetworkingSocketsまたはISteamNetworkingMessagesを使ってください。 詳細情報についてはSteamネットワーキングを参照してください。

メンバ関数

ISteamNetworkingのメンバー関数は、グローバルのアクセサ関数SteamNetworking()経由で呼び出されます。

AcceptP2PSessionWithUser

bool AcceptP2PSessionWithUser( CSteamID steamIDRemote );
名前説明
steamIDRemoteCSteamIDこちらに最初のパケットを送信したユーザーのSteamID。

これによりゲームは、着信パケットの受け入れを指定できます。 This needs to be called before a real connection is established to a remote host, the game will get a chance to say whether or not the remote user is allowed to talk to them.

When a remote user that you haven't sent a packet to recently, tries to first send you a packet, your game will receive a callback P2PSessionRequest_t. This callback contains the Steam ID of the user who wants to send you a packet. In response to this callback, you'll want to see if it's someone you want to talk to (for example, if they're in a lobby with you), and if so, accept the connection; otherwise if you don't want to talk to the user, just ignore the request. If the user continues to send you packets, another P2PSessionRequest_t will be posted periodically. If you've called SendP2PPacket on the other user, this implicitly accepts the session request.

この呼び出しは、P2PSessionRequest_tコールバックへの応答としてのみ行うべき点に注意してください。

戻り値: bool
true は成功時で、steamIDRemoteが無効の場合のみ falseとなります。

AllowP2PPacketRelay

bool AllowP2PPacketRelay( bool bAllow );
名前説明
bAllowbool

直接接続またはNATトラバーサルを確立できない場合、P2P接続がSteamサーバーを介したリレーにフォールバックすることを許可または禁止します。

これは、この値を設定した後に作成された接続、またはこの値を設定した後に自動的に再接続する必要がある既存の接続にのみ適用されます。

デフォルトでは、P2Pパケットリレーは許可されています。

戻り値: bool
この関数は常にtrueを返します。

CloseP2PChannelWithUser

bool CloseP2PChannelWithUser( CSteamID steamIDRemote, int nChannel );
名前説明
steamIDRemoteCSteamID接続を閉じるユーザーのSteam ID。
nChannelint閉じるチャンネル。

指定のチャンネルでユーザーとの会話が終了したら、P2Pチャンネルを閉じます。

ユーザーへのチャンネルがすべて閉じられると、そのユーザーへの開いたセッションが閉じられ、このユーザーからの新しいデータが、新しいP2PSessionRequest_tコールバックをトリガーします。

戻り値: bool
true はチャンネルが正常に閉じられた場合。アクティブなセッションやユーザーとのチャンネルがなかった場合はfalse

CloseP2PSessionWithUser

bool CloseP2PSessionWithUser( CSteamID steamIDRemote );
名前説明
steamIDRemoteCSteamID接続を閉じるユーザーのSteam ID。

これは内部の接続に割り当てられたすべてのリソースを解放するため、ユーザーとの通信が完了した時に呼び出す必要があります。

リモートユーザーがもう一度データの送信を試みた場合、新しい P2PSessionRequest_tコールバックがポストされます。

戻り値: bool
true はセッションが正常に閉じられた場合。steamIDRemoteとの接続が開かれていなかった場合にはfalse

CreateConnectionSocket

SNetSocket_t CreateConnectionSocket( uint32 nIP, uint16 nPort, int nTimeoutSec );
名前説明
nIPuint32
nPortuint16
nTimeoutSecint

ソケットを作成し、リモート先への接続を開始します。

これは、Berkley TCPソケットモデルを中心に設計された古い関数セットの一部です。 これら古い関数は将来的に削除されるため、より堅牢なP2P関数の使用を推奨します。

戻り値: SNetSocket_t

CreateListenSocket

SNetListenSocket_t CreateListenSocket( int nVirtualP2PPort, uint32 nIP, uint16 nPort, bool bAllowUseOfPacketRelay );
名前説明
nVirtualP2PPortint
nIPuint32
nPortuint16
bAllowUseOfPacketRelaybool

ソケットを作成し、他の接続をリッスンします。

別のクライアントの接続時に、 SocketStatusCallback_tコールバックをトリガーします。

複数のポートがある場合、nVirtualP2PPortはクライアントが接続するユニークなIDです。
複数の接続が必要でなければ、通常は0で問題ありません。
unIPは、デフォルトのローカルIPが必要な場合に
0を渡すためにバインドするローカルのIPアドレスです
unPortは、ユーザーが常にピアツーピア接続することを期待し、IP/Port経由で接続できないようにしたい場合に
0を渡すためのポートです。

これは、Berkley TCPソケットモデルを中心に設計された古い関数セットの一部です。 これら古い関数は将来的に削除されるため、より堅牢なP2P関数の使用を推奨します。

戻り値: SNetListenSocket_t

CreateP2PConnectionSocket

SNetSocket_t CreateP2PConnectionSocket( CSteamID steamIDTarget, int nVirtualPort, int nTimeoutSec, bool bAllowUseOfPacketRelay );
名前説明
steamIDTargetCSteamID
nVirtualPortint
nTimeoutSecint
bAllowUseOfPacketRelaybool

ソケットを作成し、リモート先への接続を開始します。

既知のSteam ID (クライアントまたはゲームさーバー)経由、またはIPに直接接続できます
成功時にSocketStatusCallback_t callbackをトリガーします
失敗またはタイムアウトすると、m_eSNetSocketStateの失敗コードと共にSocketStatusCallback_tコールバックをトリガーします。

これは、Berkeley TCPソケットモデルを中心に設計された古い関数セットの一部です。これらの古い関数は将来的に削除されるため、より堅牢なP2P関数の使用を推奨します。

戻り値: SNetSocket_t

DestroyListenSocket

bool DestroyListenSocket( SNetListenSocket_t hSocket, bool bNotifyRemoteEnd );
名前説明
hSocketSNetListenSocket_t
bNotifyRemoteEndbool

リッスンソケットの破棄により、そこからされた生成された通常のソケットすべてが自動的に強制終了となります。

これは、Berkley TCPソケットモデルを中心に設計された古い関数セットの一部です。 これら古い関数は将来的に削除されるため、より堅牢なP2P関数の使用を推奨します。

戻り値: bool

DestroySocket

bool DestroySocket( SNetSocket_t hSocket, bool bNotifyRemoteEnd );
名前説明
hSocketSNetSocket_t
bNotifyRemoteEndbool

ソケットへの接続を切断し、ハンドルがあれば、無効にします。

ソケット上の未読データはすべて廃棄されます。
bNotifyRemoteEndが設定されている場合、リモートエンドが切断を確認するまで、ソケットは完全に破壊されません。

これは、Berkeley TCPソケットモデルを中心に設計された古い関数セットの一部です。これらの古い関数は将来的に削除されるため、より堅牢なP2P関数の使用を推奨します。

戻り値: bool

GetListenSocketInfo

bool GetListenSocketInfo( SNetListenSocket_t hListenSocket, uint32 *pnIP, uint16 *pnPort );
名前説明
hListenSocketSNetListenSocket_t
pnIPuint32 *
pnPortuint16 *

リッスンソケットがバウンドされているローカルポートを返します。

ソケットがP2P接続のみをリッスンするよう設定されてている場合、*pnIPと*pnPortは0です。

これは、Berkley TCPソケットモデルを中心に設計された古い関数セットの一部です。 これら古い関数は将来的に削除されるため、より堅牢なP2P関数の使用を推奨します。

戻り値: bool

GetMaxPacketSize

int GetMaxPacketSize( SNetSocket_t hSocket );
名前説明
hSocketSNetSocket_t

バイト単位でパケットサイズの最大値を取得します。

これは、Berkeley TCPソケットモデルを中心に設計された古い関数セットの一部です。これらの古い関数は将来的に削除されるため、より堅牢なP2P関数の使用を推奨します。

戻り値: int

GetP2PSessionState

bool GetP2PSessionState( CSteamID steamIDRemote, P2PSessionState_t *pConnectionState );
名前説明
steamIDRemoteCSteamIDアクティブなセッション状態情報を取得するユーザー。
pConnectionStateP2PSessionState_t *状態を返します。

P2PSessionState_t構造体に、アクティブな接続があるかなど、接続にキューしているバイト数、最後のエラーコード、リレーサーバーが使用されているかどうか、分かる場合はリモートユーz-あのIPとポートなど、接続に関する詳細を入力します。

デバッグ目的でのみ必要な情報です。

戻り値: bool
truepConnectionStateが入力された場合。指定のユーザーとオープンなセッションが無い場合はfalse

例:
P2PSessionState_t p2pSessionState; SteamNetworking()->GetP2PSessionState( steamIDremote, &p2pSessionState );

GetSocketConnectionType

ESNetSocketConnectionType GetSocketConnectionType( SNetSocket_t hSocket );
名前説明
hSocketSNetSocket_t

Trueを返し、ソケットが最終的にどのように接続したかを説明します。

これは、Berkley TCPソケットモデルを中心に設計された古い関数セットの一部です。 これら古い関数は将来的に削除されるため、より堅牢なP2P関数の使用を推奨します。

戻り値: ESNetSocketConnectionType

GetSocketInfo

bool GetSocketInfo( SNetSocket_t hSocket, CSteamID *pSteamIDRemote, int *peSocketStatus, uint32 *punIPRemote, uint16 *punPortRemote );
名前説明
hSocketSNetSocket_t
pSteamIDRemoteCSteamID *
peSocketStatusint *
punIPRemoteuint32 *
punPortRemoteuint16 *

ポインターのコンテンツを入力し、指定したソケットについての情報を返します。

これは、Berkeley TCPソケットモデルを中心に設計された古い関数セットの一部です。これらの古い関数は将来的に削除されるため、より堅牢なP2P関数の使用を推奨します。

戻り値: bool

IsDataAvailable

bool IsDataAvailable( SNetListenSocket_t hListenSocket, uint32 *pcubMsgSize, SNetSocket_t *phSocket );
名前説明
hListenSocketSNetListenSocket_t
pcubMsgSizeuint32 *
phSocketSNetSocket_t *

Checks for data from any socket that has been connected off this listen socket.

returns false if there is no data remaining
fills out *pcubMsgSize with the size of the next message, in bytes
fills out *phSocket with the socket that data is available on

これは、Berkley TCPソケットモデルを中心に設計された古い関数セットの一部です。 これら古い関数は将来的に削除されるため、より堅牢なP2P関数の使用を推奨します。

戻り値: bool

IsDataAvailableOnSocket

bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize );
名前説明
hSocketSNetSocket_t
pcubMsgSizeuint32 *

Returns false if there is no data remaining.

fills out *pcubMsgSize with the size of the next message, in bytes

これは、Berkeley TCPソケットモデルを中心に設計された古い関数セットの一部です。これらの古い関数は将来的に削除されるため、より堅牢なP2P関数の使用を推奨します。

戻り値: bool

IsP2PPacketAvailable

bool IsP2PPacketAvailable( uint32 *pcubMsgSize, int nChannel = 0 );
名前説明
pcubMsgSizeuint32 *パケットのサイズを返します。
nChannelintパッケージが利用可能かを確認するチャンネル。

Checks if a P2P packet is available to read, and gets the size of the message if there is one.

This should be called in a loop for each channel that you use. If there is a packet available you should call ReadP2PPacket to get the packet data.

戻り値: bool
true if there is a packet available; otherwise, false.

ReadP2PPacket

bool ReadP2PPacket( void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, CSteamID *psteamIDRemote, int nChannel = 0 );
名前説明
pubDestvoid *このバッファにコピーして、パケットデータを返します。
cubDestuint32pubDestに割り当てられたサイズ。 これはIsP2PPacketAvailableで返されたものと同じか、最大パケットのサイズとなります。
pcubMsgSizeuint32 *パケットのサイズを返します。
psteamIDRemoteCSteamID *このパケットを送信したユーザーのSteam IDを返します。
nChannelintパケットが送信されたチャンネル。

Reads in a packet that has been sent from another user via SendP2PPacket.


If the cubDest buffer is too small for the packet, then the message will be truncated.

This call is not blocking, and will return false if no data is available.

Before calling this you should have called IsP2PPacketAvailable.

戻り値: bool
true if a packet was successfully read; otherwise, false if no packet was available.

例:
uint32 msgSize = 0; while ( SteamNetworking()->IsP2PPacketAvailable( &msgSize ) ) { void *packet = malloc( msgSize ); CSteamID steamIDRemote; uint32 bytesRead = 0; if ( SteamNetworking()->ReadP2PPacket( packet, msgSize, &bytesRead, &steamIDRemote ) ) { // メッセージディスパッチコードはここ } free( packet ); }

RetrieveData

bool RetrieveData( SNetListenSocket_t hListenSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize, SNetSocket_t *phSocket );
名前説明
hListenSocketSNetListenSocket_t
pubDestvoid *
cubDestuint32
pcubMsgSizeuint32 *
phSocketSNetSocket_t *

Retrieves data from any socket that has been connected off this listen socket.

fills in pubDest with the contents of the message
messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
if *pcubMsgSize < cubDest, only partial data is written
returns false if no data is available
fills out *phSocket with the socket that data is available on

これは、Berkley TCPソケットモデルを中心に設計された古い関数セットの一部です。 これら古い関数は将来的に削除されるため、より堅牢なP2P関数の使用を推奨します。

戻り値: bool

RetrieveDataFromSocket

bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize );
名前説明
hSocketSNetSocket_t
pubDestvoid *
cubDestuint32
pcubMsgSizeuint32 *

Fills in pubDest with the contents of the message.

messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
if *pcubMsgSize < cubDest, only partial data is written
returns false if no data is available

これは、Berkeley TCPソケットモデルを中心に設計された古い関数セットの一部です。これらの古い関数は将来的に削除されるため、より堅牢なP2P関数の使用を推奨します。

戻り値: bool

SendDataOnSocket

bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable );
名前説明
hSocketSNetSocket_t
pubDatavoid *
cubDatauint32
bReliablebool

sending data
must be a handle to a connected socket
data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
use the reliable flag with caution; although the resend rate is pretty aggressive,
it can still cause stalls in receiving data (like TCP)

戻り値: bool

SendP2PPacket

bool SendP2PPacket( CSteamID steamIDRemote, const void *pubData, uint32 cubData, EP2PSend eP2PSendType, int nChannel = 0 );
名前説明
steamIDRemoteCSteamIDパケットを送信するターゲットユーザー。
pubDataconst void *送信するパケットデータの未加工のバイト配列。 このパケットの最大サイズは eP2PSendTypeによって定義されます。
cubDatauint32バイト単位でのpubDataのサイズ。
eP2PSendTypeEP2PSend信頼性、非信頼性、バッファリングなど、希望するデータの送信方法を指定します。
nChannelintこのパケットを送信する仮想ポートとして機能し、別のシステムへのメッセージのルーティングを助けるチャンネル
反対側のデータを取得するためには、同じチャンネル番号で反対側のReadP2PPacket を呼び出す必要があります。 同じユーザーと異なるチャンネルを使用して通信する場合にも、基礎となる同じP2P接続が使用され、リソースが節約されます。
プライマリチャンネル用、またはこの機能を使用しない場合には0を使用します。

指定したユーザーにP2Pパケットを送信します。

This is a session-less API which automatically establishes NAT-traversing or Steam relay server connections.

注: The first packet send may be delayed as the NAT-traversal code runs.

See EP2PSend for descriptions of the different ways of sending packets.

The type of data you send is arbitrary, you can use an off the shelf system like Protocol Buffers or Cap'n Proto to encode your packets in an efficient way, or you can create your own messaging system.

戻り値: bool
Triggers a P2PSessionRequest_t callback.
true if the packet was successfully sent.
Note that this does not mean successfully received, if we can't get through to the user after a timeout of 20 seconds, then an error will be posted via the P2PSessionConnectFail_t callback.

false upon the following conditions:
  • パケットが送信タイプに対して大きすぎる。
  • ターゲットのSteam IDが無効である。
  • キューに入れられたバイト数が大きすぎるために送信できない。

コールバック

以下はSteamAPI_RunCallbacksを呼び出すことによって実行されるコールバックです。 これらの多くはISteamNetworkingのメンバー関数への応答として直接実行されます。

P2PSessionConnectFail_t

パケットが指定したユーザーに到達できない場合に呼び出されます。
この時点でキューに入れられた未送信のすべてのパケットはドロップされ、さらに送信を試みると、接続の確立が再試行されます 。(ただし、失敗した場合は再びドロップされます。)

名前説明
m_steamIDRemoteCSteamIDパケットを送信しようとしていた先のユーザー。
m_eP2PSessionErroruint8問題が発生した理由を示します。 実際にはEP2PSessionErrorです。

P2PSessionRequest_t

A user wants to communicate with us over the P2P channel via the SendP2PPacket. In response, a call to AcceptP2PSessionWithUser needs to be made, if you want to open the network channel with them.

名前説明
m_steamIDRemoteCSteamIDP2Pセッションを開始したいユーザー。

関連する関数: SendP2PPacket

SocketStatusCallback_t

ソケットのステータスが変更した場合に呼び出されます。 CreateListenSocketCreateP2PConnectionSocket呼び出しの一部として使用されます。

これは、Berkley TCPソケットモデルを中心に設計された古い関数セットの一部です。 これら古い関数は将来的に削除されるため、より堅牢なP2P関数の使用を推奨します。

名前説明
m_hListenSocketSNetSocket_tリモートホストへのデータの送受信に使用されるソケット。
m_eSNetSocketStateSNetListenSocket_tリッスンしていたサーバーソケットです。これが発信接続の場合にはNULLです。
m_steamIDRemoteCSteamIDあれば、接続した先のリモートSteam ID。
m_eP2PSessionErrorintソケットの状態、ESNetSocketState

構造体

これらは、ISteamNetworking内の関数が返す、またはやり取りする構造体です。

P2PSessionState_t

GetP2PSessionStateによって返される、指定したユーザーへの接続状況。 これは、以前のSendP2PPacketへの呼び出しで何が起こっているかについての内部情報です。  デバッグ以外の目的では不要なはずです。

名前説明
m_bConnectionActiveuint8ユーザーとアクティブなオープン接続がある(true)か、ない(false)か?
m_bConnectinguint8現在ユーザーと接続を確立しようとしている(true)か、否(false)か?
m_eP2PSessionErroruint8ソケットに記録された最後のエラー。 EP2PSessionErrorを返します。
m_bUsingRelayuint8この接続はSteamリレーサーバーを介している (true)か、否 (false)か?
m_nBytesQueuedForSendint32ユーザーに送信するためにキューに入れられたバイト数。
m_nPacketsQueuedForSendint32ユーザーに送信するためにキューに入れられたパケット数。
m_nRemoteIPuint32設定されていた場合にはリモートホストのIP。 Steamリレーサーバーの場合もあります。 これは、以前の認証APIとの互換性のためにのみ存在しています。
m_nRemotePortuint16設定されている場合、リモートホストのポート。 Steamリレーサーバーの場合もあります。 これは、以前の認証APIとの互換性のためにのみ存在しています。

列挙型

これらはISteamNetworkingで使用するために定義された列挙型です。

EP2PSend

SendP2PPacketの送信タイプを指定します。
通常UDPのようなパケットにはk_EP2PSendUnreliable
TCPのようなパケットにはk_EP2PSendReliableです。

名前説明
k_EP2PSendUnreliable0基本的なUDP送信です。 パケットは1200バイト(通常のMTUサイズ)より大きくはできません。 紛失したり、稀に順不同で到達することがあります。
送信するAPIは、基礎となる接続についてある程度の知識を持っているため、NATトラバーサルが完了していない場合や接続で調整が認識されている場合、パケットは接続が再び開くまでバッチ処理されます。
k_EP2PSendUnreliableNoDelay1上記と同様ですが、基礎となるP2P接続が確立されていない場合、パケットは破棄されます。 これをリモートホストに送信される最初のパケットで使用すると、パケットはほぼドロップされます。
絶対にバッファリングしない種類のデータ、例えば音声ペイロードパケット等、にのみ役に立ちます。
k_EP2PSendReliable2信頼できるメッセージ送信。 1つのメッセージで最大1MBのデータを送信できます。
内部のメッセージの断片化/再構築、および大量のデータを効率的に送信するためのスライディングウィンドウを実行します。
k_EP2PSendReliableWithBuffering3上記と同じですが、送信にNagleアルゴリズムを適用します- 現在のMTUサイズ(通常~1200バイト、変更可能)または~200msが経過するまで送信が蓄積されます(Nagleアルゴリズム)。
これは、一連の小さいメッセージを送信したいが、1つのパケットに合体させたい場合に便利です。
信頼できるストリームはすべて順序付けられているため、いくつかの小さなメッセージを k_EP2PSendReliableWithBufferingを使用して送信してから、通常のk_EP2PSendReliableを実行してすべてのバッファーデータを強制的に送信できます。

EP2PSessionError

SendP2PPacketが返す可能性のあるエラーのリスト。これらは、P2PSessionConnectFail_tコールバック内で送信されます。

名前説明
k_EP2PSessionErrorNone0エラーなし。
k_EP2PSessionErrorNotRunningApp1ターゲットユーザーが同じゲームを実行していません。
k_EP2PSessionErrorNoRightsToApp2ローカルユーザーは実行中のアプリを所有していません。
k_EP2PSessionErrorDestinationNotLoggedIn3ターゲットユーザーはSteamに接続していません。
k_EP2PSessionErrorNotRunningApp4ターゲットユーザーが応答しなかったため接続がタイムアウトしました。おそらくAcceptP2PSessionWithUserを呼び出し中です。
企業のファイアウォールもこれをブロックすることがあります (NATトラバーサルはファイアウォールトラバーサルではありません)。UDP ポート 3478, 4379, および4380が発信報告で開いていることを確認してください。
k_EP2PSessionErrorMax5未使用。

ESNetSocketConnectionType

現在のソケットの接続を説明します。 古いNetworking APIでのみ使用されています。

名前説明
k_ESNetSocketConnectionTypeNotConnected0
k_ESNetSocketConnectionTypeNotConnected1
k_ESNetSocketConnectionTypeUDP2

ESNetSocketState

CreateP2PConnectionSocketによって使用される接続の進行状況のインジケーターです。

名前説明
k_ESNetSocketStateInvalid0
k_ESNetSocketStateChallengeHandshake1通信は有効です
k_ESNetSocketStateDisconnecting10接続を確立中の状態
接続状態のマシーンが開始しました
k_ESNetSocketStateInvalid11p2p接続
自身のローカルIP情報を見つけました
k_ESNetSocketStateReceivedRemoteCandidates12Steamバックエンド経由でIP情報について、リモートマシーンから情報を受信しました。
k_ESNetSocketConnectionTypeUDPRelay15直接接続
サーバーからチャレンジパケットを受信しました
k_ESNetSocketStateConnectionBroken21失敗状態
APIがシャットダウンし、もう一方の端に通知している最中です
k_ESNetSocketStateLocalCandidatesFound22APIがシャットダウンし、シャットダウンを完了しました
k_ESNetSocketStateTimeoutDuringConnect23接続を確立しようとした際にタイムアウトしました。
k_ESNetSocketStateRemoteEndDisconnected24リモートエンドがこちらから断絶されました
k_ESNetSocketStateConnected25接続が切断されました。もう一方が消失したか、ローカルネットワーク接続が切断されました

Typedefs

これらはISteamNetworkingで使用するために定義されたtypedefsです。

名前ベース型説明
SNetListenSocket_tuint32CreateListenSocket()
SNetSocket_tuint32ソケットへのハンドル
CreateP2PConnectionSocket()

定数

これらはISteamNetworkingで使用するために定義された定数です。

名前説明
STEAMNETWORKING_INTERFACE_VERSIONconst char *"SteamNetworking005"