@@ -14,7 +14,7 @@ namespace Discord.API | |||||
public class Data | public class Data | ||||
{ | { | ||||
[JsonProperty("idle_since")] | [JsonProperty("idle_since")] | ||||
public ulong? IdleSince; | |||||
public long? IdleSince; | |||||
[JsonProperty("game_id")] | [JsonProperty("game_id")] | ||||
public int? GameId; | public int? GameId; | ||||
} | } | ||||
@@ -92,7 +92,7 @@ namespace Discord.API | |||||
public SocketInfo SocketData = new SocketInfo(); | public SocketInfo SocketData = new SocketInfo(); | ||||
} | } | ||||
} | } | ||||
internal sealed class VoiceKeepAliveCommand : WebSocketMessage<ulong> | |||||
internal sealed class VoiceKeepAliveCommand : WebSocketMessage<long> | |||||
{ | { | ||||
public VoiceKeepAliveCommand() : base(3, EpochTime.GetMilliseconds()) { } | public VoiceKeepAliveCommand() : base(3, EpochTime.GetMilliseconds()) { } | ||||
} | } | ||||
@@ -41,7 +41,7 @@ namespace Discord.API | |||||
} | } | ||||
//Commands | //Commands | ||||
internal sealed class KeepAliveCommand : WebSocketMessage<ulong> | |||||
internal sealed class KeepAliveCommand : WebSocketMessage<long> | |||||
{ | { | ||||
public KeepAliveCommand() : base(1, EpochTime.GetMilliseconds()) { } | public KeepAliveCommand() : base(1, EpochTime.GetMilliseconds()) { } | ||||
} | } | ||||
@@ -297,7 +297,7 @@ namespace Discord | |||||
} | } | ||||
private Task SendStatus() | private Task SendStatus() | ||||
{ | { | ||||
_dataSocket.SendStatus(_status == UserStatus.Idle ? EpochTime.GetMilliseconds() - (10 * 60 * 1000) : (ulong?)null, _gameId); | |||||
_dataSocket.SendStatus(_status == UserStatus.Idle ? EpochTime.GetMilliseconds() - (10 * 60 * 1000) : (long?)null, _gameId); | |||||
return TaskHelper.CompletedTask; | return TaskHelper.CompletedTask; | ||||
} | } | ||||
} | } |
@@ -4,7 +4,8 @@ namespace Discord | |||||
{ | { | ||||
internal class EpochTime | internal class EpochTime | ||||
{ | { | ||||
private static readonly DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); | |||||
public static ulong GetMilliseconds() => (ulong)(DateTime.UtcNow - epoch).TotalMilliseconds; | |||||
private const long epoch = 621355968000000000L; //1/1/1970 in Ticks | |||||
public static long GetMilliseconds() => (DateTime.UtcNow.Ticks - epoch) / TimeSpan.TicksPerMillisecond; | |||||
} | } | ||||
} | } |
@@ -120,7 +120,7 @@ namespace Discord.Net.WebSockets | |||||
return new KeepAliveCommand(); | return new KeepAliveCommand(); | ||||
} | } | ||||
public void SendStatus(ulong? idleSince, int? gameId) | |||||
public void SendStatus(long? idleSince, int? gameId) | |||||
{ | { | ||||
var updateStatus = new UpdateStatusCommand(); | var updateStatus = new UpdateStatusCommand(); | ||||
updateStatus.Payload.IdleSince = idleSince; | updateStatus.Payload.IdleSince = idleSince; | ||||
@@ -36,14 +36,14 @@ namespace Discord.Net.WebSockets | |||||
private ushort _sequence; | private ushort _sequence; | ||||
private long? _serverId, _channelId, _userId; | private long? _serverId, _channelId, _userId; | ||||
private string _sessionId, _token, _encryptionMode; | private string _sessionId, _token, _encryptionMode; | ||||
private ulong _ping; | |||||
private int _ping; | |||||
private Thread _sendThread, _receiveThread; | private Thread _sendThread, _receiveThread; | ||||
public long? CurrentServerId => _serverId; | public long? CurrentServerId => _serverId; | ||||
public long? CurrentChannelId => _channelId; | public long? CurrentChannelId => _channelId; | ||||
public VoiceBuffer OutputBuffer => _sendBuffer; | public VoiceBuffer OutputBuffer => _sendBuffer; | ||||
public int Ping => (int)_ping; | |||||
public int Ping => _ping; | |||||
public VoiceWebSocket(DiscordWSClient client) | public VoiceWebSocket(DiscordWSClient client) | ||||
: base(client) | : base(client) | ||||
@@ -471,9 +471,9 @@ namespace Discord.Net.WebSockets | |||||
break; | break; | ||||
case 3: //PONG | case 3: //PONG | ||||
{ | { | ||||
ulong time = EpochTime.GetMilliseconds(); | |||||
var payload = (ulong)(long)msg.Payload; | |||||
_ping = payload - time; | |||||
long time = EpochTime.GetMilliseconds(); | |||||
var payload = (long)msg.Payload; | |||||
_ping = (int)(payload - time); | |||||
//TODO: Use this to estimate latency | //TODO: Use this to estimate latency | ||||
} | } | ||||
break; | break; | ||||