census update
This commit is contained in:
@@ -13,5 +13,7 @@ public class ServerConfig : IMareConfiguration
|
|||||||
{ new ServerStorage() { ServerName = ApiController.MainServer, ServerUri = ApiController.MainServiceUri } },
|
{ new ServerStorage() { ServerName = ApiController.MainServer, ServerUri = ApiController.MainServiceUri } },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public bool SendCensusData { get; set; } = true;
|
||||||
|
|
||||||
public int Version { get; set; } = 1;
|
public int Version { get; set; } = 1;
|
||||||
}
|
}
|
||||||
@@ -99,6 +99,10 @@ public sealed class GameObjectHandler : DisposableMediatorSubscriberBase
|
|||||||
ModelFilesInSlotLoaded
|
ModelFilesInSlotLoaded
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public byte RaceId { get; private set; }
|
||||||
|
public byte Gender { get; private set; }
|
||||||
|
public byte TribeId { get; private set; }
|
||||||
|
|
||||||
public IntPtr Address { get; private set; }
|
public IntPtr Address { get; private set; }
|
||||||
public string Name { get; private set; }
|
public string Name { get; private set; }
|
||||||
public ObjectKind ObjectKind { get; }
|
public ObjectKind ObjectKind { get; }
|
||||||
@@ -253,6 +257,19 @@ public sealed class GameObjectHandler : DisposableMediatorSubscriberBase
|
|||||||
if (((DrawObject*)DrawObjectAddress)->Object.GetObjectType() == ObjectType.CharacterBase
|
if (((DrawObject*)DrawObjectAddress)->Object.GetObjectType() == ObjectType.CharacterBase
|
||||||
&& ((CharacterBase*)DrawObjectAddress)->GetModelType() == CharacterBase.ModelType.Human)
|
&& ((CharacterBase*)DrawObjectAddress)->GetModelType() == CharacterBase.ModelType.Human)
|
||||||
{
|
{
|
||||||
|
var gender = ((Human*)DrawObjectAddress)->Customize.Sex;
|
||||||
|
var raceId = ((Human*)DrawObjectAddress)->Customize.Race;
|
||||||
|
var tribeId = ((Human*)DrawObjectAddress)->Customize.Clan;
|
||||||
|
|
||||||
|
if (_isOwnedObject && ObjectKind == ObjectKind.Player
|
||||||
|
&& (gender != Gender || raceId != RaceId || tribeId != TribeId))
|
||||||
|
{
|
||||||
|
Mediator.Publish(new CensusUpdateMessage(gender, raceId, tribeId));
|
||||||
|
Gender = gender;
|
||||||
|
RaceId = raceId;
|
||||||
|
TribeId = tribeId;
|
||||||
|
}
|
||||||
|
|
||||||
customizeDiff = CompareAndUpdateCustomizeData(((Human*)DrawObjectAddress)->Customize.Data);
|
customizeDiff = CompareAndUpdateCustomizeData(((Human*)DrawObjectAddress)->Customize.Data);
|
||||||
if (customizeDiff)
|
if (customizeDiff)
|
||||||
Logger.LogTrace("Checking [{this}] customize data as human from draw obj, result: {diff}", this, customizeDiff);
|
Logger.LogTrace("Checking [{this}] customize data as human from draw obj, result: {diff}", this, customizeDiff);
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ public record OpenBanUserPopupMessage(Pair PairToBan, GroupFullInfoDto GroupFull
|
|||||||
public record OpenSyncshellAdminPanel(GroupFullInfoDto GroupInfo) : MessageBase;
|
public record OpenSyncshellAdminPanel(GroupFullInfoDto GroupInfo) : MessageBase;
|
||||||
public record OpenPermissionWindow(Pair Pair) : MessageBase;
|
public record OpenPermissionWindow(Pair Pair) : MessageBase;
|
||||||
public record DownloadLimitChangedMessage() : SameThreadMessage;
|
public record DownloadLimitChangedMessage() : SameThreadMessage;
|
||||||
|
public record CensusUpdateMessage(byte Gender, byte RaceId, byte TribeId) : MessageBase;
|
||||||
|
|
||||||
#pragma warning restore S2094
|
#pragma warning restore S2094
|
||||||
#pragma warning restore MA0048 // File name must match type name
|
#pragma warning restore MA0048 // File name must match type name
|
||||||
@@ -31,6 +31,18 @@ public class ServerConfigurationManager
|
|||||||
|
|
||||||
public string CurrentApiUrl => CurrentServer.ServerUri;
|
public string CurrentApiUrl => CurrentServer.ServerUri;
|
||||||
public ServerStorage CurrentServer => _configService.Current.ServerStorage[CurrentServerIndex];
|
public ServerStorage CurrentServer => _configService.Current.ServerStorage[CurrentServerIndex];
|
||||||
|
public bool SendCensusData
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _configService.Current.SendCensusData;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_configService.Current.SendCensusData = value;
|
||||||
|
_configService.Save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public int CurrentServerIndex
|
public int CurrentServerIndex
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -806,7 +806,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
|
|||||||
if (ApiController.ServerAlive)
|
if (ApiController.ServerAlive)
|
||||||
{
|
{
|
||||||
UiSharedService.FontText("Service Actions", _uiShared.UidFont);
|
UiSharedService.FontText("Service Actions", _uiShared.UidFont);
|
||||||
|
ImGuiHelpers.ScaledDummy(new Vector2(5, 5));
|
||||||
if (ImGui.Button("Delete all my files"))
|
if (ImGui.Button("Delete all my files"))
|
||||||
{
|
{
|
||||||
_deleteFilesPopupModalShown = true;
|
_deleteFilesPopupModalShown = true;
|
||||||
@@ -884,6 +884,21 @@ public class SettingsUi : WindowMediatorSubscriberBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
UiSharedService.FontText("Service & Character Settings", _uiShared.UidFont);
|
UiSharedService.FontText("Service & Character Settings", _uiShared.UidFont);
|
||||||
|
ImGuiHelpers.ScaledDummy(new Vector2(5, 5));
|
||||||
|
var sendCensus = _serverConfigurationManager.SendCensusData;
|
||||||
|
if (ImGui.Checkbox("Send Statistical Census Data", ref sendCensus))
|
||||||
|
{
|
||||||
|
_serverConfigurationManager.SendCensusData = sendCensus;
|
||||||
|
}
|
||||||
|
UiSharedService.DrawHelpText("This will allow sending census data to the currently connected service." + UiSharedService.TooltipSeparator
|
||||||
|
+ "Census data contains:" + Environment.NewLine
|
||||||
|
+ "- Current World" + Environment.NewLine
|
||||||
|
+ "- Current Gender" + Environment.NewLine
|
||||||
|
+ "- Current Race" + Environment.NewLine
|
||||||
|
+ "- Current Clan (this is not your Free Company, this is e.g. Keeper or Seeker for Miqo'te)" + UiSharedService.TooltipSeparator
|
||||||
|
+ "The census data is only saved temporarily and will be removed from the server on disconnect. It is stored temporarily associated with your UID while you are connected." + UiSharedService.TooltipSeparator
|
||||||
|
+ "If you do not wish to participate in the statistical census, untick this box and reconnect to the server.");
|
||||||
|
ImGuiHelpers.ScaledDummy(new Vector2(10, 10));
|
||||||
|
|
||||||
var idx = _uiShared.DrawServiceSelection();
|
var idx = _uiShared.DrawServiceSelection();
|
||||||
|
|
||||||
|
|||||||
@@ -41,9 +41,9 @@ public partial class ApiController
|
|||||||
await CreateConnections().ConfigureAwait(false);
|
await CreateConnections().ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<OnlineUserIdentDto>> UserGetOnlinePairs()
|
public async Task<List<OnlineUserIdentDto>> UserGetOnlinePairs(CensusDataDto? censusDataDto)
|
||||||
{
|
{
|
||||||
return await _mareHub!.InvokeAsync<List<OnlineUserIdentDto>>(nameof(UserGetOnlinePairs)).ConfigureAwait(false);
|
return await _mareHub!.InvokeAsync<List<OnlineUserIdentDto>>(nameof(UserGetOnlinePairs), censusDataDto).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<UserFullPairDto>> UserGetPairedClients()
|
public async Task<List<UserFullPairDto>> UserGetPairedClients()
|
||||||
@@ -128,7 +128,16 @@ public partial class ApiController
|
|||||||
sb.AppendLine($"GlamourerData for {item.Key}: {!string.IsNullOrEmpty(item.Value)}");
|
sb.AppendLine($"GlamourerData for {item.Key}: {!string.IsNullOrEmpty(item.Value)}");
|
||||||
}
|
}
|
||||||
Logger.LogDebug("Chara data contained: {nl} {data}", Environment.NewLine, sb.ToString());
|
Logger.LogDebug("Chara data contained: {nl} {data}", Environment.NewLine, sb.ToString());
|
||||||
await UserPushData(new(visibleCharacters, character)).ConfigureAwait(false);
|
|
||||||
|
CensusDataDto? censusDto = null;
|
||||||
|
if (_serverManager.SendCensusData && _lastCensus != null)
|
||||||
|
{
|
||||||
|
var world = await _dalamudUtil.GetWorldIdAsync().ConfigureAwait(false);
|
||||||
|
censusDto = new((ushort)world, _lastCensus.RaceId, _lastCensus.TribeId, _lastCensus.Gender);
|
||||||
|
Logger.LogDebug("Attaching Census Data: {data}", censusDto);
|
||||||
|
}
|
||||||
|
|
||||||
|
await UserPushData(new(visibleCharacters, character, censusDto)).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#pragma warning restore MA0040
|
#pragma warning restore MA0040
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
using MareSynchronos.API.Data;
|
using MareSynchronos.API.Data;
|
||||||
using MareSynchronos.API.Data.Extensions;
|
using MareSynchronos.API.Data.Extensions;
|
||||||
using MareSynchronos.API.Dto;
|
using MareSynchronos.API.Dto;
|
||||||
|
using MareSynchronos.API.Dto.User;
|
||||||
using MareSynchronos.API.SignalR;
|
using MareSynchronos.API.SignalR;
|
||||||
using MareSynchronos.PlayerData.Pairs;
|
using MareSynchronos.PlayerData.Pairs;
|
||||||
using MareSynchronos.Services;
|
using MareSynchronos.Services;
|
||||||
@@ -34,6 +35,7 @@ public sealed partial class ApiController : DisposableMediatorSubscriberBase, IM
|
|||||||
private string? _lastUsedToken;
|
private string? _lastUsedToken;
|
||||||
private HubConnection? _mareHub;
|
private HubConnection? _mareHub;
|
||||||
private ServerState _serverState;
|
private ServerState _serverState;
|
||||||
|
private CensusUpdateMessage? _lastCensus;
|
||||||
|
|
||||||
public ApiController(ILogger<ApiController> logger, HubFactory hubFactory, DalamudUtilService dalamudUtil,
|
public ApiController(ILogger<ApiController> logger, HubFactory hubFactory, DalamudUtilService dalamudUtil,
|
||||||
PairManager pairManager, ServerConfigurationManager serverManager, MareMediator mediator,
|
PairManager pairManager, ServerConfigurationManager serverManager, MareMediator mediator,
|
||||||
@@ -52,6 +54,7 @@ public sealed partial class ApiController : DisposableMediatorSubscriberBase, IM
|
|||||||
Mediator.Subscribe<HubReconnectedMessage>(this, async (msg) => await MareHubOnReconnected().ConfigureAwait(false));
|
Mediator.Subscribe<HubReconnectedMessage>(this, async (msg) => await MareHubOnReconnected().ConfigureAwait(false));
|
||||||
Mediator.Subscribe<HubReconnectingMessage>(this, (msg) => MareHubOnReconnecting(msg.Exception));
|
Mediator.Subscribe<HubReconnectingMessage>(this, (msg) => MareHubOnReconnecting(msg.Exception));
|
||||||
Mediator.Subscribe<CyclePauseMessage>(this, (msg) => _ = CyclePause(msg.UserData));
|
Mediator.Subscribe<CyclePauseMessage>(this, (msg) => _ = CyclePause(msg.UserData));
|
||||||
|
Mediator.Subscribe<CensusUpdateMessage>(this, (msg) => _lastCensus = msg);
|
||||||
|
|
||||||
ServerState = ServerState.Offline;
|
ServerState = ServerState.Offline;
|
||||||
|
|
||||||
@@ -348,7 +351,15 @@ public sealed partial class ApiController : DisposableMediatorSubscriberBase, IM
|
|||||||
|
|
||||||
private async Task LoadOnlinePairs()
|
private async Task LoadOnlinePairs()
|
||||||
{
|
{
|
||||||
foreach (var entry in await UserGetOnlinePairs().ConfigureAwait(false))
|
CensusDataDto? dto = null;
|
||||||
|
if (_serverManager.SendCensusData && _lastCensus != null)
|
||||||
|
{
|
||||||
|
var world = await _dalamudUtil.GetWorldIdAsync().ConfigureAwait(false);
|
||||||
|
dto = new((ushort)world, _lastCensus.RaceId, _lastCensus.TribeId, _lastCensus.Gender);
|
||||||
|
Logger.LogDebug("Attaching Census Data: {data}", dto);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var entry in await UserGetOnlinePairs(dto).ConfigureAwait(false))
|
||||||
{
|
{
|
||||||
Logger.LogDebug("Pair online: {pair}", entry);
|
Logger.LogDebug("Pair online: {pair}", entry);
|
||||||
_pairManager.MarkPairOnline(entry, sendNotif: false);
|
_pairManager.MarkPairOnline(entry, sendNotif: false);
|
||||||
|
|||||||
Reference in New Issue
Block a user