Vorwort
Im vorherigen Artikel, Spring Start + Layim + T-IO-Datei-Upload und -AnuS-Benutzer-Status, wurden zwei kleine Details eingeführt: den Offline-Status des Benutzers und die Statusänderungen in der Anzahl der Personen. Der heutige Hauptinhalt ist die Implementierung von Benutzern, die Freunde hinzufügen.
Einführung
Fügen Sie Freunde hinzu. Jeder weiß, dass er QQ verwendet hat. Es ist nichts weiter, als eine Freundschaftsanwendung zu starten. Die andere Partei erhält eine Nachrichtenbenachrichtigung und verarbeitet sie dann. In diesem Artikel geht jedoch nur über die erste Hälfte aus, und die Verarbeitung von Nachrichtenbenachrichtigungen wird dem nächsten Artikel überlassen. Da der Inhalt ein bisschen zu viel ist, fürchte ich, ich kann ihn für eine Weile nicht verdauen. Lassen Sie mich vor dem Einführung des Hauptprozesses Ihnen zuerst die Vorbereitungsarbeiten vorstellen.
Vorbereitung
Um die Daten näher am tatsächlichen Kampf zu bringen, habe ich zunächst mehr "reale" Benutzerdaten verwendet. In Kombination mit der Fliegenvorlage wird die Datenbindung von Benutzerinformationen im Benutzerzentrumkopf verbessert. Der Datenbindungsteil bestimmt, ob Sie bereits ein Freund sind, um zu entscheiden, ob die Schaltfläche "Als Freund hinzufügen" erscheint. Das Beispiel lautet wie folgt: Wenn ein Benutzer seine Homepage alleine sieht, ist es so:
Wenn Sie die Homepage des Benutzers sehen, die kein Freund ist, sieht es so aus:
Lassen Sie mich Ihnen den Bindungsdatenteil kurz vorstellen, um die Thymleaf -Vorlage zum Binden zu verwenden. Wenn Sie auf die Seite im Hintergrund zugreifen, weisen Sie einfach den Modellwert zu.
/ *** Attributzuweisung**/ private void setModel (Benutzerbenutzer, Modellmodell) {Long CurrentUSerID = getUerId (); Long VisitUSerID = user.getId (); // Ist es dein eigener boolean isself = currentUserid == VisitUserid; // ob die beiden Benutzer bereits Freunde boolean isfriend = gruppenservice.isfriend (currentUerId, VisituSerId); Karte <String, Object> UsMap = New HashMap <> (8); usermap.put ("avatar", user.getavatar ()); usermap.put ("name", user.getUnername ()); usermap.put ("addtime", timeutil.formatdate (user.getCreateat ())+"join"); if (user.getSign () == null || user.getSign (). Länge () == 0) {usermap.put ("Zeichen", ""); } else {usermap.put ("sign", "(" + user.getSign () + ")"); } usermap.put ("uid", user.getId ()); usermap.put ("self", isself || isfriend); model.addattribute ("Benutzer", usermap); }Extrahieren Sie dann auf der Seite die Daten aus dem Modell.
<div style = "Hintergrund-Image: url ();"> <Eingabe type = "Hidden" th: value = "$ {user.uid}" id = "Visituid"/> <img src = "" th: src = "$ {user.avatar}" th: alt = "$ {user. th: text = "$ {user.name}"> </p> <i> </i> </h1> <p> <!-<i> </i> <span style = "color: #ff7200; Hangzhou </span>-> <i th: if = "$ {user.self == false}"> </i> <a lay-event = "addFriet" href = "#" rel = "externe nofollow" th: if = "$ {userOK, das obige ist die einfache Vorbereitung. Wenn Sie den detaillierten Code kennen möchten, können Sie am Ende des Artikels danach suchen.
Eine Freundschaftsanwendung einleiten
Folgen wir zuerst die Geschäftsanalyse von Layim. Zunächst müssen wir wissen, wer (toid) wir als Freunde hinzufügen wollen. Dann fügen Sie eine Bemerkung hinzu. Es ist in Ordnung, diese Dinge dem Backend zu übergeben. Um Tischanfragen zu vermeiden, habe ich den redundanten Benutzernamen und den Benutzer Avatar zum Speichern von Systemnachrichten gemacht. Die Tabelle enthält hauptsächlich Felder: Benutzer -ID, Benutzer -Avatar, Benutzername, angewandte Benutzer -ID, Anwendungszeit, Anwendungsart, Notizen, Lesen und andere Attribute.
Daher ist es sehr einfach, eine Freundschaftsanwendung zu initiieren. Es ist eine zusätzliche Funktion. Das Front-End übergibt die Benutzer-ID und die Anwendungshinweise des Befragten. Das Back-End organisiert die Daten, die in die Datenbank eingefügt werden sollen. Der Code ist wie folgt:
/ *** eine Freundschaftsantrag einreichen**/ public JSonResult SavefriendApply (lange Toid, String Bemerkung). Contextuser user = shiroutil.getCurrentuser (); long userId = long.parselong (user.getUerId ()); int record = applyRepository.countBytoidAnduidandTypeAnDresult (Toid, userId, applyType.friend, 0); if (record> 0) {return jsonResult.fail ("After Applied"); } Anwenden anwenden = neu anwenden (); apply.setType (applyType.friend); anwenden.settoid (toid); anwenden.setRemark (Bemerkung); anwenden.setuid (userId); apply.setavatar (user.getAvatar ()); anwenden.setName (user.getUnername ()); anwenden.setRead (false); anwenden.setResult (0); Return SaveApply (bewerben); }Ok, die Anwendung ist vorbei, was werden wir als nächstes tun? Das ist richtig, benachrichtigt die andere Partei, hey, ich habe Ihnen eine Bewerbung geschickt und sie schnell verarbeitet. Ich habe hier auf ein Problem gestoßen. Da das Springboot-Programm Port 8080 und T-IO in Port 8888 einnimmt, weiß ich nicht, wie ich den entsprechenden ChannelContext erhalten kann, wenn ich den Service-Push von 8888 im Geschäft von Port 8080 aktiv anrufen möchte. Nachdem ich den Autor gefragt hatte, wurde mein Problem in einem Satz gelöst.
Holen Sie sich ServerGroupContext und das Problem ist gelöst.
Die LayimwebsocketStarter -Bean wurde bei der Start des vorherigen Programms registriert. Wenn Sie es also auf der 8080 -Geschäftsseite bekommen können, wird es kein Problem geben.
Holen Sie sich den LayimwebocketStarter, Sie können den ServerGroupContext erhalten und dann aktiv auf den Server schieben.
Natürlich wurde dieses Ding möglicherweise nicht entwickelt, und ich verstehe das obige Problem nicht sehr gut. Es spielt keine Rolle. Tatsächlich möchte ich erklären, dass Sie einfach ServerGroupContext verwenden, wenn Sie von der Serverseite aktiv Nachrichten an den Client übergeben.
Aktiver Druck auf den Server
Der folgende Code ist in com.fyp.layim.im.common.util.pushutil
OK, befolgen Sie die obigen Schritte.
Der erste Schritt besteht darin, den Layimwebsocketstarter zu erhalten.
/*** Starter erhalten*/private statische LayimwebsocketStarter getStarter () {return (layimwebsocketstarter) springutil.getbean ("layimwebsocketstarter"); }Schritt 2: Holen Sie sich ServerGroupContext
private static serverGroupContext getServerGroupContext () {return getStarter (). getServerGroupContext (); }Der dritte Schritt besteht darin, den ChannelContext zu erhalten.
/ ** * Get ChannelContext * */ private static ChannelContext getChannelContext (String toid) {ServerGroupContext context = getServerGroupContext (); // Finden Sie den User ChannelContext ChannelContext = context.users.find (Kontext, TOID); return ChannelContext; }Der vierte Schritt besteht darin, zu starten, und der Code hier ist fast der Teil des Codes im Chat. Der Kernteil besteht darin, den ChannelContext zu erhalten und ihm dann eine Nachricht zu senden. Wenn Sie nicht online sind, mach dir keine Sorgen.
/ *** Der Server drückt aktiv Nachrichten**/ public static void pushApplymessage (String toid) {logger.info ("Senden Sie die Methode aus: pushapplymessage"); LayimtoclientNoticemsgbody body = new LayimtoclientNoticemsgbody (); ChannelContext ChannelContext = getChannelContext (TOID); // Bestimmen Sie zuerst, ob es online ist, und fragen Sie dann die Datenbank ab, um die Anzahl der Abfragen zu reduzieren, wenn (ChannelContext! Body.SetCount (Graf); Push (ChannelContext, Körper); }} / *** Server drückt aktiv Nachrichten** / private static void push (ChannelContext ChannelContext, Object msg) {try {wsResponse response = bodyconvert.getInstance (). ConvertToTexTesponse (msg); AIO.Send (ChannelContext, Antwort); } catch (ioException ex) {}}Jetzt, da der Druck erledigt ist, wann wird er dann gedrückt? Da der Druck von Nachrichten in diesem System nicht so sofort sein muss, habe ich einen Blick darauf geworfen und festgestellt, dass es im Springboot einen ähnlichen Ereignismechanismus gibt, also wurde ApplyEvent geboren.
public class applyEvent erweitert ApplicationEvent {public ApplyEvent (Objektquelle) {Super (Quelle); } private lange Toid; public Long Gettoid () {return toid; } public ApplyEvent (Objektquelle, lange Toid) {Super (Quelle); this.toid = toid; }}Erstellen Sie einen Hörer, um Ereignisse zu hören.
public class anwendungsListener implementiert applicationListener <anwendenEvent> {private logger logger = loggerfactory.getLogger (applyListener.class); @Override public void onapplicationEvent (applyEvent applyEvent) {new thread () {public void run () {long Toid = applyEvent.gettoid (); // hier nennen wir den oberhalb von pushutil.pushapplymessage (toid.tostring ()); } }.Start(); }}Ich habe jedoch eine Frage und stellte fest, dass die Ausführung im Hörer synchron ist. Später war das Hinzufügen von @aSync und @enableAsync nutzlos. Deshalb habe ich einen neuen Thread (). Start () verwendet, um Asynchronität zu erreichen, um sicherzustellen, dass es den Hauptantragsverfahren nicht beeinflusst. (Dies ist eine Frage, ich habe es nicht herausgefunden)
Vergessen Sie nicht, den Hörer hinzuzufügen, wenn die Anwendung beginnt.
public static void main (String [] args) {Springapplication Springapplication = neue Springapplication (LayImapplication.Class); / *** Nur wenn der Hörer hier hinzugefügt wird, wird der Listener -Trigger* Applistener ein Ereignis ist, das auf die Anwendungen von Freunden hört SpringApplication.run (Args); }Funktionale Nähte
Es wird bald erfolgreich sein. Wir streiten die Ereignisse und veröffentlichen die Ereignisse, nachdem die Freundschaftsanwendung erfolgreich ist.
/*** Freundschaftsanwendung**/@postmapping (value = "/apply-friend") public JsonResult anwenden (@RequestParam ("toid") Long Toid,@RequestParam ("Bemerkung") REMICHT) // Die Anwendung ist erfolgreich, das Anwendungsereignis wird veröffentlicht und toid benachrichtigt, um die Nachricht zu verarbeiten. Wenn es nicht online ist, wird es nicht verarbeitet, wenn (ergebnis.ISSUCCESS ()) {applicationContext.publishEvent (new ApplyeVent ("bewerben", toid)); } Rückgabeergebnis; }Funktionelle Demonstration
Ich habe so viel gesprochen, lassen Sie mich Ihnen den Effekt des fertigen Produkts zeigen. (Benutzerszene: Ein Xiaoniao fügt den Kaiser als Freund hinzu, der Kaiser erhält die Nachricht und überprüft sie)
Der Kaiser erhielt die Nachricht und die kleine Nummer 4 in der unteren linken Ecke tauchte auf. (Rufen Sie die Methode Layim.msgbox (MSGCount) auf)
Der Kaiser klickte auf das Nachrichtenfeld:
Der Kaiser erhielt Bewerbungen von seinen vier geliebten Konkubinen und konnte weder schlafen noch essen. Was würde er tun? Wenn Sie wissen möchten, was als nächstes passiert, hören Sie sich bitte den nächsten Zusammenbruch an ~~~
Zusammenfassen
In diesem Artikel wird hauptsächlich die Implementierung eines Freundesverfahrens vorgestellt.
Die Codeadresse im Artikel: https://github.com/fanpan26/springbootlayim
http://xiazai.vevb.com/201712/yuanma/springbootlayim-master.rar
Das obige ist der Springboot+Layim+T-io, der Ihnen vom Editor vorgestellt wurde. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!