Avatar billede SilenceWar Nybegynder
22. marts 2010 - 17:34 Der er 19 kommentarer og
1 løsning

Nedtælling - ASP/MySQL/Java

Hej Eksperter!

Jeg har et stort problem - og jeg vil nu prøve at forklare det bedst muligt.

Jeg er igang med at lave et tekstbaseret browserspil - hvor bygninger kan bygges.

Jeg har brug for en kode der siger, at når jeg trykker på "OPGRADER" - så begynder tiden at gå i fx 10 minutter (timer og dage skulle gerne være muligt også). Når disse 10 minutter er gået skal den gerne opdatere min database-tabel med bygningens level.
(hvis der er mere end 1 ting på venteliste til at blive bygget skal den først igangsatte kun bygges - efterfølgende skal den næste i køen gå igang).

Jeg håber virkelig der er nogen der kan hjælpe mig med dette.
Jeg mener selv dette er et svært og muligvis også tidskrævende spørgsmål - og derfor er der selvfølgelig også lidt flere point end systemet siger der skal være til svære spørgsmål - nemlig 200..

På forhånd tak - Er du i tvivl så spørg endelig!

Med Venlig Hilsen
SilenceWar AkA Benjamin Kock
Avatar billede arne_v Ekspert
22. marts 2010 - 18:01 #1
Det nemmeste er nok at gemme en raekke i en work tabel med en faerdig kolonne som ved indsaettelse saettes til nu+X minutter.

Hver gang der kommer en request laves der saa en:
  SELECT * FROM work WHERE faerdig < nu AND NOT completed
og det arbejde udfoeres.

Tricket er at paa den maade skal du ikke have nogen time/traad koerende.

Og det vil virke helt paa samme maade for spillerne.
Avatar billede SilenceWar Nybegynder
22. marts 2010 - 18:13 #2
Først og fremmest tak for svaret :)

Helt nøjagtigt, hvad er det så du mener?
Og vil metoden virke som en nedtælling? - Altså, så den tæller ned imens man er på siden og ikke kun når der opdateres.?
Avatar billede arne_v Ekspert
22. marts 2010 - 18:23 #3
Hvis der skal laves en lille nedtaelling, saa kan det laves client side i JavaScript.

Bemaerk at modellen forudsaetter at nedtaellingen kun skal ses af en bruger (men resultatet kan ses af alle, naar det er faerdigt).
Avatar billede SilenceWar Nybegynder
22. marts 2010 - 18:29 #4
Når resultatet er færdigt er det stadig kun den person der ejer byen der må kunne se det.
- Nedtællingen skal fungere så brugeren kan se hvornår hans bygning er færdig.

Helt præcist, hvordan skal sådan noget så stilles op? Med en Work side - og måden den bliver indført med ASP?.
Avatar billede arne_v Ekspert
23. marts 2010 - 02:34 #5
En work tabel ikke en work side.

Og jeg er ikke helt klar over hvad du spørger om.

En database INSERT og en database SELECT, hvor resultatet processes på en bestemt måde er helt standard.
Avatar billede SilenceWar Nybegynder
23. marts 2010 - 14:49 #6
Ved at lave en insert og en select får du ikke en nedtælling.?

Det jeg har brug for er, at når jeg trykker på en knap så begynder der en nedtælling på x-antal minutter i databasen. Som selvfølgelig fortsætter selvom brugeren ikke befinder sig på byg siden eller for den skyld er offline mere.
Når tiden når 0 skal den ind og opdatere forskellige værdier i min database.
Jeg benytter mig af Asp og Mysql - og mangler selve koden til at lave denne proces.
Håber du forstår?

- SW
Avatar billede arne_v Ekspert
24. marts 2010 - 03:13 #7
Jo.

Tricket er at du først i hver request kører noget som udfører det der mangler at blive udført. Så virker det som om at det sker i baggrunden.
Avatar billede SilenceWar Nybegynder
24. marts 2010 - 07:33 #8
Er det muligt du kan prøve at ligge en kode herind som skulle kunne lave denne effekt? Selv er jeg stadig i tvivl - hvis du kan så også lige hvad jeg skal smide ind i min worktabel.?
Avatar billede arne_v Ekspert
24. marts 2010 - 14:18 #9
Ja.

Jeg startede faktisk paa en demo i gaar blev ikke faerdig.

Stay tuned.
Avatar billede SilenceWar Nybegynder
24. marts 2010 - 14:53 #10
Det lyder godt :)
glæder mig til det færdige resultat ;)
ved du sådan nogenlunde hvornår det vil være klart, eller er du ikke så langt endnu? :)
Avatar billede arne_v Ekspert
24. marts 2010 - 14:58 #11
Hvis konen ikke har noget jeg skal lave, saa kan jeg arbejde videre i aften.

NB: klokken er kun 9:58 her !
Avatar billede SilenceWar Nybegynder
24. marts 2010 - 15:20 #12
Det er bare i orden :)
Avatar billede arne_v Ekspert
25. marts 2010 - 03:12 #13
tabel worktasks:
  name varchar
  completed boolean
  completetime datetime

simpel ASP demo:

<%
adParamInput = 1
adInteger = 3
adDate = 7
adBoolean = 11
adVarChar = 200
Set con = Server.CreateObject("ADODB.Connection")
con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Databases\MSAccess\Test.mdb;User Id=Admin;Password=;"
' make all tasks completed that are completed
Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = con
cmd.CommandText = "UPDATE worktasks SET completed = true WHERE completetime < NOW()"
cmd.Execute
Set cmd = Nothing
' insert new task
If Not Request.Form("name") Is Nothing Then
    If Request.Form("name") <> "" Then
        Set cmd = Server.CreateObject("ADODB.Command")
        cmd.ActiveConnection = con
        cmd.CommandText = "INSERT INTO worktasks VALUES(@nam,@cmplt,@tim)"
        cmd.Parameters.Append(cmd.CreateParameter("@nam", adVarchar, adParamInput, 50))
        cmd.Parameters.Append(cmd.CreateParameter("@cmplt", adBoolean, adParamInput))
        cmd.Parameters.Append(cmd.CreateParameter("@tim", adDate, adParamInput))
        cmd.Parameters("@nam") = Request.Form("name")
        cmd.Parameters("@cmplt") = false
        cmd.Parameters("@tim") = DateAdd("n", 3, Now()) ' <---- 3 minutes to completion
        cmd.Execute
        Set cmd = Nothing
    End If
End If
' display completed tasks
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "SELECT name FROM worktasks WHERE completed",con
Response.Write "Completed:" & vbCrLf
Response.Write "<ul>" & vbCrLf
Do While Not rs.EOF
    Response.Write "<li>" & rs("name") & "</li>" & vbCrLf
    rs.MoveNext
Loop
Response.Write "</ul>" & vbCrLf
rs.Close
' display tasks in progress
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "SELECT name,completetime FROM worktasks WHERE NOT completed",con
Response.Write "In progress:" & vbCrLf
Response.Write "<ul>" & vbCrLf
Do While Not rs.EOF
    Response.Write "<li>" & rs("name") & " will be done in " & DateDiff("n", Now(), rs("completetime")) & " minutes</li>" & vbCrLf
    rs.MoveNext
Loop
Response.Write "</ul>" & vbCrLf
rs.Close
con.Close
Set rs = Nothing
Set con = Nothing
%>
Add:
<form method="post">
Name: <input type="text" name="name">
<br>
<input type="submit" Value="Save">
</form>

(jeg har brugt Access og ikke MySQL, men det er bare at skifte driveren)
Avatar billede SilenceWar Nybegynder
25. marts 2010 - 09:26 #14
Hejsa.
Den nedtæller - det er korrekt. :)

Er det muligt, at få den til at tælle med sekunder/minutter?
Samtidig spurgte jeg efter en nedtæller som tæller automatisk. Altså, en nedtæller hvor man ikke behøver sidde og opdatere for at se hvornår bygningen er færdig. Er det muligt?
Avatar billede SilenceWar Nybegynder
25. marts 2010 - 09:30 #15
Og kan koden desuden laves så den fungere med link i stedet for en form?
Avatar billede arne_v Ekspert
25. marts 2010 - 14:16 #16
Du kan sagtens faa DateDiff til at vise sekunder.

Hvis du vil have noget paa client uden server roundtrip, saa kan du lave noget JavaScript, men husk at det er kun rent visuelt.
Avatar billede arne_v Ekspert
25. marts 2010 - 14:17 #17
Hvis brugeren ikke skal indtaste et navn, saa kan det sagtens laves som link.
Avatar billede SilenceWar Nybegynder
25. marts 2010 - 14:27 #18
Er opsætningen med det visuelle JavaScript svært at sætte op sammen med din kode?
Okay, det med sekunder og link prøver jeg mig frem med :)

Hvis du lige kan ligge noget med det der Java så har du gjort dig mere end fortjent til at få de point.
Avatar billede arne_v Ekspert
26. marts 2010 - 03:29 #19
Nu er JavaScript ikke lige min stærke side.

Men der er en million milliard eksempler på nettet.

Bl.a.:

http://www.java-scripts.net/javascripts/Countdown-Timer.phtml
Avatar billede arne_v Ekspert
26. marts 2010 - 03:29 #20
Og et svar fra mig.
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