Browse Source

Stop parsing READY twice

tags/docs-0.9
RogueException 9 years ago
parent
commit
ee9045a12d
3 changed files with 26 additions and 24 deletions
  1. +10
    -3
      src/Discord.Net/DiscordClient.cs
  2. +1
    -0
      src/Discord.Net/Models/Profile.cs
  3. +15
    -21
      src/Discord.Net/Net/WebSockets/GatewaySocket.cs

+ 10
- 3
src/Discord.Net/DiscordClient.cs View File

@@ -224,6 +224,7 @@ namespace Discord


ClientAPI.Token = token; ClientAPI.Token = token;
GatewaySocket.Token = token; GatewaySocket.Token = token;
GatewaySocket.SessionId = null;


//Get gateway and check token //Get gateway and check token
try try
@@ -274,6 +275,7 @@ namespace Discord
await GatewaySocket.Disconnect(); await GatewaySocket.Disconnect();
ClientAPI.Token = null; ClientAPI.Token = null;
GatewaySocket.Token = null; GatewaySocket.Token = null;
GatewaySocket.SessionId = null;


_servers.Clear(); _servers.Clear();
_channels.Clear(); _channels.Clear();
@@ -468,6 +470,8 @@ namespace Discord
case "READY": case "READY":
{ {
var data = e.Payload.ToObject<ReadyEvent>(_serializer); var data = e.Payload.ToObject<ReadyEvent>(_serializer);
GatewaySocket.StartHeartbeat(data.HeartbeatInterval);
GatewaySocket.SessionId = data.SessionId;
SessionId = data.SessionId; SessionId = data.SessionId;
PrivateUser = new User(this, data.User.Id, null); PrivateUser = new User(this, data.User.Id, null);
PrivateUser.Update(data.User); PrivateUser.Update(data.User);
@@ -488,6 +492,12 @@ namespace Discord
} }
} }
break; break;
case "RESUMED":
{
var data = e.Payload.ToObject<ResumedEvent>(_serializer);
GatewaySocket.StartHeartbeat(data.HeartbeatInterval);
}
break;


//Servers //Servers
case "GUILD_CREATE": case "GUILD_CREATE":
@@ -1004,9 +1014,6 @@ namespace Discord
case "GUILD_EMOJIS_UPDATE": case "GUILD_EMOJIS_UPDATE":
break; break;


case "RESUMED": //Handled in DataWebSocket
break;

//Others //Others
default: default:
Logger.Warning($"Unknown message type: {e.Type}"); Logger.Warning($"Unknown message type: {e.Type}");


+ 1
- 0
src/Discord.Net/Models/Profile.cs View File

@@ -57,6 +57,7 @@ namespace Discord
var loginResponse = await Client.ClientAPI.Send(loginRequest).ConfigureAwait(false); var loginResponse = await Client.ClientAPI.Send(loginRequest).ConfigureAwait(false);
Client.ClientAPI.Token = loginResponse.Token; Client.ClientAPI.Token = loginResponse.Token;
Client.GatewaySocket.Token = loginResponse.Token; Client.GatewaySocket.Token = loginResponse.Token;
Client.GatewaySocket.SessionId = null;
} }
} }




+ 15
- 21
src/Discord.Net/Net/WebSockets/GatewaySocket.cs View File

@@ -13,11 +13,10 @@ namespace Discord.Net.WebSockets
public sealed class GatewaySocket : WebSocket public sealed class GatewaySocket : WebSocket
{ {
private uint _lastSequence; private uint _lastSequence;
private string _sessionId;
private string _token;
private int _reconnects; private int _reconnects;


public string Token { get { return _token; } internal set { _token = value; _sessionId = null; } }
public string Token { get; internal set; }
public string SessionId { get; internal set; }


public event EventHandler<WebSocketEventEventArgs> ReceivedDispatch = delegate { }; public event EventHandler<WebSocketEventEventArgs> ReceivedDispatch = delegate { };
private void OnReceivedDispatch(string type, JToken payload) private void OnReceivedDispatch(string type, JToken payload)
@@ -36,7 +35,7 @@ namespace Discord.Net.WebSockets
public async Task Connect() public async Task Connect()
{ {
await BeginConnect().ConfigureAwait(false); await BeginConnect().ConfigureAwait(false);
if (_sessionId == null)
if (SessionId == null)
SendIdentify(Token); SendIdentify(Token);
else else
SendResume(); SendResume();
@@ -81,7 +80,7 @@ namespace Discord.Net.WebSockets
{ {
var ex = _taskManager.Exception; var ex = _taskManager.Exception;
if (ex == null || (ex as WebSocketException)?.Code != 1012) //if (ex == null || (ex as WebSocketException)?.Code != 1012) if (ex == null || (ex as WebSocketException)?.Code != 1012) //if (ex == null || (ex as WebSocketException)?.Code != 1012)
_sessionId = null; //Reset session unless close code 1012
SessionId = null; //Reset session unless close code 1012
return base.Cleanup(); return base.Cleanup();
} }


@@ -97,22 +96,12 @@ namespace Discord.Net.WebSockets
{ {
case OpCodes.Dispatch: case OpCodes.Dispatch:
{ {
JToken token = msg.Payload as JToken;
if (msg.Type == "READY")
{
OnReceivedDispatch(msg.Type, msg.Payload as JToken);
if (msg.Type == "READY" || msg.Type == "RESUMED")
{
_reconnects = 0; _reconnects = 0;
var payload = token.ToObject<ReadyEvent>(_serializer);
_sessionId = payload.SessionId;
_heartbeatInterval = payload.HeartbeatInterval;
}
else if (msg.Type == "RESUMED")
{
var payload = token.ToObject<ResumedEvent>(_serializer);
_heartbeatInterval = payload.HeartbeatInterval;
}
OnReceivedDispatch(msg.Type, token);
if (msg.Type == "READY" || msg.Type == "RESUMED")
EndConnect(); //Complete the connect
EndConnect(); //Complete the connect
}
} }
break; break;
case OpCodes.Redirect: case OpCodes.Redirect:
@@ -153,7 +142,7 @@ namespace Discord.Net.WebSockets
} }


public void SendResume() public void SendResume()
=> QueueMessage(new ResumeCommand { SessionId = _sessionId, Sequence = _lastSequence });
=> QueueMessage(new ResumeCommand { SessionId = SessionId, Sequence = _lastSequence });
public override void SendHeartbeat() public override void SendHeartbeat()
=> QueueMessage(new HeartbeatCommand()); => QueueMessage(new HeartbeatCommand());
public void SendUpdateStatus(long? idleSince, string gameName) public void SendUpdateStatus(long? idleSince, string gameName)
@@ -167,6 +156,11 @@ namespace Discord.Net.WebSockets
public void SendRequestMembers(ulong serverId, string query, int limit) public void SendRequestMembers(ulong serverId, string query, int limit)
=> QueueMessage(new RequestMembersCommand { GuildId = serverId, Query = query, Limit = limit }); => QueueMessage(new RequestMembersCommand { GuildId = serverId, Query = query, Limit = limit });


internal void StartHeartbeat(int interval)
{
_heartbeatInterval = interval;
}

//Cancel if either DiscordClient.Disconnect is called, data socket errors or timeout is reached //Cancel if either DiscordClient.Disconnect is called, data socket errors or timeout is reached
public override void WaitForConnection(CancellationToken cancelToken) public override void WaitForConnection(CancellationToken cancelToken)
=> base.WaitForConnection(CancellationTokenSource.CreateLinkedTokenSource(cancelToken, CancelToken).Token); => base.WaitForConnection(CancellationTokenSource.CreateLinkedTokenSource(cancelToken, CancelToken).Token);


Loading…
Cancel
Save