Forum: PC-Programmierung AsyncCallback verständniss problem C#


von Leo (Gast)


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
}

von Dirk (Gast)


Lesenswert?

Hallo,

mit WebSockets kenne ich nicht aus, aber ich arbeite mich gerade in WCF 
und C# ein und damit gibt es eine Dupelxanbindung. Anscheinend geht 
WebSockets auch mit WCF, eventuell hilft Dir dieses Beispiel.

https://msdn.microsoft.com/de-de/library/hh977020(v=vs.110).aspx

Das Beispiel bietet das Async / Await Pattern, WCF mit Duplex.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.