Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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();
            }
        }