webForumDet fria alternativet

Ändring av chatt

ASPur ASP

7 svar · 231 visningar · startad av webbmannen

webbmannenMedlem sedan dec. 1999826 inlägg
#1

Jag har en liten webbchatt som jag behöver hjälp med att förbättra. Som den är nu så bestäms mängden av visade inlägg av antal skrivna tecken, men jag skulle vilja bestämma detta med antal inlägg istället. Tex att det bara är det tio senaste inläggen som visas.

Bifogar lite kod för visning:

[b]Sidan där texten skrivs in:[/b]
<%
If trim(Request.Form("say")) <> "" Then
Application.Lock
Application("conversation1") = "("&left(time,5)&")&nbsp;<b>" & _
Session("name") & ": </b>" &_
"" & Request.Form("say") & "<br>" & _
Application("conversation1")
Application.Unlock
End If
%>

[b]Sidan som visar snacket:[/b]
<%
Dim convo
convo = Application("conversation1")
If Len(convo) > 2500 Then
convo = Left(convo, 2500)
Application.Lock
Application("conversation1") = convo
End If
Response.Write convo
%>

Gissar att detta räcker för dom som förstår sig på detta - eller?

/webb

------------------
För nyfikna

LarsGMedlem sedan dec. 200012 464 inlägg
#2
<%
If  trim(Request.Form("say")) <> "" Then
    Application.Lock
    Application("conversation1") = "("&left(time,5)&") <b>" & _
                Session("name") & ": </b>" &_
                "" & Request.Form("say") & "<br>" & _
                "{EOT}" & Application("conversation1") 
    Application.Unlock
End If
%>

<%
response.buffer = true
Dim convo,i,pos,offset
Application.Lock
convo = Application("conversation1")
offset = 1
for i = 1 to 10 
    pos = instr(mid(convo,offset),"{EOT}")
    if pos = 0 then exit for
    response.write mid(convo,offset,pos-1)
    offset = offset + pos + 5 
next
if i >= 10 then convo = left(convo,offset-2)
Application("conversation1") = convo
Application.unlock

%>

------------------
essentitia preter non sans multiplicandum

webbmannenMedlem sedan dec. 1999826 inlägg
#3

Tack LarsG!

Fungerar förstås kalasbra :)
Nu hade det varit kanon om jag haft kommentarer inlagda mellan raderna så jag förstod det du gjort, men "hey" man kan inte få allt ;)

Tack igen

/webb

------------------
För nyfikna

LarsGMedlem sedan dec. 200012 464 inlägg
#4
<%
If trim(Request.Form("say")) <> "" Then
Application.Lock
'
'Lägg en avgränsare {EOT} mellan varje inlägg
'
Application("conversation1") = "("&left(time,5)&") <b>" & _
Session("name") & ": </b>" &_
"" & Request.Form("say") & "<br>" & _
"{EOT}" & Application("conversation1") 
Application.Unlock
End If
%>
<%
'
' Sätt buffring så att data skickas 
' när sidan är färdig
'
response.buffer = true
Dim convo,i,pos,offset
Application.Lock
convo = Application("conversation1")
'
' offset innehåller aktuell position
' i convo
'
offset = 1
for i = 1 to 10 
'
' hitta position för avgränsare
'
pos = instr(mid(convo,offset),"{EOT}")
'
' om pos = 0 så fanns inga fler 
' och då hoppar vi ut ur loopen
'
if pos = 0 then exit for
'
' skriv ut det inlägg vi hittade
'
response.write mid(convo,offset,pos-1)
'
' sätt offset till första 
' tecken efter {EOT}
'
offset = offset + pos + 5 
next
'
' det fanns mer än 10 inlägg så
' vi kan slänga resten
' 
if i >= 10 then convo = left(convo,offset-2)
Application("conversation1") = convo
Application.unlock

%>

red: Glömde inledande kod-tag
------------------
essentitia preter non sans multiplicandum

[Redigerat av LarsG den 26 okt 2001]

webbmannenMedlem sedan dec. 1999826 inlägg
#5

Sånt här gör mig :)

Och framtida besökare blir säkert också :) :a

/webb

------------------
För nyfikna

webbmannenMedlem sedan dec. 1999826 inlägg
#6

Den här chatten fungerar så att den visar upp inloggade personer i en extra frame. Sidan uppdateras varje minut med en refresh och originalet plockar bort en inloggad person efter 5 minuters overksamhet.

Jag ville ändra de där 5 minuterna till att istället agera då någon stängde/gick ur sidan. Annars kan resultatet bli att en inloggad person plötsligt tycks försvinna från listan på inloggade personer trots att denne är kvar OCH kan skriva inlägg ( som då sker utan namn ).

Mitt eget misslyckade försök ses nedan och skulle bli glad för hjälp.

<%
If IsArray(Application("users1")) Then
Application.Lock
Dim i, user, usercount
ReDim userArray(UBound(Application("users1")))
usercount = UBound(Application("users1"))

For Each user In Application("users1")
 
[b]eget försök till ändring[/b]
If Not Response.IsClientConnected Then
usercount = usercount - 1
Application("conversation1") = "<b><font face='verdana' color='#f8a55f' size=1>" & _
user(0) & " lämnar chatten</font></b><br>" & Application("conversation1")
Session("name") = Session.Abandon
Else
userArray(i) = Array(user(0), user(1))
Response.Write(user(0) & "<br>")
i = i + 1
End If
  
'[b]originalkoden[/b]
'If DateDiff("s", user(1), Time) > 300 Then
'usercount = usercount - 1
'Application("conversation1") = "<b><font face='verdana' color='#f8a55f' size=1>" & _
'user(0) & " lämnar chatten</font></b><br>" & Application("conversation1")
'Else
'If user(0) = Session("name") Then
'user(1) = Time
'End If
'userArray(i) = Array(user(0), user(1))
'Response.Write(user(0) & "<br>")
'i = i + 1
'End If

Next

If (usercount < 0) Then
Application("users1") = Null
Else
ReDim Preserve userArray(usercount)
Application("users1") = userArray
End If
Application.Unlock
End If
%>

/webb

------------------
För nyfikna

[Redigerat av webbmannen den 26 okt 2001]

LarsGMedlem sedan dec. 200012 464 inlägg
#7

Response.IsClientConnected

gäller bara för den klient som gjort requestet, så den är inte relevant att använda.

I stället så får du nog lägga in en kod i session_onEnd i global.asa som tar bort användare. Du kan nog sätta sesion.timeout lägre än vad som är default (10 eller 20 min).

------------------
essentitia preter non sans multiplicandum

webbmannenMedlem sedan dec. 1999826 inlägg
#8

Okay jag förstår - det får bli global.asa istället.

Tack igen :)

/webb

------------------
För nyfikna

133 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)