Avatar billede jespernerd Nybegynder
15. juni 2009 - 09:47 Der er 13 kommentarer

Udregne onlinetid i applet

Hej.
Jeg er igang med et spil, og ønsker, at man kan udregne hvor lang tid en bruger har været online i spillet.

Hvordan gøres dette?

Ligenu opdatere den MySQL hvert 10 minut, men det er ikke brugbart, da det vil kikse og brugeren vil miste minutter efter blot 7 minutter.

Skal man sætte unix time ved login og slutning eller hvordan kan jeg fikse dette?
Avatar billede arne_v Ekspert
15. juni 2009 - 10:10 #1
Du kan enten maale det client side i applet eller server side.

Henholdsvis gem starttid i applet init og opdatere online tid i destroy og gem starttid i session ved login og opdater online tid ved session slut.
Avatar billede jespernerd Nybegynder
15. juni 2009 - 10:17 #2
Så altså unix_time() ved login i et felt? OnlineTimeStart f.eks.
Og når brugeren slukker appleten sætter den unix_time() i OnlineTimeEnd. Skal den så opdatere disse felter hver gang? I såfald, udregner den ikke forrige tid (hvis man var på i går f.eks), men kun de nye.
Avatar billede dstjulle Nybegynder
15. juni 2009 - 11:09 #3
skal lige høre om det kun er java du vil have det i ( jeg har det i php hvis det kan hjælp )
Avatar billede arne_v Ekspert
15. juni 2009 - 11:32 #4
Du skal nok have en tabel med sessionid,brugerid,starttid,sluttid og saa indsaette en raekke per session og beregne akkumuleret tid.
Avatar billede jespernerd Nybegynder
15. juni 2009 - 12:56 #5
dstjulle, det løsningen jeg ønsker, så php kan godt gå hvis du kan forklare hvad du gør.

arne_v > det vil bruge for mange mysql ressourcer. Kan det ikke gøres med 3 felter?

OnlineTimeStart, OnlineTimeEnd og et felt mere, som forklarer timerne i alt. F.eks når brugeren logger ind sætter den unix_time() og ved slut udregner den starttiden+slutningen og ligger oveni det sidste felt, som beskriver alle timerne?

Lyder det helt forkert, eller har i en bedre løsning?
Avatar billede arne_v Ekspert
15. juni 2009 - 14:37 #6
Det kunne det godt, men det vil vaere en overtraedelse af alle regler for database design.

Hvorfor tror du at det vil bruge for mange database resourcer?
Avatar billede jespernerd Nybegynder
15. juni 2009 - 16:29 #7
Hvis der er 20.000 logs om dagen og den skal hente data fra tabellen? Det bliver mange i sidste ende
Avatar billede arne_v Ekspert
15. juni 2009 - 21:19 #8
Det bliver 175 MB om aaret. Det kan database serveren cache i memory (medmindre det er en 9 kroner om maaneden web hotel database server).

Men er det et problem saa akkummulerer du i et felt totaltid. I bruger tabellen - ikke i denne sessions tabel.
Avatar billede jespernerd Nybegynder
16. juni 2009 - 12:02 #9
Det ikke et problem - jeg har egen dedikeret server.

Kan du komme med en god løsning som ikke opretter tusindvis af felter, men blot opdaterer brugertabellen?

Start, slut - hvordan skal det se ud? Altså udregning. unix_time() og hvad så?
Avatar billede dstjulle Nybegynder
17. juni 2009 - 10:22 #10
jeg har 2 file som gør det hele

til logind
<?php
SESSION_START ();

    $tjek = mysql_query("SELECT totallog FROM brugere WHERE brugernavn ='$_SESSION[bruger]' LIMIT 1") or die(mysql_error());
   
    $total = mysql_fetch_array($tjek);


    echo "Du bliver nu loget ind.";
   
//her skal vi have brugerens ip og sat den i DB

$ip = $_SERVER['REMOTE_ADDR'];

//her skal vi have laver en time så skal sættes ind i DB

$date = time(U);

// status på om man er online eller je

$online = '1';

mysql_query("update brugere set ip_log = '$ip', totallog = totallog+1, login = $date, online = '$online' where brugernavn = '$_SESSION[bruger]'")or die(mysql_error());

?>
og logud

<?php
session_start();
include 'inc/config.inc.php';
$bruger = $_SESSION["bruger"]; // Forkorter Sessionen brugernavn

        $tid = time(U);
        $ip = $_SERVER['REMOTE_ADDR'];
    mysql_query("update brugere set online = '2' where brugernavn ='$bruger'")or die(mysql_error());
    mysql_query("update brugere set logout = '$tid' where brugernavn ='$bruger'")or die(mysql_error());

    $query = mysql_query("SELECT * FROM brugere WHERE brugernavn = '$bruger' AND kodeord = '$kodeord' LIMIT 1") or die(mysql_error());
   
    $row = mysql_fetch_array($query);

    mysql_query("update brugere set total_tid=total_tid+(logout-login) where brugernavn ='$bruger'"); // Opdatere totaltid

$_SESSION['login'] = '';
$_SESSION['bruger'] = '';

session_destroy();


header("Location: index.php");

?>

det virker ved mig skrive hvis du skal have mere hjælp
Avatar billede jespernerd Nybegynder
18. juni 2009 - 13:17 #11
Ok, jeg sætter en time() ved applet-start og udregner når clienten lukkes. time() fra session - nuværende time().

Men arne_v, hvordan udregner jeg så hvis en spiller skal have 1 dollar i timen? Hvad hvis han logger ud efter 20 minutter, så skal den vel også gemme disse oplysninger til næste gang.?

Svar bedes, tak!
Avatar billede jespernerd Nybegynder
18. juni 2009 - 13:21 #12
Avatar billede arne_v Ekspert
18. juni 2009 - 21:10 #13
Du vaelger vel at gemme sekunder. Saa kan du altid runde af/ned/op til timer.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester