-
Notifications
You must be signed in to change notification settings - Fork 1.7k
/
Copy pathProgram.cs
143 lines (113 loc) · 4.8 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
using System;
using System.Configuration;
using System.Security.Cryptography.X509Certificates;
using WebSocketSharp;
using WebSocketSharp.Net;
using WebSocketSharp.Server;
namespace Example2
{
public class Program
{
public static void Main (string[] args)
{
// Create a new instance of the WebSocketServer class.
//
// If you would like to provide the secure connection, you should
// create a new instance with the 'secure' parameter set to true or
// with a wss scheme WebSocket URL.
var wssv = new WebSocketServer (4649);
//var wssv = new WebSocketServer (5963, true);
//var wssv = new WebSocketServer (System.Net.IPAddress.Any, 4649);
//var wssv = new WebSocketServer (System.Net.IPAddress.Any, 5963, true);
//var wssv = new WebSocketServer (System.Net.IPAddress.IPv6Any, 4649);
//var wssv = new WebSocketServer (System.Net.IPAddress.IPv6Any, 5963, true);
//var wssv = new WebSocketServer ("ws://0.0.0.0:4649");
//var wssv = new WebSocketServer ("wss://0.0.0.0:5963");
//var wssv = new WebSocketServer ("ws://[::0]:4649");
//var wssv = new WebSocketServer ("wss://[::0]:5963");
//var wssv = new WebSocketServer (System.Net.IPAddress.Loopback, 4649);
//var wssv = new WebSocketServer (System.Net.IPAddress.Loopback, 5963, true);
//var wssv = new WebSocketServer (System.Net.IPAddress.IPv6Loopback, 4649);
//var wssv = new WebSocketServer (System.Net.IPAddress.IPv6Loopback, 5963, true);
//var wssv = new WebSocketServer ("ws://localhost:4649");
//var wssv = new WebSocketServer ("wss://localhost:5963");
//var wssv = new WebSocketServer ("ws://127.0.0.1:4649");
//var wssv = new WebSocketServer ("wss://127.0.0.1:5963");
//var wssv = new WebSocketServer ("ws://[::1]:4649");
//var wssv = new WebSocketServer ("wss://[::1]:5963");
#if DEBUG
// To change the logging level.
wssv.Log.Level = LogLevel.Trace;
// To change the wait time for the response to the WebSocket Ping or Close.
//wssv.WaitTime = TimeSpan.FromSeconds (2);
// To remove the inactive sessions periodically.
//wssv.KeepClean = true;
#endif
// To provide the secure connection.
/*
var cert = ConfigurationManager.AppSettings["ServerCertFile"];
var passwd = ConfigurationManager.AppSettings["CertFilePassword"];
wssv.SslConfiguration.ServerCertificate = new X509Certificate2 (cert, passwd);
*/
// To provide the HTTP Authentication (Basic/Digest).
/*
wssv.AuthenticationSchemes = AuthenticationSchemes.Basic;
wssv.Realm = "WebSocket Test";
wssv.UserCredentialsFinder = id => {
var name = id.Name;
// Return user name, password, and roles.
return name == "nobita"
? new NetworkCredential (name, "password", "gunfighter")
: null; // If the user credentials are not found.
};
*/
// To resolve to wait for socket in TIME_WAIT state.
//wssv.ReuseAddress = true;
// Add the WebSocket services.
wssv.AddWebSocketService<Echo> ("/Echo");
wssv.AddWebSocketService<Chat> ("/Chat");
// Add the WebSocket service with initializing.
/*
wssv.AddWebSocketService<Chat> (
"/Chat",
s => {
s.Prefix = "Anon#";
// To send the Sec-WebSocket-Protocol header that has a subprotocol name.
s.Protocol = "chat";
// To ignore the Sec-WebSocket-Extensions header.
s.IgnoreExtensions = true;
// To emit a WebSocket.OnMessage event when receives a ping.
s.EmitOnPing = true;
// To validate the Origin header.
s.OriginValidator = val => {
// Check the value of the Origin header, and return true if valid.
Uri origin;
return !val.IsNullOrEmpty ()
&& Uri.TryCreate (val, UriKind.Absolute, out origin)
&& origin.Host == "localhost";
};
// To validate the cookies.
s.CookiesValidator = (req, res) => {
// Check the cookies in 'req', and set the cookies to send to
// the client with 'res' if necessary.
foreach (var cookie in req) {
cookie.Expired = true;
res.Add (cookie);
}
return true; // If valid.
};
}
);
*/
wssv.Start ();
if (wssv.IsListening) {
Console.WriteLine ("Listening on port {0}, and providing WebSocket services:", wssv.Port);
foreach (var path in wssv.WebSocketServices.Paths)
Console.WriteLine ("- {0}", path);
}
Console.WriteLine ("\nPress Enter key to stop the server...");
Console.ReadLine ();
wssv.Stop ();
}
}
}