AsyncCallback verständniss problem C#

Gast #5283196
Lesenswert?
• ▲
▼
hi,

ich habe hier einen kleinen "WebSocket" in C#.

Momentan ist es so, wenn eine Nachricht einkommt, schreibt die Server 
Klasse mir eine Zeile in die Console.

Allerdings möchte ich in meinem Hauptprogramm mit der Nachricht 
"weiterarbeiten"... deshalb brauch ich "sowas wie" AsyncCallback...

unten hänge ich den Server mit an:


die Problematik (bei meinem Verständnissproblem) ist dass die 
Erklärungen immer davon ausgehen, dass der Thread so Konzipiert ist, 
dass irgendwo ein Callback ensteht ... oder ich sitze einfach nur mega 
auf dem Schlauch...
> einen kleinen Ansatz habe ich bereits angefangen, aber genau hier komme ich dann 
nicht mehr weiter.

also hier erzeug ich einen neuen Server:
> Server myServer = new Server();

und hier bekomme ich vom Server ne Nachricht
1
        private void NewMsg(WebSocketSession session, string message)
2
        {
3

4
            // <-- hier soll der die Nachricht Zurücgegeben werden...
5

6
            Console.WriteLine("Client said: " + message);
7
            //Send the received message back
8
            session.Send("Server responded back: " + message);
9
        }

evtl. kann man mir das besser veranschaulichen...

10001 Dank für jeden Tipp
1
namespace TCP_ServerV1
2
{
3

4
    class Program
5
    {
6

7
        static void Main(string[] args)
8
        {
9

10

11

12
            Task task1 = Run();
13

14

15
            AsyncCallback callBack = new AsyncCallback(Ausgabe);
16

17

18

19
            Console.ReadKey();
20
            Console.ReadKey();
21
            Console.ReadKey();
22
            Console.ReadKey();
23
        }
24

25
        public static async Task Run()
26
        {
27
            await Task.Run(() =>
28
            {
29
                Server myServer = new Server();
30

31
                Console.WriteLine("Sende eine Nachricht: ");
32
                string msg = Console.ReadLine();
33
                myServer.Send(msg);
34
                Console.WriteLine("Nachricht gesendet :) ");
35
            });
36
        }
37

38
        static void Ausgabe(IAsyncResult result)
39
        {
40
            Console.WriteLine("incomming Message from Server");
41

42
            Console.WriteLine(result);
43

44
        }
45

46

47

48

49
    }
50

51

52
    class Server
53
    {
54
        private WebSocketServer appServer;
55

56
        public Server()
57
        {
58
            appServer = new WebSocketServer();
59

60
            appServer.Setup(8080);
61

62
            appServer.NewSessionConnected += new SessionHandler<WebSocketSession>(NewSession);
63
            appServer.SessionClosed += new SessionHandler<WebSocketSession, CloseReason>(ClosedSession);
64
            appServer.NewMessageReceived += new SessionHandler<WebSocketSession, string>(NewMsg);
65

66
            appServer.Start();
67
        }
68

69
        ~Server()
70
        {
71
            appServer.Stop();
72
        }
73

74
        private void NewMsg(WebSocketSession session, string message)
75
        {
76

77
            // <-- hier soll der die Nachricht Zurücgegeben werden...
78

79
            Console.WriteLine("Client said: " + message);
80
            //Send the received message back
81
            session.Send("Server responded back: " + message);
82
        }
83

84
        private void NewSession(WebSocketSession session)
85
        {
86
            Console.WriteLine();
87
            Console.WriteLine("New session connected! Sessions counter: " + appServer.SessionCount);
88
            session.Send("Hello new client!");
89
        }
90

91
        private void ClosedSession(WebSocketSession session, CloseReason value)
92
        {
93
            Console.WriteLine();
94
            Console.WriteLine("Client disconnected! Sessions counter: " + appServer.SessionCount);
95
        }
96

97
        public void Send(string msg)
98
        {
99
            foreach (WebSocketSession session in appServer.GetAllSessions())
100
            {
101
                session.Send(msg);
102
            }
103
        }
104

105
    }
106
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 8 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.