public static bool IsConnected(this PalaceConnectionState connectionState) { var passiveIdleTimeout_InSeconds = ConfigManager.GetValue <Int16>("PassiveIdleTimeout_InSeconds", 15).Value; var passiveIdleTimeout_Timespan = new TimeSpan(0, 0, passiveIdleTimeout_InSeconds); try { if (connectionState.lastPacketReceived.HasValue && (DateTime.UtcNow.Subtract(connectionState.lastPacketReceived.Value) > passiveIdleTimeout_Timespan)) { return(!connectionState.tcpSocket.Poll(1, SelectMode.SelectRead)); } return(connectionState.tcpSocket.Connected); } catch (SocketException) { return(false); } catch (Exception ex) { ex.DebugLog(); return(false); } }
public static void DropConnection(this PalaceConnectionState connectionState) { try { if (connectionState.sessionState.successfullyConnected) { using (var dbContext = Database.For <ThePalaceEntities>()) { var sqlParam = new SqlParameter("userID", (int)connectionState.sessionState.UserID); dbContext.Database.ExecuteSqlCommand("EXEC Users.FlushUserDetails @userID", sqlParam); } } connectionState.tcpSocket.DropConnection(); connectionState.Dispose(); if (connectionStates.ContainsKey(connectionState.sessionState.UserID)) { lock (connectionStates) { if (connectionStates.ContainsKey(connectionState.sessionState.UserID)) { connectionStates.Remove(connectionState.sessionState.UserID); } } } lock (SessionManager.sessionStates) { if (SessionManager.sessionStates.ContainsKey(connectionState.sessionState.UserID)) { SessionManager.sessionStates[connectionState.sessionState.UserID].Dispose(); SessionManager.sessionStates.Remove(connectionState.sessionState.UserID); } } if (connectionState.sessionState.successfullyConnected) { new Business.MSG_LOGOFF().SendToServer(null, new Message { sessionState = connectionState.sessionState, }); } if (SessionManager.GetRoomUserCount(connectionState.sessionState.RoomID) < 1 && ServerState.roomsCache.ContainsKey(connectionState.sessionState.RoomID)) { ServerState.roomsCache[connectionState.sessionState.RoomID].Flags &= (~(int)RoomFlags.RF_Closed); } } catch (Exception ex) { ex.DebugLog(); } }