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 | }
|