public void Disconnect(int code)
{
// Make sure we arent disposed
if (Disposed) return;
// Update database session
if (Status == LoginStatus.Completed && code < 9)
{
try
{
using (GamespyDatabase Database = new GamespyDatabase())
Database.Execute("UPDATE accounts SET session=0 WHERE id=" + PlayerId);
}
catch
{
// We could be shutting this server down because of DB connection issues, don't do anything here.
}
}
// Unregister for stream events and close the connection
Stream.OnDisconnect -= Stream_OnDisconnect;
Stream.DataReceived -= Stream_DataReceived;
Stream.Close(code == 9);
// Set status and log
if (code == 1 && Status == LoginStatus.Processing)
GpcmServer.Log("Login Timeout: {0} - {1} - {2}", PlayerNick, PlayerId, RemoteEndPoint);
else if (Status != LoginStatus.Disconnected)
GpcmServer.Log("Client Logout: {0} - {1} - {2}, Code={3}", PlayerNick, PlayerId, RemoteEndPoint, code);
// Preapare to be unloaded from memory
Status = LoginStatus.Disconnected;
Disposed = true;
// Call disconnect event
if (OnDisconnect != null)
OnDisconnect(this);
}