Någon som vet hur man bygger "Agenten". Har hittat ett exempel på en sida men den verkar inte funka lika bra som denna. Har inte orkat ta mig en titt på koden bakom Agenten men jag är ganska säker på att pelle lagrar nya saker i t.ex Application objektet sen använder han sig av en dold IFrame för att kolla efter ny information. Nlär nu information upptäcks så handlar det helt enkelt om ett litet javascript för att visa informationsrutan med den nya händelsen. Du har ingen bra info att lägga till Pelle, för jag känner inte riktigt hur jag ska lösa det. Du laddar in innehållet i din IFrame (den laddar en speciell sida) sen får du använda javascript för att flytta över information till en div som du animerar med lite javascript till. Någon som vet någon artikel eller något sådant om DIV och kunna få upp den från en IFrame med hjälp av javascript. Jag har en känsla av att det enklaste sättet är nog att titta på pelles kod för det ;) Gör såhär: se till att du gör något som normalt sett få agenten att ploppa upp. Se sedan till att du är snabb och laddar den sida som innehåller agenten. Då bör du få lite kod att titta på ;) Idé: Snarare en kombination av Application och Session variabler. Application för meddelande som berör alla (nytt inlägg i forumet på pellesoft) på sidan och Session för användarunikahändelser (nytt iMail på pellesoft). Hur menar du att den här tidssteämplen ska funka. Det där med session tror jag inte kommer att fungera eftersom att du då måste fylla sessionen ifrån den användaren som ska se meddelandet. Det kommer i sin tur ge problem med att om man någon gån kommer vilja skicka ett meddelandefrån en användare/systemet till en annan så går inte det. Därav den fundering jag hade. Tror jag löste det med att användare kan få olika meddelande nu. Antingen genom att veta vilka som rör sig på sidan (de som kommer in efter att meddelandet skickats behöver du ju knappast bry dig om) eller så kör du en global collection, och sedan för varje användare kryssar i att meddelandet har blivit läst. Efter ett tag tas den globala saken bort helt Tror att jag kanske väljer att köra mot en databas ändå istället för mot application. Ja ni, det är ju mångs spår här och jag vet inte om jag tillför något om jag går in och kommenterar lite. I fallet pellesofts agent är det en application som ligger och håller en array. Denna array innehåller först ett postid, userid, ett id för att berätta om det är till 1 person eller alla, samt själva texten som skall visas. Ex: Gessle,Agenten
http://www.codeproject.com/aspnet/asppopup.asp
Hur ska man få den att poppa upp på en sida. Jag får bara den att poppa upp vid en händelse. Och om man lägger in en iFrame som kollar hela tiden om det har hänt något och sen skicka upp agenten, så kommer agenten i denna iframe och inte i hörnet som här på pellesoft.
Någon som har försökt sig på detta och kan hjälpa mig. Kanske Pelle?
Skulle vara väldigt kul att få en sådan här funktion.Sv: Agenten
//AndreasSv: Agenten
Som sagt jag får ju bara min popup ruta i min ifram och inte nere i hörnet på hela min websida som jag vill, och som du har.Sv: Agenten
//AndreasSv: Agenten
Just nu har jag det såhär i min IFrame
<code>
<script language="JavaScript">
function clicken(i)
{
var timer
if(i==1)
{
parent.document.getElementById('DivExample').innerHTML="Good Afternoon";
parent.document.getElementById('DivExample').style.width='100';
setTimeout("clicken(2)",2000)
}
else
{
parent.document.getElementById('DivExample').innerHTML="liten";
parent.document.getElementById('DivExample').style.width='200';
setTimeout("clicken(1)",2000)
}
}</code>
och på min sida
<code>
<div id="DivExample" style="Z-INDEX: 104; LEFT: 592px; OVERFLOW: auto; WIDTH: 128px; POSITION: absolute; TOP: 304px; HEIGHT: 104px">
hej
</div>
</code>
hur ska jag göra för att clicken() ska köras när något speciellt har hänt i databasen.
Man kanske kan göra såhär
parent.document.getElementById('DivExample').innerHTML="<%=Application["Test"]%>";
där när det händer något så uppdaterar man Application objektet och i så fall slänger upp diven
Ska jag ha koden för att rita upp Diven i Iframen i .innerHTML eller ska den finnas på min sida?
Någon som kan hjälpa mig lite på traven.
ska man kanske använda
window.setTimeout("__doPostBack('Button1', '')", 5000);
för att kalla på en funktionSv: Agenten
Sv: Agenten
Sv: Agenten
Använd application-objektet. Skapa sedan en klass som du skapar en instans av i global.asax och stoppar in där. Den här klassen ska hålla koll på sig själv med någon timer eller liknande som kan rensa bort meddelanden som inte har visats. För att lagra meddelandena i den använder du en collection. key i den är id på användaren som ska se meddelandet och value är en instans av en annan collection. Där är t.ex. key tiden då meddelandet skapades/då det ska förstöras och value är meddelandet i sig. Alternativt skapar du en användare klass och stoppar in där om du vill spara mer data.
Den här timern kanske kan gå varje/varannan minut eller något och kolla igenom efter meddelanden som ännu inte visats pga. att användaren inte längre är på sidan eller annat problem. Om en användare inte längre har några meddelanden att visa så bör den collection som innehöll den användarens meddelanden tas bort ifrån huvudcollectionen.
Varje gång ett meddelande visas så ska meddelandet tas bort ifrån användarens collection.
Min idé bara... ;)
Ps.
Funderade lite på om man kunde använda cache-klassen istället eftersom att man kan sätta utgångstid där, men då skulle alla meddelanden behöva lagras i en stor collection, och om det blir många meddelanden så kan det bli segt att hitta rätt meddelande. Men du kan ju göra ett försök, på små saker lär det knappast bli någon enorm skillnad :)
Ds.Sv: Agenten
Spara med en tidsstämpel oxå så att du kan anvgöra om användaren har sett det redan eller inte - mest intressant för saker i Application objektet då de saker Sessions objektet kan plockats bort när det visats för användaren.
//AndreasSv: Agenten
Sätter en key som är Tiden och sen värdet på value. Men hur avgör jag om en använadare har sett det eller inte.
Ska jag aldrig tabort från application objektet
när det är användarunika saker som händer. Om en annan användare tex gör en sak som rör mig. Hur kommer det då in i mitt Session så att det poppar upp hos mig?Sv: Agenten
Självklart finns det nackdelar med den idé jag hade, t.ex. det här med att antalet tillgängliga trådar sjunker pga. timern (som skulle kunna lösas med cache-objektet, eller via anrop ifrån någon sida)Sv: Agenten
Gjorde en collection med userid som key och sen en array i värdet. I den arrayn ligger alla värdena som ska poppa upp för just denna användaren. När de poppat upp så tas de bort ifrån arrayn.
Problemet är nu att kunna fixa utskick som rör alla användare.Sv: Agenten
Sv: Agenten
Sv: Agenten
52 | 38 | 2 | Du har imail
Meddelande 52, till userid 38, 2 = visa endast till personen, 1 betyder visa till alla.
Därefter har jag en funktion där jag addar meddelanden, för att fylla på denna. När jag adderar väljer jag alltså att göra det med alternativet 1 eller 2, samt det meddelandet som gäller.
När personen loggar in får han även ett sessionsobjekt som håller reda på att 52 nu är det id som visats och därför skall han först när meddelande 53 kommer in i poolen få detta under förutsättning att det är till alla och inte någon unik medlem.
Med sessionsobjektet håller jag hela tiden reda på vilket nummer i poolen som visats och på så sätt kan alla användare ha olika pekare in i denna stack.
För att stacken inte skall bli så otroligt stor så tömmer jag den var 100:e meddelande och börjar om igen. Samtidigt sätter jag sessionens pekare också och detta är ju möjligt eftersom jag kör denna rutin var 30:e sekund.
När det gäller iframe så verkar ni ha förstått hur det fungerar, dvs att den via en javascripttimer laddar om sidan och just då kan den ta hänsyn och se om sessionens id är lägre än stacken så skall det visas samt alla efterkommande.
Hoppas detta gav något kött på benen. Jag kommer skriva en artikel sen om detta men så länge det är massa grundläggande prylar som måste fixas till så får detta väntar.. Lycka till.Sv: Agenten
Löste ditt problem sig eller behöver du mer hjälp? Om du är klar med detta problemet så markera inlägget som antingen löst (om du hittat en lösning - skriva gärna vad den var så andra kan ta del av både fråga och svar) eller stängd (om du inte hittat en lösning men problemet inte är aktuellt längre).
Om du inte löst problemet och vill ha mer hjälp så skriv ett inlägg som beskriver var du står idag med problemet (vad du har provat etc) så skall vi se om vi inte kan hitta en lösning.
//Andreas