Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import `in`.dragonbra.javasteam.enums.EMsg
import `in`.dragonbra.javasteam.enums.EResult
import `in`.dragonbra.javasteam.enums.EServerFlags
import `in`.dragonbra.javasteam.generated.MsgClientLogon
import `in`.dragonbra.javasteam.protobufs.steamclient.SteammessagesBase.CMsgIPAddress
import `in`.dragonbra.javasteam.protobufs.steamclient.SteammessagesClientserverGameservers.CMsgGSServerType
import `in`.dragonbra.javasteam.protobufs.steamclient.SteammessagesClientserverLogin.CMsgClientLogOff
import `in`.dragonbra.javasteam.protobufs.steamclient.SteammessagesClientserverLogin.CMsgClientLogon
Expand All @@ -18,11 +17,9 @@ import `in`.dragonbra.javasteam.steam.handlers.steamgameserver.callback.TicketAu
import `in`.dragonbra.javasteam.steam.handlers.steamuser.callback.LoggedOnCallback
import `in`.dragonbra.javasteam.steam.steamclient.callbackmgr.CallbackMsg
import `in`.dragonbra.javasteam.steam.steamclient.callbacks.DisconnectedCallback
import `in`.dragonbra.javasteam.types.AsyncJobSingle
import `in`.dragonbra.javasteam.types.SteamID
import `in`.dragonbra.javasteam.util.HardwareUtils
import `in`.dragonbra.javasteam.util.NetHelpers
import `in`.dragonbra.javasteam.util.NetHelpers.obfuscatePrivateIP
import `in`.dragonbra.javasteam.util.Utils
import `in`.dragonbra.javasteam.util.obfuscatePrivateIP
import java.net.Inet6Address
Expand All @@ -38,20 +35,19 @@ class SteamGameServer : ClientMsgHandler() {
* The client should already have been connected at this point.
* Results are return in a [LoggedOnCallback].
* @param details The details to use for logging on.
* @return The Job ID of the request. This can be used to fine the appropriate [LoggedOnCallback]
* @throws IllegalArgumentException token is not set within [details].
*/
@Throws(IllegalArgumentException::class)
fun logOn(details: LogOnDetails): AsyncJobSingle<LoggedOnCallback> {
require(!details.token.isBlank()) { "LogOn requires a game server token to be set in 'details'." }

val logon = ClientMsgProtobuf<CMsgClientLogon.Builder>(CMsgClientLogon::class.java, EMsg.ClientLogonGameServer)
fun logOn(details: LogOnDetails) {
require(details.token.isNotBlank()) { "LogOn requires a game server token to be set in 'details'." }

if (!client.isConnected) {
client.postCallback(LoggedOnCallback(EResult.NoConnection, logon.sourceJobID))
return AsyncJobSingle(client, logon.sourceJobID)
client.postCallback(LoggedOnCallback(EResult.NoConnection))
return
}

val logon = ClientMsgProtobuf<CMsgClientLogon.Builder>(CMsgClientLogon::class.java, EMsg.ClientLogonGameServer)

val gsId = SteamID(0, 0, client.universe, EAccountType.GameServer)

logon.protoHeader.clientSessionid = 0
Expand All @@ -68,8 +64,6 @@ class SteamGameServer : ClientMsgHandler() {
logon.body.gameServerToken = details.token

client.send(logon)

return AsyncJobSingle(client, logon.sourceJobID)
}

/**
Expand All @@ -78,17 +72,17 @@ class SteamGameServer : ClientMsgHandler() {
* Results are return in a [LoggedOnCallback].
*
* @param appId The AppID served by this game server, or 0 for the default.
* @return The Job ID of the request. This can be used to fine the appropriate [LoggedOnCallback]
*/
@JvmOverloads
fun logOnAnonymous(appId: Int = 0): AsyncJobSingle<LoggedOnCallback> {
val logon = ClientMsgProtobuf<CMsgClientLogon.Builder>(CMsgClientLogon::class.java, EMsg.ClientLogonGameServer)

fun logOnAnonymous(appId: Int = 0) {
if (!client.isConnected) {
client.postCallback(LoggedOnCallback(EResult.NoConnection, logon.sourceJobID))
return AsyncJobSingle(client, logon.sourceJobID)
client.postCallback(LoggedOnCallback(EResult.NoConnection))
return
}

// Was EMsg.ClientLogonGameServer, changed to match SK.
val logon = ClientMsgProtobuf<CMsgClientLogon.Builder>(CMsgClientLogon::class.java, EMsg.ClientLogon)

val gsId = SteamID(0, 0, client.universe, EAccountType.AnonGameServer)

logon.protoHeader.clientSessionid = 0
Expand All @@ -103,8 +97,6 @@ class SteamGameServer : ClientMsgHandler() {
logon.body.machineId = ByteString.copyFrom(HardwareUtils.getMachineID())

client.send(logon)

return AsyncJobSingle(client, logon.sourceJobID)
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import `in`.dragonbra.javasteam.steam.handlers.steamuser.callback.WalletInfoCall
import `in`.dragonbra.javasteam.steam.handlers.steamuser.callback.WebAPIUserNonceCallback
import `in`.dragonbra.javasteam.steam.steamclient.callbackmgr.CallbackMsg
import `in`.dragonbra.javasteam.steam.steamclient.callbacks.DisconnectedCallback
import `in`.dragonbra.javasteam.types.AsyncJobSingle
import `in`.dragonbra.javasteam.types.SteamID
import `in`.dragonbra.javasteam.util.HardwareUtils
import `in`.dragonbra.javasteam.util.JavaSteamAddition
Expand Down Expand Up @@ -57,22 +56,21 @@ class SteamUser : ClientMsgHandler() {
* The client should already have been connected at this point.
* Results are returned in a [LoggedOnCallback].
* @param details The details to use for logging on.
* @return The Job ID of the request. This can be used to find the appropriate [LoggedOnCallback]/
* @throws IllegalArgumentException Username or password are not set within [details].
*/
@Throws(IllegalArgumentException::class)
fun logOn(details: LogOnDetails): AsyncJobSingle<LoggedOnCallback> {
fun logOn(details: LogOnDetails) {
if (details.username.isEmpty() || (details.password.isNullOrEmpty() && details.accessToken.isNullOrEmpty())) {
throw IllegalArgumentException("LogOn requires a username and password or access token to be set in 'details'.")
}

val logon = ClientMsgProtobuf<CMsgClientLogon.Builder>(CMsgClientLogon::class.java, EMsg.ClientLogon)

if (!client.isConnected) {
client.postCallback(LoggedOnCallback(EResult.NoConnection, logon.sourceJobID))
return AsyncJobSingle(client, logon.sourceJobID)
client.postCallback(LoggedOnCallback(EResult.NoConnection))
return
}

val logon = ClientMsgProtobuf<CMsgClientLogon.Builder>(CMsgClientLogon::class.java, EMsg.ClientLogon)

val steamID = SteamID(details.accountID, details.accountInstance, client.universe, EAccountType.Individual)

if (details.loginID != null) {
Expand Down Expand Up @@ -144,26 +142,23 @@ class SteamUser : ClientMsgHandler() {
}

client.send(logon)

return AsyncJobSingle(client, logon.sourceJobID)
}

/**
* Logs the client into the Steam3 network as an anonymous user.
* The client should already have been connected at this point.
* Results are returned in a [LoggedOnCallback].
* @param details The details to use for logging on.
* @return The Job ID of the request. This can be used to find the appropriate [LoggedOnCallback]
*/
@JvmOverloads
fun logOnAnonymous(details: AnonymousLogOnDetails = AnonymousLogOnDetails()): AsyncJobSingle<LoggedOnCallback> {
val logon = ClientMsgProtobuf<CMsgClientLogon.Builder>(CMsgClientLogon::class.java, EMsg.ClientLogon)

fun logOnAnonymous(details: AnonymousLogOnDetails = AnonymousLogOnDetails()) {
if (!client.isConnected) {
client.postCallback(LoggedOnCallback(EResult.NoConnection, logon.sourceJobID))
return AsyncJobSingle(client, logon.sourceJobID)
client.postCallback(LoggedOnCallback(EResult.NoConnection))
return
}

val logon = ClientMsgProtobuf<CMsgClientLogon.Builder>(CMsgClientLogon::class.java, EMsg.ClientLogon)

val auId = SteamID(0, 0, client.universe, EAccountType.AnonUser)

logon.protoHeader.clientSessionid = 0
Expand All @@ -177,8 +172,6 @@ class SteamUser : ClientMsgHandler() {
logon.body.machineId = ByteString.copyFrom(HardwareUtils.getMachineID())

client.send(logon)

return AsyncJobSingle(client, logon.sourceJobID)
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,9 @@ class LoggedOffCallback(packetMsg: IPacketMsg) : CallbackMsg() {
SteammessagesClientserverLogin.CMsgClientLoggedOff::class.java,
packetMsg
)
jobID = loggedOff.targetJobID
result = EResult.from(loggedOff.body.eresult)
} else {
val loggedOff = ClientMsg(MsgClientLoggedOff::class.java, packetMsg)
jobID = loggedOff.targetJobID
result = loggedOff.body.result
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import `in`.dragonbra.javasteam.protobufs.steamclient.SteammessagesParentalObjec
import `in`.dragonbra.javasteam.steam.handlers.steamuser.LogOnDetails
import `in`.dragonbra.javasteam.steam.handlers.steamuser.SteamUser
import `in`.dragonbra.javasteam.steam.steamclient.callbackmgr.CallbackMsg
import `in`.dragonbra.javasteam.types.JobID
import `in`.dragonbra.javasteam.types.SteamID
import `in`.dragonbra.javasteam.util.NetHelpers
import `in`.dragonbra.javasteam.util.log.LogManager
Expand Down Expand Up @@ -162,7 +161,6 @@ class LoggedOnCallback : CallbackMsg {
)
val resp = loginResp.body

jobID = loginResp.targetJobID
result = EResult.from(resp.eresult)
extendedResult = EResult.from(resp.eresultExtended)

Expand Down Expand Up @@ -205,16 +203,14 @@ class LoggedOnCallback : CallbackMsg {
clientInstanceId = resp.clientInstanceId
}

constructor(result: EResult, jobID: JobID) {
constructor(result: EResult) {
this.result = result
this.jobID = jobID
}

private fun handleNonProtoLogon(packetMsg: IPacketMsg) {
val loginResp = ClientMsg(MsgClientLogOnResponse::class.java, packetMsg)
val resp = loginResp.body

jobID = loginResp.targetJobID
result = resp.result

outOfGameSecsPerHeartbeat = resp.outOfGameHeartbeatRateSec
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ data class AchievementBlocks(
*/
val hasProgress: Boolean
get() = progressMax != null && progressMax > 0f

/**
* Returns true if this achievement is unlocked.
* An achievement is considered unlocked if it has any non-zero unlock time.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,29 +29,27 @@ public void logOnPostsLoggedOnCallbackWhenNoConnection() {
Mockito.when(steamClient.isConnected()).thenReturn(false);

var details = new LogOnDetails("SuperSecretToken", 0);
var asyncJob = handler.logOn(details);
handler.logOn(details);

var callback = getCallback();
Assertions.assertNotNull(callback);
Assertions.assertEquals(LoggedOnCallback.class, callback.getClass());

var loc = (LoggedOnCallback) callback;
Assertions.assertEquals(EResult.NoConnection, loc.getResult());
Assertions.assertEquals(asyncJob.getJobID(), loc.getJobID());
}

@Test
public void logOnAnonymousPostsLoggedOnCallbackWhenNoConnection() {
Mockito.when(steamClient.isConnected()).thenReturn(false);

var asyncJob = handler.logOnAnonymous();
handler.logOnAnonymous();

var callback = getCallback();
Assertions.assertNotNull(callback);
Assertions.assertEquals(LoggedOnCallback.class, callback.getClass());

var loc = (LoggedOnCallback) callback;
Assertions.assertEquals(EResult.NoConnection, loc.getResult());
Assertions.assertEquals(asyncJob.getJobID(), loc.getJobID());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,15 +42,14 @@ public void logOnPostsLoggedOnCallbackWhenNoConnection() {
var details = new LogOnDetails();
details.setUsername("iamauser");
details.setPassword("lamepassword");
var asyncJob = handler.logOn(details);
handler.logOn(details);

var callback = getCallback();
Assertions.assertNotNull(callback);
Assertions.assertEquals(LoggedOnCallback.class, callback.getClass());

var loc = (LoggedOnCallback) callback;
Assertions.assertEquals(EResult.NoConnection, loc.getResult());
Assertions.assertEquals(asyncJob.getJobID(), loc.getJobID());
}

@Test
Expand Down Expand Up @@ -100,15 +99,14 @@ public void logOnDoesNotThrowExceptionIfUserNameAndAccessTokenProvided() {
public void logOnAnonymousPostsLoggedOnCallbackWhenNoConnection() {
Mockito.when(steamClient.isConnected()).thenReturn(false);

var asyncJob = handler.logOnAnonymous();
handler.logOnAnonymous();

var callback = getCallback();
Assertions.assertNotNull(callback);
Assertions.assertEquals(LoggedOnCallback.class, callback.getClass());

var loc = (LoggedOnCallback) callback;
Assertions.assertEquals(EResult.NoConnection, loc.getResult());
Assertions.assertEquals(asyncJob.getJobID(), loc.getJobID());
}

@Test
Expand Down
Loading