60 lines
1.5 KiB
C++
60 lines
1.5 KiB
C++
//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
|
|
//
|
|
// Purpose: Class for P2P voice chat
|
|
//
|
|
// $NoKeywords: $
|
|
//=============================================================================
|
|
|
|
#ifndef VOICE_CHAT_H
|
|
#define VOICE_CHAT_H
|
|
|
|
#include "GameEngine.h"
|
|
#include "SpaceWar.h"
|
|
#include "Messages.h"
|
|
#include "steam/isteamnetworkingsockets.h"
|
|
|
|
typedef struct VoiceChatConnection_s
|
|
{
|
|
uint64 ulLastReceiveVoiceTime;
|
|
HGAMEVOICECHANNEL hVoiceChannel; // engine voice channel for this player
|
|
bool bActive;
|
|
} VoiceChatConnection_t;
|
|
|
|
class CVoiceChat
|
|
{
|
|
public:
|
|
|
|
CVoiceChat( IGameEngine *pGameEngine );
|
|
~CVoiceChat();
|
|
|
|
bool StartVoiceChat();
|
|
void StopVoiceChat();
|
|
|
|
// chat control
|
|
void MarkAllPlayersInactive();
|
|
void MarkPlayerAsActive( CSteamID steamID );
|
|
|
|
bool IsPlayerTalking( CSteamID steamID );
|
|
|
|
// chat engine
|
|
void RunFrame();
|
|
void HandleVoiceChatData( const void *pMessage );
|
|
|
|
HSteamNetConnection m_hConnServer;
|
|
|
|
private:
|
|
|
|
// Pointer to engine instance (so we can play sound)
|
|
IGameEngine *m_pGameEngine;
|
|
|
|
// map of voice chat sessions with other players
|
|
std::map< uint64, VoiceChatConnection_t > m_MapConnections;
|
|
|
|
CSteamID m_SteamIDLocalUser; // ourself
|
|
bool m_bIsActive; // is voice chat system active
|
|
uint64 m_ulLastTimeTalked; // last time we've talked ourself
|
|
HGAMEVOICECHANNEL m_hVoiceLoopback;
|
|
uint8 m_ubUncompressedVoice[ VOICE_OUTPUT_SAMPLE_RATE * BYTES_PER_SAMPLE ]; // too big for the stack
|
|
};
|
|
|
|
#endif |