| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 | class BiosSessionService{	protected int				m_GetSessionAttempts;	string						m_CurrentHandle;		//! Enter a gameplay session	/*!		The async result is returned in the OnEnterGameplaySession callback.		Expected errors:			LOGICAL - if the user is currently in an active gameplay session.					@param session_address server IP address.		@param session_port server port.			@return EBiosError indicating if the async operation is pending.	*/	proto native EBiosError	EnterGameplaySessionAsync(string session_address, int session_port);		//! Leave a gameplay session	/*!		The async result is returned in the OnLeaveGameplaySession callback.		If there is an unexpected error the state is cleared.		Expected errors:			ERR_NOT_FOUND - when attempting to leave a gameplay session the user is not part of.			ERR_LOGICAL - when the user is not in a gameplay session.					@param session_address server IP address.		@param session_port server port.			@return EBiosError indicating if the async operation is pending.	*/	proto native EBiosError	LeaveGameplaySessionAsync(string session_address, int session_port);		//! Alerts engine that players in current session have changed	/*!		@param newPlayers players that have just joined the server. When player joins a server, ALL players already on server count as new players.	*/	proto native void OnSessionPlayerListUpdate(array<string> newPlayers);		//! Gets a session from a join handle	/*!		The async result is returned in the OnGetGameplaySession, OnGetLobbySession or OnGetSessionError callback,		dependinng on the type of session, or error.		Expected errors:		@param join_handle the parsed join handle.		@return EBiosError indicating if the async operation is pending.	*/	void TryGetSession( string join_handle = "" )	{		if ( join_handle != "" )		{			m_GetSessionAttempts	= 0;			m_CurrentHandle			= join_handle;		}				if ( m_GetSessionAttempts < 10 )			GetSessionAsync( m_CurrentHandle );		else			g_Game.DisconnectSessionEx(DISCONNECT_SESSION_FLAGS_JOIN);	}		//! Gets a session from a join handle	/*!		The async result is returned in the OnGetGameplaySession, OnGetLobbySession or OnGetSessionError callback,		dependinng on the type of session, or error.		Expected errors:		@param join_handle the parsed join handle.		@return EBiosError indicating if the async operation is pending.	*/	proto native EBiosError	GetSessionAsync(string join_handle);		//! Sets the activity to a gameplay session	/*!		The async result is returned in the OnSetActivity callback.		Expected errors:			ERR_NOT_FOUND - when attempting to set a gameplay session activity the user is not part of.					@param session_address server IP address.		@param session_port server port.				@return EBiosError indicating if the async operation is pending.	*/	proto native EBiosError	SetGameplayActivityAsync(string session_address, int session_port);		//! not implemented	//proto native EBiosError	SetLobbyActivityAsync(...);		//! Clears the current activity	/*!		The async result is returned in the OnClearActivity callback.		Expected errors:							@return EBiosError indicating if the async operation is pending.	*/	proto native EBiosError	ClearActivityAsync();		//! Show system UI to invite friends to current gameplay session	/*! 		The async result is returned in the OnShowInviteToGameplaySession callback. 		On Xbox, if session with session_address and session_port does not exist, then xbox show 		message "We could not send the invite".				@param session_address server IP address.		@param session_port server port.				@return EBiosError indicating if the async operation is pending.	*/	proto native EBiosError ShowInviteToGameplaySessionAsync(string session_address, int session_port);	//! Send invite to list of users	/*! 		The async result is returned in the OnInviteToGameplaySession callback. 		The user must be inside the session. That means, OnEnterGameplaySession must be called with no errors.				@param session_address server IP address.		@param session_port server port.		@param invitee_list list of users to invite		@return EBiosError indicating if the async operation is pending.	*/	proto native EBiosError InviteToGameplaySessionAsync(string session_address, int session_port, array<string> invitee_list);	//! Notifiy about interactive multiplayer state	proto native void SetMultiplayState(bool is_active);		//! Callback function	/*!		@param error error indicating success or fail of the async operation.	*/	void OnSetActivity(EBiosError error)	{		OnlineServices.ErrorCaught( error );	}		//! Callback function	/*!		@param error error indicating success or fail of the async operation.	*/	void OnClearActivity(EBiosError error)	{	}		//! Callback function	/*!		@param session_address server IP address.		@param session_port server port.	*/	void OnGetGameplaySession(string session_address, int session_port)	{			m_GetSessionAttempts = 0;		switch (g_Game.GetGameState())		{			case DayZGameState.IN_GAME:			{				string addr;				int port;				bool found = GetGame().GetHostAddress( addr, port );				if (addr != session_address || port != session_port )				{					if (found)					{						OnlineServices.SetInviteServerInfo( session_address, session_port );						g_Game.GetUIManager().CloseAll();						if (!g_Game.GetUIManager().EnterScriptedMenu( MENU_INVITE_TIMER, null ))						{							NotificationSystem.AddNotification( NotificationType.CONNECT_FAIL_GENERIC, NotificationSystem.DEFAULT_TIME_DISPLAYED );						}					}					else					{						NotificationSystem.AddNotification( NotificationType.JOIN_FAIL_GET_SESSION, NotificationSystem.DEFAULT_TIME_DISPLAYED );					}				}				else				{					NotificationSystem.AddNotification( NotificationType.INVITE_FAIL_SAME_SERVER, NotificationSystem.DEFAULT_TIME_DISPLAYED, "#ps4_already_in_session" );				}				break;			}			case DayZGameState.CONNECTING:			{				g_Game.DisconnectSessionEx(DISCONNECT_SESSION_FLAGS_FORCE);				// Intentionally no break, fall through to connecting			}			default:			{				g_Game.ConnectFromJoin( session_address, session_port );				break;			}		}	}		//! //! Callback function, not implemented	/*void OnGetLobbySession(...)	{	}*/		//! Callback function	/*!		@param error error indicating fail of the async operation. Cannot be OK.	*/	void OnGetSessionError(EBiosError error)	{		OnlineServices.ErrorCaught( error );		m_GetSessionAttempts++;				#ifdef PLATFORM_XBOX			GetGame().GetCallQueue( CALL_CATEGORY_SYSTEM ).CallLater( TryGetSession, 100, false, "" );		#endif		#ifdef PLATFORM_PS4			g_Game.DisconnectSessionEx(DISCONNECT_SESSION_FLAGS_JOIN);		#endif			}		//! Callback function	/*!		@param session_address server IP address. Empty if failed.		@param session_port server port. 0 if failed.		@param error error indicating success or fail of the async operation.	*/	void OnEnterGameplaySession(string session_address, int session_port, EBiosError error)	{		if ( !OnlineServices.ErrorCaught( error ) )		{			SetGameplayActivityAsync( session_address, session_port );			if ( OnlineServices.GetPendingInviteList() )				InviteToGameplaySessionAsync( session_address, session_port, OnlineServices.GetPendingInviteList() );						//OnlineServices.GetCurrentServerInfo(session_address, session_port);		}	}		//! Callback function	/*!		@param error error indicating success or fail of the async operation.	*/	void OnLeaveGameplaySession(EBiosError error)	{	}		//! Callback function	/*!		@param error indicating success or fail of the async operation.	*/	void OnShowInviteToGameplaySession(EBiosError error)	{		OnlineServices.ErrorCaught( error );	}	//! Callback function	/*!		@param error indicating success or fail of the async operation.	*/	void OnInviteToGameplaySession(EBiosError error)	{	}		array<string> GetSessionPlayerList()	{		return ClientData.GetSimplePlayerList();	}		//! Native callback function to retrieve the session player list.	/*!		@param outPlayerList Output list of players in the session.	*/	void GetSessionPlayerListEx(TStringArray outPlayerList)	{		TStringArray playerList = GetSessionPlayerList();		outPlayerList.Copy(playerList);	}	};
 |