Σε συνέχεια του προηγούμενου post για τους online users, επεκτείνω τον κώδικα για να δείξω πώς μπορούμε να υλοποιήσουμε ένα αρκετά απλό (server side) chat engine.
Στο υλικό που βρήκα ψάχνοντας στο διαδίκτυο αναφέρονται αρκετοί τρόποι και παραδείγματα για την υλοποίηση ενός chat σε ASP .NET. Όμως, τα περισσότερα από αυτά είναι πολύπλοκα και χρονοβόρα στην μελέτη τους. Ένας απλός τρόπος, ο οποίος δεν απαιτεί refresh/reload της σελίδας και όλα φαίνονται καλά στα μάτια του χρήστη (με το μειονέκτημα των συχνών επερωτήσεων στην βάση δεδομένων) εξηγείται πιο κάτω.
Το παράδειγμα αφορά ένα chatroom και μπορεί εύκολα να επεκταθεί για πολλαπλά chatrooms ή για private chatting μεταξύ δύο χρηστών.
ONLINE DEMO: εδώ (Δοκιμάστε με δύο διαφορετικούς browser ταυτόχρονα για να γίνει ένα υποτιπώδες chat)
1. Δημιουργούμε τον ακόλουθο πίνακα στην βάση μας:
2. Δημιουργούμε μια νέα .aspx σελίδα και σε αυτή τοποθετούμε τα ακόλουθα:
- Ένα textbox στο οποίο θα γράφει ο χρήστης το μήνυμα του (newMessageTextBox) και ένα button για την αποστολή του μηνύματος (sendButton)
- Ένα <asp:BoundField /> το οποίο βρίσκεται μέσα σε ένα GridView (messagesGridView), στο οποίο θα κάνουμε bind τα μηνύματα
- Ένα listbox στο οποίο θα εμφανίζονται οι online users (usersInChatListBox)
- Ένα timer που ορίζουμε εμείς όσο θέλουμε το interval (ChatTextTimer) π.χ. κάθε 1 δευτερόλεπτο
- <asp:UpdatePanel ID="ChatUpdatePanel" runat="server" UpdateMode="Always">
- <ContentTemplate>
- <div id="ChatText" style="width: 100%; height: 100%; overflow: auto; text-align: left">
- <asp:GridView ID="messagesGridView" runat="server" Width="100%" AutoGenerateColumns="False">
- <Columns>
- <asp:BoundField Visible="False" DataField="sender" />
- <asp:TemplateField>
- <ItemTemplate>
- <asp:Label ID="msgContentLabel" runat="server" Text='<%#Eval("msgContent")%>'
- Font-Names="calibri" />
- </ItemTemplate>
- </asp:TemplateField>
- <asp:BoundField Visible="false" DataField="isTitle" />
- </Columns>
- </asp:GridView>
- </div>
- </ContentTemplate>
- <Triggers>
- <asp:AsyncPostBackTrigger ControlID="ChatTextTimer" EventName="Tick" />
- <asp:AsyncPostBackTrigger ControlID="SendButton" EventName="Click" />
- </Triggers>
- </asp:UpdatePanel>
- <asp:Timer runat="server" ID="ChatTextTimer" Interval="1000" />
- Online Users:
- <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always">
- <ContentTemplate>
- <asp:ListBox ID="usersInChatListBox" runat="server" Width="100%"
- CssClass="usersinchatstyle" Height="115px">
- </asp:ListBox>
- </ContentTemplate>
- <Triggers>
- <asp:AsyncPostBackTrigger ControlID="ChatTextTimer" EventName="Tick" />
- </Triggers>
- </asp:UpdatePanel>
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου