From b0b7f57f24236ae81940ad791bad306503dd1c30 Mon Sep 17 00:00:00 2001 From: Nicklas <145897592+nick7ass@users.noreply.github.com> Date: Thu, 29 Feb 2024 18:07:03 +0100 Subject: [PATCH] Fire kind of finished and connection to ESP32 working for force sensor --- .DS_Store | Bin 0 -> 8196 bytes Assets/.DS_Store | Bin 0 -> 10244 bytes Assets/1OurScripts/ConnectUnityWithSensors.cs | 79 + .../ConnectUnityWithSensors.cs.meta | 11 + Assets/NuGet.config | 16 + Assets/NuGet.config.meta | 23 + Assets/OurESP32Scripts/ESP32/ESP32.ino | 92 + Assets/Packages.meta | 8 + .../WebSocketSharp-netstandard.1.0.1.meta | 8 + .../.signature.p7s | Bin 0 -> 9465 bytes .../WebSocketSharp-netstandard.nuspec | 31 + .../WebSocketSharp-netstandard.nuspec.meta | 7 + .../WebSocketSharp-netstandard.1.0.1/lib.meta | 8 + .../lib/netstandard2.0.meta | 8 + .../lib/netstandard2.0/websocket-sharp.dll | Bin 0 -> 226816 bytes .../netstandard2.0/websocket-sharp.dll.meta | 23 + .../lib/netstandard2.0/websocket-sharp.xml | 10326 ++++++++++++++++ .../netstandard2.0/websocket-sharp.xml.meta | 7 + Assets/Scenes/MainScene.unity | 49 +- Assets/packages.config | 4 + Assets/packages.config.meta | 23 + Packages/manifest.json | 1 + Packages/packages-lock.json | 7 + 23 files changed, 10730 insertions(+), 1 deletion(-) create mode 100644 .DS_Store create mode 100644 Assets/.DS_Store create mode 100644 Assets/1OurScripts/ConnectUnityWithSensors.cs create mode 100644 Assets/1OurScripts/ConnectUnityWithSensors.cs.meta create mode 100644 Assets/NuGet.config create mode 100644 Assets/NuGet.config.meta create mode 100644 Assets/OurESP32Scripts/ESP32/ESP32.ino create mode 100644 Assets/Packages.meta create mode 100644 Assets/Packages/WebSocketSharp-netstandard.1.0.1.meta create mode 100644 Assets/Packages/WebSocketSharp-netstandard.1.0.1/.signature.p7s create mode 100644 Assets/Packages/WebSocketSharp-netstandard.1.0.1/WebSocketSharp-netstandard.nuspec create mode 100644 Assets/Packages/WebSocketSharp-netstandard.1.0.1/WebSocketSharp-netstandard.nuspec.meta create mode 100644 Assets/Packages/WebSocketSharp-netstandard.1.0.1/lib.meta create mode 100644 Assets/Packages/WebSocketSharp-netstandard.1.0.1/lib/netstandard2.0.meta create mode 100644 Assets/Packages/WebSocketSharp-netstandard.1.0.1/lib/netstandard2.0/websocket-sharp.dll create mode 100644 Assets/Packages/WebSocketSharp-netstandard.1.0.1/lib/netstandard2.0/websocket-sharp.dll.meta create mode 100644 Assets/Packages/WebSocketSharp-netstandard.1.0.1/lib/netstandard2.0/websocket-sharp.xml create mode 100644 Assets/Packages/WebSocketSharp-netstandard.1.0.1/lib/netstandard2.0/websocket-sharp.xml.meta create mode 100644 Assets/packages.config create mode 100644 Assets/packages.config.meta diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..a7c8721d735bd72a942bc9986367c2c3a61fd2e6 GIT binary patch literal 8196 zcmeHM-A)rh6g~qLw!t5aO1L4}#F%)2wIG@pZ%Tm}5+Q~~y--tk+gcWuou<3BA%vvY z`VPK=w?2vQ;+1}9X29L8;04BzIMd9W*_m^`GxP1)*`Ah&M7`fyAetp22bJaY6q?@@ zp65DJ#>~idNCA7I4pqpfF72&HBieSrGGH073|Iy%1D1h{zyRLaT%1$h`+C;4mI2Ga zf5`x!4=yUpnvp{-)zN`Qr2vp646A}Z@&IMy8d)=PsHHLmrp_LOF%>4o5ZWB`E~`V< zj2vpI%}Ho;62`MI8H!NeVdpA!5;ZMtYZ<T%j55Hvdl@-<LM?iq&EI7+h-83SexSaf zR(`009?_kQMT6?prydYeTBSAxxa!b4#lVvo--m8WA^I^jpdo1!H6@RBFxp*@a-Nn8 zp5|y7$O&-wfgI5R-J=y{>jS%st2L}V1RndUP!qac^d#-(k;PmAdFBtuXJLIRU`?E0 zrIZx>em_e$7$jZ8^Vgsog-KeieiLKkrArf&&ZINty!CeEz)StKpVa-{Yrfi+G766S ze(*AE4;s@qS7e;}VchO1gRs?x%9~eV+>(R3?8mJ{*?M}yDLduH^z7l`!qUTecX4sy zXx=@1yjY!gmmWMiIx0K2Zr^{h)!2*nWBC#5M-k@Wr7QaSq-8F0`~Tqe;z-6FHbR}G zXShEB?g`(qgFHK9td)(d60{}ar@$ikCHkC+z#E7Mjwp$kYAWmm@l>Izsk?{+%;&wS zIL@NXAQm@i15vp~+w@e$O&{^|T=jMlbxlN81z1rLOT|+bYaIT9k*H&KvRV$XeW324 z?Et^9Pr=cW)xTC)iwBz&pAdT=VM(!>wJy^ZcD9WDZ9rDQS*ySZcokPOyxzrL`6T$& z{@v#rCrQrVWqJW$ZSZ~O&Y10-oqhi!P;9XboP&XJZ9B{P|Jv!l|DVHyHMI;_1}-`S zqO|I**0IXtuXx1;bFS^8zC-20dP6Oh2^y7-L#lKf^5hRg^j)a3P0h%mmKZ^?KLjWm LY-1VtrwsfAPD4L# literal 0 HcmV?d00001 diff --git a/Assets/.DS_Store b/Assets/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..7d5b28059639f190db64b69bd9111ae30ec8811f GIT binary patch literal 10244 zcmeHM-ESL35TA8Ie36|H_lrsh=_DRNB1&ziAR(m6q=}${(kKp4sX#b?#I<_9v;0v5 zQNXW-|ABvjN04|%;)zH84BmNy-^^X2-Lto8D?n7;weIHbJinRQ-|WtM&qSoQ#;ppG zPedLLmTN_v<~07EkC~QBpKL-Z;ECR)fFf$qF2yt2?tx>#G2j?*3^)cH1OEpGux4}f z3W;=Q$ADwNF>uNN*9RX5%UUX@iImcTlWYMX7x7pcuCWggjGxL{DyNAQC~PLX2bDrq zy2Vfl9N+t_4p~d(G?59MR01cJdRFNUMTvLdd{HM=OQbtH1{?#k4DjB)NENz8V;UIy z_aU`!gmJSG#trE3w0axI#$VEKMO3okXoGsxrV#}h3qNEm6izMFsR{pG>H{@2QR<}( zYHdEs=2d-{!LQOL-cXF;tB)uLREN(o-dc3=)*|cs&kXkb!?3mpa-EEoOSD5Fd^1ZC z^MpH}ZbEhtMHAQih-D-inTR9{-)mWT@o{X~A|%d?ZuLC9Be5|*fke`R=LpgD<es^T zX4v9P=~ga3niX4Ak~!VpIl2L_9c1e(;j1lK3vjLFFf)2MgSw3u9>s<&BFUs~tw<jr z8s=&QOjB4n1WO$=3eK8Z)v{Ky;cT8cLxzPS=4=z60DX_?5dJ5)9%N@N&mIF;vf*r= zISYn`C9yEZm>tiI0I+T77Ia;k2WHhkJr5MuqaE~Z7c;I3X{`^rACch)8n<Vl8<Sx_ zt!h6t`eAoCDwls(xrN2&mhxWSD|nyQ@5Yn*C>V{0TfyKC-|fe7*f_Zk8XtArlY_Mj z*W+jubffk_0Nqv_DxZAZjau<!D;`I!p<wID7v8eBe6V);=%{k_^>x2mtsJlWM{ick z>;BcvH;#{&y^Akjd28?BUf7G`Z_y((r4mUisXP%}(az{)*s0W;aj$;@IUCW7x3^PX zyq_Oj`sRyYf5E6d%TF(EJprnJ_i>}UUmrwa9C0OORy>T00Au1F&K=CYIaN}9ZH$S& zssGT~%5zOeU%*OXcr($qaV>LCx3iLs+KS{krz2kx<N&jr*9TrZeA>fx10Sx$KIE4; z-^3l?A3`TaMd14F({)5Yz|$_>$J5yw!LwHPw*Jq0v-MKuz3w*;zg$`WaJq=x>X z<+NyO+q_8SG;w?2CBWLj>+c4xhWMa@n>Aaqr{hXsd@j!BSt_S)VOcB;kpr%7O<2o} zTg92s5v#KZn>S%o$L3Kr1N5;k<0a#X+01=ruxV)9yfB*vZb@o0|BjjM4b~n*x1j6V zJTPkp$^(kmS04Mk`e%B=oEiEnS$&%)W-No;$I5ey-lzBQD`B4wWWI#JSIw~@?ER*( zcMjSXq|Li9soN;R#u&Zi8QMkWLiwd~NU`ag$7N2(m25bhXJJ^k@EU!XRtK&ZL-EaH zo&U?@C%cG;e=CQQfi`~caCK>jUM4s2X`4@+C*5oL-|=eewPaiOpQGEfXL8GVUAU&@ zHP1RWi=0728w-<bj)A9yfrTVazW}*o|Ns9f>5U81G2j?@5(d=bc71ybNM%9uyLKPP z=Qy~r-ZYT{!AV}nL(1!T-0<u8S8=dznI$(|*HSr6B%YxC=YIyc{r{Y|DsKOO`lkCC H*#G|xS@0P< literal 0 HcmV?d00001 diff --git a/Assets/1OurScripts/ConnectUnityWithSensors.cs b/Assets/1OurScripts/ConnectUnityWithSensors.cs new file mode 100644 index 0000000..5df6252 --- /dev/null +++ b/Assets/1OurScripts/ConnectUnityWithSensors.cs @@ -0,0 +1,79 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System; +using WebSocketSharp; // Ensure this matches the WebSocket library you're using + +public class ConnectUnityWithSensors : MonoBehaviour +{ + // Websocket Service + WebSocket ws; + //public AudioSource audioSource; // Assign in inspector + //public AudioClip narrationClip; // Assign in inspector + // + public string esp32IPAddress = "10.204.0.249"; // Assign your ESP32 IP Address + public string esp32WebsocketPort = "81"; // Assign your ESP32 WebSocket port, typically "81" + + private bool forceDataReceived = false; + private int receivedForceValue = 0; + + void Start() + { + ConnectWithESP32(); + //StartCoroutine(NarrationAndSignalCoroutine()); + } + + public void ConnectWithESP32() + { + Debug.Log("Connecting Unity with ESP32 via Websockets..."); + ws = new WebSocket($"ws://{esp32IPAddress}:{esp32WebsocketPort}"); + ws.OnOpen += (sender, e) => + { + Debug.Log("WebSocket connected"); + ws.Send("Hello from Unity!"); + }; + ws.OnMessage += (sender, e) => + { + Debug.Log("Received message: " + e.Data); + int parsedValue; + bool isNumeric = int.TryParse(e.Data, out parsedValue); + if (isNumeric) + { + receivedForceValue = parsedValue; + forceDataReceived = true; // Indicate that new data has been received + } + }; + ws.Connect(); + Debug.Log("Websocket state - " + ws.ReadyState); + } + + /*IEnumerator NarrationAndSignalCoroutine() + { + audioSource.PlayOneShot(narrationClip); + yield return new WaitForSeconds(narrationClip.length); + if (ws.IsAlive) + { + ws.Send("Need Force"); + } + }*/ + + void Update() + { + if (forceDataReceived) + { + if (receivedForceValue > 50) + { + Debug.Log("Force threshold exceeded, action triggered."); + } + forceDataReceived = false; // Reset for the next message + } + } + + void OnDestroy() + { + if (ws != null && ws.IsAlive) + { + ws.Close(); + } + } +} diff --git a/Assets/1OurScripts/ConnectUnityWithSensors.cs.meta b/Assets/1OurScripts/ConnectUnityWithSensors.cs.meta new file mode 100644 index 0000000..dd26172 --- /dev/null +++ b/Assets/1OurScripts/ConnectUnityWithSensors.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0ecd28734b48f4313bff134f6df55396 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NuGet.config b/Assets/NuGet.config new file mode 100644 index 0000000..82fb1c8 --- /dev/null +++ b/Assets/NuGet.config @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<configuration> + <packageSources> + <clear /> + <add key="nuget.org" value="https://api.nuget.org/v3/index.json" /> + </packageSources> + <disabledPackageSources /> + <activePackageSource> + <add key="All" value="(Aggregate source)" /> + </activePackageSource> + <config> + <add key="repositoryPath" value="./Packages" /> + <add key="PackagesConfigDirectoryPath" value="." /> + <add key="slimRestore" value="true" /> + </config> +</configuration> \ No newline at end of file diff --git a/Assets/NuGet.config.meta b/Assets/NuGet.config.meta new file mode 100644 index 0000000..fa90c9f --- /dev/null +++ b/Assets/NuGet.config.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 3bfefe5057a8141f5b38c75f10dda552 +labels: +- NuGetForUnity +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/OurESP32Scripts/ESP32/ESP32.ino b/Assets/OurESP32Scripts/ESP32/ESP32.ino new file mode 100644 index 0000000..0fc6615 --- /dev/null +++ b/Assets/OurESP32Scripts/ESP32/ESP32.ino @@ -0,0 +1,92 @@ +#include <ArduinoWebsockets.h> +#include <WiFi.h> + +const char* ssid = "dsv-extrality-lab"; // Change to your WiFi network name +const char* password = "expiring-unstuck-slider"; // Change to your WiFi password + +using namespace websockets; + +WebsocketsServer server; +WebsocketsClient client; +int forceSensorValue = 0; +const int forceSensorPin = 34; // Change to your actual force sensor pin + +void setup() { + Serial.begin(115200); + + // Initialize force sensor pin as input + pinMode(forceSensorPin, INPUT); + + // Connect to WiFi + WiFi.begin(ssid, password); + + // Wait to connect to WiFi + while (WiFi.status() != WL_CONNECTED) { + delay(1000); + Serial.println("Connecting to WiFi..."); + } + + Serial.println("Connected to WiFi"); + Serial.print("IP Address: "); + Serial.println(WiFi.localIP()); + + // Start WebSocket server + server.listen(81); + Serial.println("WebSocket server started."); +} + +void loop() { + //Serial.println(WiFi.localIP()); +if (server.poll()) { //server.poll() checks if any client is waiting to connect + Serial.println("Client is available to connect..."); + client = server.accept(); // Accept() --> what server.accept does, is: "server, please wait until there is a client knocking on the door. when there is a client knocking, let him in and give me it's object". + Serial.println("Client connected..."); + + while (client.available()) { + + Serial.println("Waiting for client to send a message..."); + WebsocketsMessage msg = client.readBlocking();//readBlocking(removes the need for calling poll()) will return the first message or event received. readBlocking can also return Ping, Pong and Close messages. + + // log + Serial.print("Got Message: "); + Serial.println(msg.data()); + // Condition to blink the light at the start of program as a hello indication + if(msg.data().startsWith("Hello")){ + for(int i=0;i<4;i++){ + digitalWrite(11, HIGH); //Blink on + delay(170); + digitalWrite(11, LOW); //Blink off + } + client.send(String(10)); + } + if (msg.data().equalsIgnoreCase("Need Force")) { + digitalWrite(11, HIGH); //Notify user to use force sensor + Serial.println("Reading value from Force Sensor..."); + while (forceSensorValue <= 20) { + + analogReadResolution(10); // This statement tells in how many bits the AnalogRead should happen. + // analogRead function returns the integer 10 bit integer (0 to 1023) + forceSensorValue = analogRead(A0); + + if (forceSensorValue > 20) { + digitalWrite(13, HIGH); + Serial.print(forceSensorValue, DEC); + Serial.print("\n"); // Sending New Line character is important to read data in unity + Serial.flush(); + + // return echo + client.send(String(forceSensorValue)); + digitalWrite(11, LOW); //Notify user NOT to use force sensor + digitalWrite(13, LOW); // Turn off built-in LED to notify user that value reading is done. + forceSensorValue = 0; + break; + } + } + } + + } + // close the connection + client.close(); + } +} + diff --git a/Assets/Packages.meta b/Assets/Packages.meta new file mode 100644 index 0000000..fbabb52 --- /dev/null +++ b/Assets/Packages.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ba626952818604530b1a713a3f4c9e15 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/WebSocketSharp-netstandard.1.0.1.meta b/Assets/Packages/WebSocketSharp-netstandard.1.0.1.meta new file mode 100644 index 0000000..58198a6 --- /dev/null +++ b/Assets/Packages/WebSocketSharp-netstandard.1.0.1.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b48e8c73bd75840d084f07aa471692a6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/WebSocketSharp-netstandard.1.0.1/.signature.p7s b/Assets/Packages/WebSocketSharp-netstandard.1.0.1/.signature.p7s new file mode 100644 index 0000000000000000000000000000000000000000..38e615dff057f3af65476b3a2f5336812d694a5c GIT binary patch literal 9465 zcmds-c|4SB|HsW3V_(O<j;#peo*8=z*%Lw{EsVjKFvHB)6EljEvP87VQc7B6OPv<U zTH1(g;bc3ZB4n%h-6NcI&hI?uc|EV!b6&q+|LD4}<-YFgzOMK8^ZncdFqA&SIXA>v z#m(?S*r7QLr6GW!)CYyIqWJ+{IHyOP6~vnr28FP(0A9a0gyguuoOgOts6;Z!0L{gP zL7{a}dRhPqjY0!x6c(k00xxM;;i$d_UT*k6t8GES1Zylo$9_A}F5FBTvmYNGvBlfX z*Uv)DNl)9#!D%~58)v<Viz|o0X9_S_D*y&GJBJktfkFj%e*1M$tleTEY0%@V)HtBe zoY(S<A#C8hywThMC!Ez821h`hozNlxf?41~@R$(^L{o1H4QWlnqa^?_=4Eb#Kxk+v z$_uQ*gH<RzIRLE$C@`y75mKu?OsLdginkZi+6?JPCex6nCV;FMFQ9`)qk-@L+{AdX zU}?4Z-<k#kqVVGafG>uX0pVu>7!WQf0|H^W&L{GGz%*u0ar|V3$6Sz5{*5>5(vB2P zJ^zf<S8?^=nT_eZB9e~58I~8T97;%dlg-5wD;ANId@bR(aHl=!LmQ^~Gch_LPkXuz z3-ZSHf03VX#Pwz)+vNI+I~K&fnuT_|&$)_g-?My{t25^p-EvcJbCpzeBDSMlQ+z>% zzw~nK>uQqOL!9<0(S=>-j)erYeaf@pRa@kybe{Kkc_LZ6F3dR|nfqcefUCj!06G)v zuP_|{662Ql3xXl|L0>HEv;ie|X#QeHs~9@?#^ET18%7X|xM`K}hT_fv7qOay(tJ0| zQZMZ+y<d{?q44r}MQwpmy6DTr+*6|*?&6{LP*w;F<N_YR0es*~mEng#7GW@OBgFyy z%rb&mW&>EkKY$GL0v}8iCTu>MS2UH{$Utj29J_p3K5H_dfgg}#Rx8590nwO0Z?JYB zg0BI>lE-(ix9`JvKZP3Ml~y@J@oC2lYzg+f5kET7+R?MKH2djuVU;_)86JCtwz&?x z+7xST?wX-Zlq|3u*;yBURj8dnKhzt|X_z*2d!0J+{-#ouqciS{3Vj)e<c7V+;(zU} zB3PI19WCM9FuLwT*n=n|waJQg+5zrIA-Ak|XG7S|UfrZz_4HQsqfg|xx_K|(QMyLj z=$4B4MA>f7PY<>eD*W$Hev<R!(P0;j);(}#cR<7^Aq$V#w)L<FHqSF2R1-G%3iihQ z#)I{#MDPleCZpx>0<!bRrIZ8wlkzKYkmBYG>v9Exvaa`4&sCpxs8D0)c#ay{UUGS! z%Um;Wd;(yw0RRIgzI=3HoZ?dMt#^HbolMKg>DxJe+_~KU)uW5Xq5%vBjbR>M@aSUn zekcNz|CAtTKoi_7AVE}C3F2gBf<gX(5mU04H`0knAQ4FfCQkm<Ii7u0Djm%ySVRbA zf5nZqmU!{<i}~qdgD$hr(Srq9U6{6@k&rAlR7KK!s_Dc0xuY$*5^c8%$Ir#(w<}-c z3s*5XINU^dRrf`8ef_IQ#k7GG#Z$?ljJe!HiatU+u-j?HD(mhl5g$EroDe1?95rvz z$h|OpL>-xaLwajGM=#IkK3fm*2Zc2yHv-W<*r3hV0`smuj~+hIn3_Ad5iR{<WP)qJ z<?hz<VcL+|f`8*dn!XNi^4LJR-Nh>-`?;<jn!HA^E3cVJY(gq4j&gWyc05%z!7nsb zdxF0z@145C4E5gq!^NJlR1*gKfZnnFROCy3FRJ1B>`T}y-z0jKPd0r&#|+3baHSpt zLd>(cbapuaICyrU5SBljZzlF-lwmvo7o0;44u%GHR#qT<<^K=}ECBEWlvc_BBu?Cy zMhi61)Fk7nfomcHV7l508mGJ53Xfw34C<POnk%n+`9)isF{6d42?|f40dzWZLUOPO zAPg|b(aX_^(^?sd;;;30$MOGTU+mxSYtNhl5@rQh0D5pPW;Boc=Fb9!0UH37m1l%P zM5UP%qk>EEb8OT!-R{I(&*h%1KQPm+=1$}Wt_%4iL97ow<}{|ggZW(lEoOoMSYqbp z_q=XOrIQLxA`R*XlvP6tWcEsH7)aKP0l2n<+#cVmH}TgL9s4%6p%>|_d-LsdQ))23 zLm4Umgj?S}CAyu!#g9foC-8g-o9k`vX5o`M!tjKda~5`c7L$vm*!faKzWh>D?(pci z(ha4$`t=)fRaGPnf>fY}sFVv2l?D6G30vky`1%%|y}Spxrz5DCC+Tj%Y^{)Q_6y@i zW3zn3_>dQmGRGE7iB5tNbU~AHP`b_9{M5T$GQ;yUFTaveAJfj#n~AN%yxr3f<nz;L z{3Z@b@lyI(`?`|?@UQIj`D2}P4C@(BQm)gyP@4E*RBFnIufG|l#3%PR@r!4?9L7Lq zZU>pEx6Dj-!BQWWzQEw1?N4+)n>Gsl%*=lRR-pDl>j7G;Vh02$8Z2rp^Aw;bt|ce} z5Ck_Kj03^t0!l!Tcr-EzEwFTAVeANYM{lnHGRX_g+=O5=E`+>Yu%$N*MWzstj^2S} zDv?H}gd;t}k+wuUg-j*;&{o>A{*AW(lC1?{0adSkY8EO@S|xY3oVn%Id72+FX&Ih; z*jBJ?t1Co(SE87Gmg_UqJU1tAm4+}8zYT^7HavnH=T0W~#Ak&@N*<-m1d@a=q2Chl z-086dt(<P-5G#S}5zbHT&e7QPA02LZUwk^dK&x4jGL(CfgHJG#u*V}JBzE>&oqw~J zY^jU!jxkyB(K^~4;8LG<hG!j%G?hW|o;q2^&8B?IHF7}Vx@g&0l0EOo_&4cBJ}*kh zz6U!e%d+o0LU;O*lpexPMC0!25d_)^<sIXXk@xm(tU_$|JC)>kLDnoHYvJvTTg6@1 zeDMh71Mv3y2l<toJtk{nw7ROF3$nS3jjph@7F?;SHD~ru5B2XlsXNcQe1qQ}k9XaM z?H3x~^D}xnpRMIEd(4vj{sV_Yzq2q9AOYGr*c^16=I<>0iDy(_97Y58U4U!gsTu?{ zh*SSRcKZpT|4X-R-w9|Am;$=r^BItUtdM^TfE;i*fzAVgK>+%p6>5U<Bn$}ooAJbM zr56B=+p_ZDe-%%d>R~meFr~w?a##*6Jj{n$3WrdD<tIQaF?FJ<+83&A9Ttg|tdfee zH0U3`k#gE}n>^d&m)<*g$t;I130;=DOX#<~9ewH=ws<Q%=A4T2sn-FuH*8&Y%g4Ux zT+D1&-S_eOlQ`RyUDN)KBijWc8^cUf9a>e?@2i+6@Y3yi?Sgt21G@$g9vl4nF|(Fq zcCPEM7-Z=^+9p>)-!k4@6u2)?_nDP>QYL4P5)j%Lq_eHY$!&03T2t;b-+ref^;ZLO zMI9#Fcn=fhgpR&7b)FJhe~f?M=`tt11*?pX#*D>q1>2MnT|*IiNcrYAYE!L5&gF`8 zt$VH)AIOc6h+hy9)qU986VNWHaak|dGeO;q1685}*xqeOl&(iJL}dVms05hE#t8rE zu3ekl<}e_)0P)qll9Lt9y;@+00Me@kPBt_@6NYFsMjz1C*2QYOfwerK-he?Ex;vl{ z2owz}5FU;QGRYf_)(rz>;oQsFDyINcU@5Ks{Q?{cD#w*<mJ^0nfFTpe6Ar4mI-+PH z^SLJyTatUN9wZX7AhS^$TS}yP_I(4i*W3<*Ru)xU3E#LtB8n7D_>NM|5UeJV<mDZP z+D|2u0D9|>6VXJ|YXSNrfL;mE?*ZV$u4ei$B%iz9=cuZC4e)krd;8=s&$}~^S%k22 zHh!#|l0S1vBnqG>03jD?|AcIY3j9@g1e0MH1HvK~We^rsfui0fnkcJjs2T$%Lsv63 z8~5P@V-DDuWo3_=oEPkL<Z>E|l6RgM-QQMnBG{>NR9I4~?AyqcQNGlZnDoxTUwit8 zXI#v99jF&@0V3GT<+mM<XILgFA7QhCR9<(iIT0p?)o~d?$P8^R)aC<jMbuxkz;7IR z(>gqdDjjasf>)TB>zV}ZN~si<Q65)}?&5OxZA_6O<~J~0yjZS=79^)8ez1Z}+^>>R zwMs)aCOOHt?8J#rs2EPuJ@=rL%g}d@Rer$nEC>MDEd#<APKFuYJP<Y4P~KdYZla+b zV?9=I5q&yB9QLK^O{^^G{-uRc^XHjgHh#WC&SfBw00SZY<NM}AGZ5V1MfTO*#&mmx zW&wuK6w~eDU9$(kxS;hzZwL%LABy18%7GP9;2wu_FA2g~a|pW_D}ZJaXm$U9?*OSJ zh0%KQ_I$$B?FCM06#<)1`pt{=`Ln$G{#RS_yJ$U75tj3}<b%dlRjZ;kT^j5N$-=Px zot@(R7~qGarQ-&GiMuQm>GxJ$-TlB;wFhqqVI9SWM~{k}y{fH}|LdFE_3u+3q%`Ny z<1W%;0eZ|@6(R#jeU}%)PT>JK63rWrG$m64$rKz7^sUfxOJWvughW@XcTj?<G^Cw3 zEtE|01HGM<tZuadlgrvV$Q{H0ZzmcqAds2NG12TzL24i^u{jKWD^SYa0UfN|WjSXo zS>q*NijZgJyE`BxSu67stpWP|wUZVDM7~d&5A@fF%(2y({uSzn>8?~D*G|^}l=z^U z;zpoV@Ty2K)73++wER8<I7JIG1&Ir$`I0Hb2+-aNrg|gEB>!+w-03j;vLZBBx*(lN z#1PQo!}%{eU|{k?^daJx)(&a%eGFRok}U>GLtrVhUdpYpx}YpXW3bx#+WKz)=b!Ii z<>~b}-F?LntuD_tk+X}gZi$MDuRTtrv?XW8Mhv-1=q1)p4|*Lg%M1GQ;r^Y@XSOV5 z4I0$^dSXzzoW5a+8T+|+eDk(jYvg-XaY+~j9HTZ~j+A)7T@>kH))Z*(GSV;I|1|ug zYdhbgQuC7!)qgu9rWVPf8)1SCdyDOx6p)OLSAQ`5d1g!BU}e1LQFj)b-rDYgU^9$~ zfou?o*vK7h!O`@jSuOqLi!XPK{k#%gY`-D|!w-Gfw_{o>n*%Z_pbQt=+WAQ)!pASu z!{=hhSTl<8X?%=x#O$%i{ytU`_SLm)XO{YDj{RwO+~53){dCA<Zufe@vag~OcX#fO zQ9k}%OVUdKdeI*pwzU=<90*v^K@c7o4sg%io3k6(1-JmtqMXD49Kl<YK=c9R0Xcvj z&Zfr43YCNjCk?)mjJtOHgkSZGnEfqQ;_8tSC}26{feEWWnLtK?`;<rpPYTn`)eNC7 zU1N^)yKub~I#0B+%ytrLeKf+331M%_V3+vmBrfTut+TT?S%=gKkppR=_@|_8b5VS} zZyN4s-wCwG&nwOQ$0k~4ZNyKWnG3<Brxb_YyLRS5@c>%Bj-I~Ljj#AoOYx;$*FNDJ zZ*P;?mArK<SyV;N?S{Y?`gT1Y|EHfeRe#3!m-fp)R?;8-CgNi;B_;UMmU<z|Vs6ui z0(Z}rPe!x9(p=QUv*=|tDxGN=`GKR?WFD{!j<<Go4<?ScVs6F`x%4GfKFBSs+$2-p zqBqiZbB}@jexsy^KK}T^;f{-<Q}m{EVZNwm=~^AlNr6;)<hg_QGjZ+a@tMiBqj5l; zcIEhDweyi!n=!Ujc+kY{%##)GpD}Qs^oHy+GB>y#2Xj$95Man<ctx@mw^;i+n9V#s z+I&tT>kql;{{wiTbpTMy{ov_?#Z`EPu4VIo8c<Y#b>Ar~_m=_XZ@7bZcV+Ezw$DnW z?3JYFjXF=>gj_cax`s(&^NTyPo&}S!-}bSWu#M{7M;)qnQ19`jZ(kU3?@XTclsY(i ziM_8UdS8ICUP}u6H<JV5(v6MRr7GLgQzpkh`p;fJrH_iPT7NrCzxGi6hYv;ZC!Qa# z4;X3AEH{vo)z7M)I#V!p=xt5YfuK6LYMIeMEbqGNNRG|6b6gcz>%}J<TRxYZwRwBw zwB+Z9!&u?hz4b9&DIXW^rMgf;r=Ar&UEutDQujgnk^QxAriyJ^p1<QvaW6j<uALBe zO#+joScNf>+QoNebMe!;*J@)G?E|ec0fGjp(<dLF>$m!N*NLx1CnGMbHdl8ggAD}* z33Y7-3W5KrTj&F>Jm`eE1ABqpYvs!}Kyd|2pcN*zqNTl1)bIej=Mq!!fmA?wwGkAM zko?nTlt3JST4@F*hzbA_l>f_SBxpDaEvJ6erJ=o;LodZ$&?M9ZGyt_6)tvQl%4-^Z zzkl#bEY_fa{^C+P{3mWF$C8~QBM1WtdJ){KE8o0W5dy1%MFRt9>1kkpKw}a9^^*&B zhbg~azGpJ2nx_{X6YROh6ZpIA3?8|u(W)h}2V=g#_qN6UQdkwaZKV5+{bX(f{m9Ja zB#|Lw)$2ohr}8>>dL0S^HgwD4#C(uD;h7T0_XbVOX58caCY@sWxbNL@)-O+!HD7c2 z+hO0oE<4$<Eg5g6Z!BNa{hD+%)37`<<J}c_1?S@=Cl`}s&9}0)c5j{tg!ykFjo+%B z#qDwYY&Y$9d}eFJgUM&#Slc?LSqu34oo2X#-`54B3Vja4PFKvrUEbF5O}{JZe1BG4 zuJBI30ZZlcgtSIT*ZF$AyZnw<oBGpOJ-BRh7S;y{W4;<?7{9GNeY9&pU-*9Kz^m#J zHMi1qS7%sM{h9ZQtj7;;XkNT=1xE+jX#=toyTZ<v!J=QDvK!@s%2~n0_7Cj*$JoL& z^FWD)!LC9NOl7ec@WQfU`^RN8c&PvSBWDp`LgDP2N@C;=u^>y%`^OFGvow)VLh`w9 zJ$BIZHX+l4I-9*)m5>3zT(?Z@u+jRhSi1nxgn{G6#}x`6T;`T)X1`@vE~%t4D@AeG z)WCUU9f!f(ys2WaWgt(f`|czT8H$yQw`~#B(0FF58>4s9Xi)vq<Sxa=m>z`foWSEk zE^&WnoJ-RusCrHL)d_#a=4@Vm3IFSdJ&E7!4p${OqOb05e@t`ickx%KbdDxJfnPP+ zTA>i){r<hq#Hn=pI`waNGYcVluZon7&vH7AtGXO^-8XXB%0xbXu&3<Rx{^p^C)e;3 zj%c`T8moEDb3@km6)Y153bkeA!LgeOXIJo753W=-u+|OwZ-LI32~;^4=z{!Y&C#eD zpkIdyU83Al+O@<`raz~xqd}vB)wm^ui84n}W`2<U@tY0DTAYK1V(1D&L8STtL}0^8 z8APh=GA+TIE`7%N>8`-W)wa-8%MomgBjWzm1idML8>c!y;4~irxsrYOsT4_6)_o(o zFkFWvQf3WK|CF~sd`e#VEMjrKX#94bd){fQ7X|BW<e!z?xkL%XYxX;<M(SJG{dUkB z?t1K=OF}9yN4vl;I!g0gkzY2x@~qsNCNjk6O4t#wsIowK5o9!k<?P7YB`_tsb;0{- zPm5o_qiQhAR<-=6jc4Cov7IRs+m&ikU11bAH2pBz%+O+wm|OqFjjhCWt@2TCV+aR5 zuT|KgM9vJJQ!LsoI1+TlWR5pn?@BK3i?ZU*&1WL&6>4eEdM!EQYQCl@mq?u&KFsm1 zdxYje^2pyA!P{Ww`eta(O8ER>We>~!(Be#Cim*~|y`Z`ri&3?Wa2-MVsVw|LviqJL z$2Rw4cQg2FE8?JbLD|DT=0+iC2GkAw706D|ZUE@VfPV^?P=UywLH?s#mP5Y?NUnM+ zpl`^##y9yZ=Mc0ve)j&-i|x|d=D4r<x;gl!84P#v>%Hu=84vI1y?$-cK1!bgTG+pP zhfqy4C@2B&*DEk&4efadOB7V!jyHdx=YVis%v>J>Vz@BvG`6=wt`|4Ubaz&MGXr6I zWa*>>6sHdT((488Qtm<KH_OXEoF64QI=>RwFqc~sTWIY;i_d@mHAv-abpxNW9k~cw zN>1xW_8+(wd4&xcuGYx)i~g}=t*1*YM>Y-Dwl^ROhjGp$CxsF$^EptZjy*z(VS7t| zsr1Wlh#9gAG#*H3s*t$#K%9QDDH*tRwguYM`m`#QOu`X{x8MgY+@aGcRN&&r$0ywe zqYIB8>T+}J?*Ejwm>crZOTDx<-hL0MV@SSBsvsftW6q8F+%BTg^s{hRi=NMj`*S=B zldY;vF1f1V6;hOY0ea%%`*=>E_ZQ_MJWGF(zo|c#cA^>HQP8^^;fK>ZUyvTTzGZUn F{{SeyIY0ma literal 0 HcmV?d00001 diff --git a/Assets/Packages/WebSocketSharp-netstandard.1.0.1/WebSocketSharp-netstandard.nuspec b/Assets/Packages/WebSocketSharp-netstandard.1.0.1/WebSocketSharp-netstandard.nuspec new file mode 100644 index 0000000..8af1b95 --- /dev/null +++ b/Assets/Packages/WebSocketSharp-netstandard.1.0.1/WebSocketSharp-netstandard.nuspec @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="utf-8"?> +<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd"> + <metadata> + <id>WebSocketSharp-netstandard</id> + <version>1.0.1</version> + <authors>sta</authors> + <owners>sta</owners> + <requireLicenseAcceptance>false</requireLicenseAcceptance> + <licenseUrl>https://github.com/PingmanTools/websocket-sharp/blob/master/LICENSE.txt</licenseUrl> + <projectUrl>https://github.com/PingmanTools/websocket-sharp/</projectUrl> + <description>websocket-sharp provides the WebSocket protocol client and server. + +It supports: +- RFC 6455 +- WebSocket Client and Server +- Per-message Compression extension +- Secure Connection +- HTTP Authentication (Basic/Digest) +- Query String, Origin header and Cookies +- Connecting through the HTTP Proxy server +- .NET 3.5 or later (includes compatible)</description> + <copyright>sta.blockhead</copyright> + <tags>websocket</tags> + <repository url="https://github.com/PingmanTools/websocket-sharp/" /> + <dependencies> + <group targetFramework=".NETFramework3.5" /> + <group targetFramework=".NETFramework4.5" /> + <group targetFramework=".NETStandard2.0" /> + </dependencies> + </metadata> +</package> \ No newline at end of file diff --git a/Assets/Packages/WebSocketSharp-netstandard.1.0.1/WebSocketSharp-netstandard.nuspec.meta b/Assets/Packages/WebSocketSharp-netstandard.1.0.1/WebSocketSharp-netstandard.nuspec.meta new file mode 100644 index 0000000..7dac618 --- /dev/null +++ b/Assets/Packages/WebSocketSharp-netstandard.1.0.1/WebSocketSharp-netstandard.nuspec.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b2cc6a0b16ab14fe4ba051dc7f34b6c2 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/WebSocketSharp-netstandard.1.0.1/lib.meta b/Assets/Packages/WebSocketSharp-netstandard.1.0.1/lib.meta new file mode 100644 index 0000000..b77f2b1 --- /dev/null +++ b/Assets/Packages/WebSocketSharp-netstandard.1.0.1/lib.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a39cc4c82400245839717ac5f918c11f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/WebSocketSharp-netstandard.1.0.1/lib/netstandard2.0.meta b/Assets/Packages/WebSocketSharp-netstandard.1.0.1/lib/netstandard2.0.meta new file mode 100644 index 0000000..a0acdfe --- /dev/null +++ b/Assets/Packages/WebSocketSharp-netstandard.1.0.1/lib/netstandard2.0.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b0cecdec8c24e4c089316e744ff04271 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/WebSocketSharp-netstandard.1.0.1/lib/netstandard2.0/websocket-sharp.dll b/Assets/Packages/WebSocketSharp-netstandard.1.0.1/lib/netstandard2.0/websocket-sharp.dll new file mode 100644 index 0000000000000000000000000000000000000000..27e2f7fa857813a4206fc48f8bc0faf617b6ee5e GIT binary patch literal 226816 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 AzyJUM literal 0 HcmV?d00001 diff --git a/Assets/Packages/WebSocketSharp-netstandard.1.0.1/lib/netstandard2.0/websocket-sharp.dll.meta b/Assets/Packages/WebSocketSharp-netstandard.1.0.1/lib/netstandard2.0/websocket-sharp.dll.meta new file mode 100644 index 0000000..90104c5 --- /dev/null +++ b/Assets/Packages/WebSocketSharp-netstandard.1.0.1/lib/netstandard2.0/websocket-sharp.dll.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 625d580f04cb2464cad5256f498f47a9 +labels: +- NuGetForUnity +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/WebSocketSharp-netstandard.1.0.1/lib/netstandard2.0/websocket-sharp.xml b/Assets/Packages/WebSocketSharp-netstandard.1.0.1/lib/netstandard2.0/websocket-sharp.xml new file mode 100644 index 0000000..d4ffb44 --- /dev/null +++ b/Assets/Packages/WebSocketSharp-netstandard.1.0.1/lib/netstandard2.0/websocket-sharp.xml @@ -0,0 +1,10326 @@ +<?xml version="1.0"?> +<doc> + <assembly> + <name>websocket-sharp</name> + </assembly> + <members> + <member name="T:WebSocketSharp.ByteOrder"> + <summary> + Specifies the byte order. + </summary> + </member> + <member name="F:WebSocketSharp.ByteOrder.Little"> + <summary> + Specifies Little-endian. + </summary> + </member> + <member name="F:WebSocketSharp.ByteOrder.Big"> + <summary> + Specifies Big-endian. + </summary> + </member> + <member name="T:WebSocketSharp.CloseEventArgs"> + <summary> + Represents the event data for the <see cref="E:WebSocketSharp.WebSocket.OnClose"/> event. + </summary> + <remarks> + <para> + That event occurs when the WebSocket connection has been closed. + </para> + <para> + If you would like to get the reason for the close, you should access + the <see cref="P:WebSocketSharp.CloseEventArgs.Code"/> or <see cref="P:WebSocketSharp.CloseEventArgs.Reason"/> property. + </para> + </remarks> + </member> + <member name="P:WebSocketSharp.CloseEventArgs.Code"> + <summary> + Gets the status code for the close. + </summary> + <value> + A <see cref="T:System.UInt16"/> that represents the status code for the close if any. + </value> + </member> + <member name="P:WebSocketSharp.CloseEventArgs.Reason"> + <summary> + Gets the reason for the close. + </summary> + <value> + A <see cref="T:System.String"/> that represents the reason for the close if any. + </value> + </member> + <member name="P:WebSocketSharp.CloseEventArgs.WasClean"> + <summary> + Gets a value indicating whether the connection has been closed cleanly. + </summary> + <value> + <c>true</c> if the connection has been closed cleanly; otherwise, <c>false</c>. + </value> + </member> + <member name="T:WebSocketSharp.CloseStatusCode"> + <summary> + Indicates the status code for the WebSocket connection close. + </summary> + <remarks> + <para> + The values of this enumeration are defined in + <see href="http://tools.ietf.org/html/rfc6455#section-7.4"> + Section 7.4</see> of RFC 6455. + </para> + <para> + "Reserved value" cannot be sent as a status code in + closing handshake by an endpoint. + </para> + </remarks> + </member> + <member name="F:WebSocketSharp.CloseStatusCode.Normal"> + <summary> + Equivalent to close status 1000. Indicates normal close. + </summary> + </member> + <member name="F:WebSocketSharp.CloseStatusCode.Away"> + <summary> + Equivalent to close status 1001. Indicates that an endpoint is + going away. + </summary> + </member> + <member name="F:WebSocketSharp.CloseStatusCode.ProtocolError"> + <summary> + Equivalent to close status 1002. Indicates that an endpoint is + terminating the connection due to a protocol error. + </summary> + </member> + <member name="F:WebSocketSharp.CloseStatusCode.UnsupportedData"> + <summary> + Equivalent to close status 1003. Indicates that an endpoint is + terminating the connection because it has received a type of + data that it cannot accept. + </summary> + </member> + <member name="F:WebSocketSharp.CloseStatusCode.Undefined"> + <summary> + Equivalent to close status 1004. Still undefined. A Reserved value. + </summary> + </member> + <member name="F:WebSocketSharp.CloseStatusCode.NoStatus"> + <summary> + Equivalent to close status 1005. Indicates that no status code was + actually present. A Reserved value. + </summary> + </member> + <member name="F:WebSocketSharp.CloseStatusCode.Abnormal"> + <summary> + Equivalent to close status 1006. Indicates that the connection was + closed abnormally. A Reserved value. + </summary> + </member> + <member name="F:WebSocketSharp.CloseStatusCode.InvalidData"> + <summary> + Equivalent to close status 1007. Indicates that an endpoint is + terminating the connection because it has received a message that + contains data that is not consistent with the type of the message. + </summary> + </member> + <member name="F:WebSocketSharp.CloseStatusCode.PolicyViolation"> + <summary> + Equivalent to close status 1008. Indicates that an endpoint is + terminating the connection because it has received a message that + violates its policy. + </summary> + </member> + <member name="F:WebSocketSharp.CloseStatusCode.TooBig"> + <summary> + Equivalent to close status 1009. Indicates that an endpoint is + terminating the connection because it has received a message that + is too big to process. + </summary> + </member> + <member name="F:WebSocketSharp.CloseStatusCode.MandatoryExtension"> + <summary> + Equivalent to close status 1010. Indicates that a client is + terminating the connection because it has expected the server to + negotiate one or more extension, but the server did not return + them in the handshake response. + </summary> + </member> + <member name="F:WebSocketSharp.CloseStatusCode.ServerError"> + <summary> + Equivalent to close status 1011. Indicates that a server is + terminating the connection because it has encountered an unexpected + condition that prevented it from fulfilling the request. + </summary> + </member> + <member name="F:WebSocketSharp.CloseStatusCode.TlsHandshakeFailure"> + <summary> + Equivalent to close status 1015. Indicates that the connection was + closed due to a failure to perform a TLS handshake. A Reserved value. + </summary> + </member> + <member name="T:WebSocketSharp.CompressionMethod"> + <summary> + Specifies the method for compression. + </summary> + <remarks> + The methods are defined in + <see href="https://tools.ietf.org/html/rfc7692"> + Compression Extensions for WebSocket</see>. + </remarks> + </member> + <member name="F:WebSocketSharp.CompressionMethod.None"> + <summary> + Specifies no compression. + </summary> + </member> + <member name="F:WebSocketSharp.CompressionMethod.Deflate"> + <summary> + Specifies DEFLATE. + </summary> + </member> + <member name="T:WebSocketSharp.ErrorEventArgs"> + <summary> + Represents the event data for the <see cref="E:WebSocketSharp.WebSocket.OnError"/> event. + </summary> + <remarks> + <para> + That event occurs when the <see cref="T:WebSocketSharp.WebSocket"/> gets an error. + </para> + <para> + If you would like to get the error message, you should access + the <see cref="P:WebSocketSharp.ErrorEventArgs.Message"/> property. + </para> + <para> + And if the error is due to an exception, you can get it by accessing + the <see cref="P:WebSocketSharp.ErrorEventArgs.Exception"/> property. + </para> + </remarks> + </member> + <member name="P:WebSocketSharp.ErrorEventArgs.Exception"> + <summary> + Gets the exception that caused the error. + </summary> + <value> + An <see cref="T:System.Exception"/> instance that represents the cause of + the error if it is due to an exception; otherwise, <see langword="null"/>. + </value> + </member> + <member name="P:WebSocketSharp.ErrorEventArgs.Message"> + <summary> + Gets the error message. + </summary> + <value> + A <see cref="T:System.String"/> that represents the error message. + </value> + </member> + <member name="T:WebSocketSharp.Ext"> + <summary> + Provides a set of static methods for websocket-sharp. + </summary> + </member> + <member name="M:WebSocketSharp.Ext.EqualsWith(System.Int32,System.Char,System.Action{System.Int32})"> + <summary> + Determines whether the specified <see cref="T:System.Int32"/> equals the specified <see cref="T:System.Char"/>, + and invokes the specified <c>Action<int></c> delegate at the same time. + </summary> + <returns> + <c>true</c> if <paramref name="value"/> equals <paramref name="c"/>; + otherwise, <c>false</c>. + </returns> + <param name="value"> + An <see cref="T:System.Int32"/> to compare. + </param> + <param name="c"> + A <see cref="T:System.Char"/> to compare. + </param> + <param name="action"> + An <c>Action<int></c> delegate that references the method(s) called + at the same time as comparing. An <see cref="T:System.Int32"/> parameter to pass to + the method(s) is <paramref name="value"/>. + </param> + </member> + <member name="M:WebSocketSharp.Ext.GetAbsolutePath(System.Uri)"> + <summary> + Gets the absolute path from the specified <see cref="T:System.Uri"/>. + </summary> + <returns> + A <see cref="T:System.String"/> that represents the absolute path if it's successfully found; + otherwise, <see langword="null"/>. + </returns> + <param name="uri"> + A <see cref="T:System.Uri"/> that represents the URI to get the absolute path from. + </param> + </member> + <member name="M:WebSocketSharp.Ext.GetName(System.String,System.Char)"> + <summary> + Gets the name from the specified <see cref="T:System.String"/> that contains a pair of name and + value separated by a separator character. + </summary> + <returns> + A <see cref="T:System.String"/> that represents the name if any; otherwise, <c>null</c>. + </returns> + <param name="nameAndValue"> + A <see cref="T:System.String"/> that contains a pair of name and value separated by + a separator character. + </param> + <param name="separator"> + A <see cref="T:System.Char"/> that represents the separator character. + </param> + </member> + <member name="M:WebSocketSharp.Ext.GetValue(System.String,System.Char)"> + <summary> + Gets the value from the specified <see cref="T:System.String"/> that contains a pair of name and + value separated by a separator character. + </summary> + <returns> + A <see cref="T:System.String"/> that represents the value if any; otherwise, <c>null</c>. + </returns> + <param name="nameAndValue"> + A <see cref="T:System.String"/> that contains a pair of name and value separated by + a separator character. + </param> + <param name="separator"> + A <see cref="T:System.Char"/> that represents the separator character. + </param> + </member> + <member name="M:WebSocketSharp.Ext.TryCreateWebSocketUri(System.String,System.Uri@,System.String@)"> + <summary> + Tries to create a new <see cref="T:System.Uri"/> for WebSocket with + the specified <paramref name="uriString"/>. + </summary> + <returns> + <c>true</c> if the <see cref="T:System.Uri"/> was successfully created; + otherwise, <c>false</c>. + </returns> + <param name="uriString"> + A <see cref="T:System.String"/> that represents a WebSocket URL to try. + </param> + <param name="result"> + When this method returns, a <see cref="T:System.Uri"/> that + represents the WebSocket URL or <see langword="null"/> + if <paramref name="uriString"/> is invalid. + </param> + <param name="message"> + When this method returns, a <see cref="T:System.String"/> that + represents an error message or <see langword="null"/> + if <paramref name="uriString"/> is valid. + </param> + </member> + <member name="M:WebSocketSharp.Ext.Contains(System.String,System.Char[])"> + <summary> + Determines whether the specified <see cref="T:System.String"/> contains any of characters in + the specified array of <see cref="T:System.Char"/>. + </summary> + <returns> + <c>true</c> if <paramref name="value"/> contains any of <paramref name="chars"/>; + otherwise, <c>false</c>. + </returns> + <param name="value"> + A <see cref="T:System.String"/> to test. + </param> + <param name="chars"> + An array of <see cref="T:System.Char"/> that contains characters to find. + </param> + </member> + <member name="M:WebSocketSharp.Ext.Contains(System.Collections.Specialized.NameValueCollection,System.String)"> + <summary> + Determines whether the specified <see cref="T:System.Collections.Specialized.NameValueCollection"/> contains + the entry with the specified <paramref name="name"/>. + </summary> + <returns> + <c>true</c> if <paramref name="collection"/> contains the entry with + <paramref name="name"/>; otherwise, <c>false</c>. + </returns> + <param name="collection"> + A <see cref="T:System.Collections.Specialized.NameValueCollection"/> to test. + </param> + <param name="name"> + A <see cref="T:System.String"/> that represents the key of the entry to find. + </param> + </member> + <member name="M:WebSocketSharp.Ext.Contains(System.Collections.Specialized.NameValueCollection,System.String,System.String)"> + <summary> + Determines whether the specified <see cref="T:System.Collections.Specialized.NameValueCollection"/> contains the entry with + the specified both <paramref name="name"/> and <paramref name="value"/>. + </summary> + <returns> + <c>true</c> if <paramref name="collection"/> contains the entry with both + <paramref name="name"/> and <paramref name="value"/>; otherwise, <c>false</c>. + </returns> + <param name="collection"> + A <see cref="T:System.Collections.Specialized.NameValueCollection"/> to test. + </param> + <param name="name"> + A <see cref="T:System.String"/> that represents the key of the entry to find. + </param> + <param name="value"> + A <see cref="T:System.String"/> that represents the value of the entry to find. + </param> + </member> + <member name="M:WebSocketSharp.Ext.Emit(System.EventHandler,System.Object,System.EventArgs)"> + <summary> + Emits the specified <see cref="T:System.EventHandler"/> delegate if it isn't <see langword="null"/>. + </summary> + <param name="eventHandler"> + A <see cref="T:System.EventHandler"/> to emit. + </param> + <param name="sender"> + An <see cref="T:System.Object"/> from which emits this <paramref name="eventHandler"/>. + </param> + <param name="e"> + A <see cref="T:System.EventArgs"/> that contains no event data. + </param> + </member> + <member name="M:WebSocketSharp.Ext.Emit``1(System.EventHandler{``0},System.Object,``0)"> + <summary> + Emits the specified <c>EventHandler<TEventArgs></c> delegate if it isn't + <see langword="null"/>. + </summary> + <param name="eventHandler"> + An <c>EventHandler<TEventArgs></c> to emit. + </param> + <param name="sender"> + An <see cref="T:System.Object"/> from which emits this <paramref name="eventHandler"/>. + </param> + <param name="e"> + A <c>TEventArgs</c> that represents the event data. + </param> + <typeparam name="TEventArgs"> + The type of the event data generated by the event. + </typeparam> + </member> + <member name="M:WebSocketSharp.Ext.GetCookies(System.Collections.Specialized.NameValueCollection,System.Boolean)"> + <summary> + Gets the collection of the HTTP cookies from the specified HTTP <paramref name="headers"/>. + </summary> + <returns> + A <see cref="T:WebSocketSharp.Net.CookieCollection"/> that receives a collection of the HTTP cookies. + </returns> + <param name="headers"> + A <see cref="T:System.Collections.Specialized.NameValueCollection"/> that contains a collection of the HTTP headers. + </param> + <param name="response"> + <c>true</c> if <paramref name="headers"/> is a collection of the response headers; + otherwise, <c>false</c>. + </param> + </member> + <member name="M:WebSocketSharp.Ext.GetDescription(WebSocketSharp.Net.HttpStatusCode)"> + <summary> + Gets the description of the specified HTTP status <paramref name="code"/>. + </summary> + <returns> + A <see cref="T:System.String"/> that represents the description of the HTTP status code. + </returns> + <param name="code"> + One of <see cref="T:WebSocketSharp.Net.HttpStatusCode"/> enum values, indicates the HTTP status code. + </param> + </member> + <member name="M:WebSocketSharp.Ext.GetStatusDescription(System.Int32)"> + <summary> + Gets the description of the specified HTTP status <paramref name="code"/>. + </summary> + <returns> + A <see cref="T:System.String"/> that represents the description of the HTTP status code. + </returns> + <param name="code"> + An <see cref="T:System.Int32"/> that represents the HTTP status code. + </param> + </member> + <member name="M:WebSocketSharp.Ext.IsCloseStatusCode(System.UInt16)"> + <summary> + Determines whether the specified <see cref="T:System.UInt16"/> is in the + range of the status code for the WebSocket connection close. + </summary> + <remarks> + <para> + The ranges are the following: + </para> + <list type="bullet"> + <item> + <term> + 1000-2999: These numbers are reserved for definition by + the WebSocket protocol. + </term> + </item> + <item> + <term> + 3000-3999: These numbers are reserved for use by libraries, + frameworks, and applications. + </term> + </item> + <item> + <term> + 4000-4999: These numbers are reserved for private use. + </term> + </item> + </list> + </remarks> + <returns> + <c>true</c> if <paramref name="value"/> is in the range of + the status code for the close; otherwise, <c>false</c>. + </returns> + <param name="value"> + A <see cref="T:System.UInt16"/> to test. + </param> + </member> + <member name="M:WebSocketSharp.Ext.IsEnclosedIn(System.String,System.Char)"> + <summary> + Determines whether the specified <see cref="T:System.String"/> is + enclosed in the specified <see cref="T:System.Char"/>. + </summary> + <returns> + <c>true</c> if <paramref name="value"/> is enclosed in + <paramref name="c"/>; otherwise, <c>false</c>. + </returns> + <param name="value"> + A <see cref="T:System.String"/> to test. + </param> + <param name="c"> + A <see cref="T:System.Char"/> to find. + </param> + </member> + <member name="M:WebSocketSharp.Ext.IsHostOrder(WebSocketSharp.ByteOrder)"> + <summary> + Determines whether the specified <see cref="T:WebSocketSharp.ByteOrder"/> is host (this computer + architecture) byte order. + </summary> + <returns> + <c>true</c> if <paramref name="order"/> is host byte order; otherwise, <c>false</c>. + </returns> + <param name="order"> + One of the <see cref="T:WebSocketSharp.ByteOrder"/> enum values, to test. + </param> + </member> + <member name="M:WebSocketSharp.Ext.IsLocal(System.Net.IPAddress)"> + <summary> + Determines whether the specified <see cref="T:System.Net.IPAddress"/> + represents a local IP address. + </summary> + <remarks> + This local means NOT REMOTE for the current host. + </remarks> + <returns> + <c>true</c> if <paramref name="address"/> represents a local IP address; + otherwise, <c>false</c>. + </returns> + <param name="address"> + A <see cref="T:System.Net.IPAddress"/> to test. + </param> + </member> + <member name="M:WebSocketSharp.Ext.IsNullOrEmpty(System.String)"> + <summary> + Determines whether the specified string is <see langword="null"/> or + an empty string. + </summary> + <returns> + <c>true</c> if the string is <see langword="null"/> or an empty string; + otherwise, <c>false</c>. + </returns> + <param name="value"> + A <see cref="T:System.String"/> to test. + </param> + </member> + <member name="M:WebSocketSharp.Ext.IsPredefinedScheme(System.String)"> + <summary> + Determines whether the specified <see cref="T:System.String"/> is + a predefined scheme. + </summary> + <returns> + <c>true</c> if <paramref name="value"/> is a predefined scheme; + otherwise, <c>false</c>. + </returns> + <param name="value"> + A <see cref="T:System.String"/> to test. + </param> + </member> + <member name="M:WebSocketSharp.Ext.IsUpgradeTo(WebSocketSharp.Net.HttpListenerRequest,System.String)"> + <summary> + Determines whether the specified <see cref="T:WebSocketSharp.Net.HttpListenerRequest"/> is + an HTTP Upgrade request to switch to the specified <paramref name="protocol"/>. + </summary> + <returns> + <c>true</c> if <paramref name="request"/> is an HTTP Upgrade request to switch to + <paramref name="protocol"/>; otherwise, <c>false</c>. + </returns> + <param name="request"> + A <see cref="T:WebSocketSharp.Net.HttpListenerRequest"/> that represents the HTTP request. + </param> + <param name="protocol"> + A <see cref="T:System.String"/> that represents the protocol name. + </param> + <exception cref="T:System.ArgumentNullException"> + <para> + <paramref name="request"/> is <see langword="null"/>. + </para> + <para> + -or- + </para> + <para> + <paramref name="protocol"/> is <see langword="null"/>. + </para> + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="protocol"/> is empty. + </exception> + </member> + <member name="M:WebSocketSharp.Ext.MaybeUri(System.String)"> + <summary> + Determines whether the specified <see cref="T:System.String"/> is a URI string. + </summary> + <returns> + <c>true</c> if <paramref name="value"/> may be a URI string; + otherwise, <c>false</c>. + </returns> + <param name="value"> + A <see cref="T:System.String"/> to test. + </param> + </member> + <member name="M:WebSocketSharp.Ext.SubArray``1(``0[],System.Int32,System.Int32)"> + <summary> + Retrieves a sub-array from the specified <paramref name="array"/>. A sub-array starts at + the specified element position in <paramref name="array"/>. + </summary> + <returns> + An array of T that receives a sub-array, or an empty array of T if any problems with + the parameters. + </returns> + <param name="array"> + An array of T from which to retrieve a sub-array. + </param> + <param name="startIndex"> + An <see cref="T:System.Int32"/> that represents the zero-based starting position of + a sub-array in <paramref name="array"/>. + </param> + <param name="length"> + An <see cref="T:System.Int32"/> that represents the number of elements to retrieve. + </param> + <typeparam name="T"> + The type of elements in <paramref name="array"/>. + </typeparam> + </member> + <member name="M:WebSocketSharp.Ext.SubArray``1(``0[],System.Int64,System.Int64)"> + <summary> + Retrieves a sub-array from the specified <paramref name="array"/>. A sub-array starts at + the specified element position in <paramref name="array"/>. + </summary> + <returns> + An array of T that receives a sub-array, or an empty array of T if any problems with + the parameters. + </returns> + <param name="array"> + An array of T from which to retrieve a sub-array. + </param> + <param name="startIndex"> + A <see cref="T:System.Int64"/> that represents the zero-based starting position of + a sub-array in <paramref name="array"/>. + </param> + <param name="length"> + A <see cref="T:System.Int64"/> that represents the number of elements to retrieve. + </param> + <typeparam name="T"> + The type of elements in <paramref name="array"/>. + </typeparam> + </member> + <member name="M:WebSocketSharp.Ext.Times(System.Int32,System.Action)"> + <summary> + Executes the specified <see cref="T:System.Action"/> delegate <paramref name="n"/> times. + </summary> + <param name="n"> + An <see cref="T:System.Int32"/> is the number of times to execute. + </param> + <param name="action"> + An <see cref="T:System.Action"/> delegate that references the method(s) to execute. + </param> + </member> + <member name="M:WebSocketSharp.Ext.Times(System.Int64,System.Action)"> + <summary> + Executes the specified <see cref="T:System.Action"/> delegate <paramref name="n"/> times. + </summary> + <param name="n"> + A <see cref="T:System.Int64"/> is the number of times to execute. + </param> + <param name="action"> + An <see cref="T:System.Action"/> delegate that references the method(s) to execute. + </param> + </member> + <member name="M:WebSocketSharp.Ext.Times(System.UInt32,System.Action)"> + <summary> + Executes the specified <see cref="T:System.Action"/> delegate <paramref name="n"/> times. + </summary> + <param name="n"> + A <see cref="T:System.UInt32"/> is the number of times to execute. + </param> + <param name="action"> + An <see cref="T:System.Action"/> delegate that references the method(s) to execute. + </param> + </member> + <member name="M:WebSocketSharp.Ext.Times(System.UInt64,System.Action)"> + <summary> + Executes the specified <see cref="T:System.Action"/> delegate <paramref name="n"/> times. + </summary> + <param name="n"> + A <see cref="T:System.UInt64"/> is the number of times to execute. + </param> + <param name="action"> + An <see cref="T:System.Action"/> delegate that references the method(s) to execute. + </param> + </member> + <member name="M:WebSocketSharp.Ext.Times(System.Int32,System.Action{System.Int32})"> + <summary> + Executes the specified <c>Action<int></c> delegate <paramref name="n"/> times. + </summary> + <param name="n"> + An <see cref="T:System.Int32"/> is the number of times to execute. + </param> + <param name="action"> + An <c>Action<int></c> delegate that references the method(s) to execute. + An <see cref="T:System.Int32"/> parameter to pass to the method(s) is the zero-based count of + iteration. + </param> + </member> + <member name="M:WebSocketSharp.Ext.Times(System.Int64,System.Action{System.Int64})"> + <summary> + Executes the specified <c>Action<long></c> delegate <paramref name="n"/> times. + </summary> + <param name="n"> + A <see cref="T:System.Int64"/> is the number of times to execute. + </param> + <param name="action"> + An <c>Action<long></c> delegate that references the method(s) to execute. + A <see cref="T:System.Int64"/> parameter to pass to the method(s) is the zero-based count of + iteration. + </param> + </member> + <member name="M:WebSocketSharp.Ext.Times(System.UInt32,System.Action{System.UInt32})"> + <summary> + Executes the specified <c>Action<uint></c> delegate <paramref name="n"/> times. + </summary> + <param name="n"> + A <see cref="T:System.UInt32"/> is the number of times to execute. + </param> + <param name="action"> + An <c>Action<uint></c> delegate that references the method(s) to execute. + A <see cref="T:System.UInt32"/> parameter to pass to the method(s) is the zero-based count of + iteration. + </param> + </member> + <member name="M:WebSocketSharp.Ext.Times(System.UInt64,System.Action{System.UInt64})"> + <summary> + Executes the specified <c>Action<ulong></c> delegate <paramref name="n"/> times. + </summary> + <param name="n"> + A <see cref="T:System.UInt64"/> is the number of times to execute. + </param> + <param name="action"> + An <c>Action<ulong></c> delegate that references the method(s) to execute. + A <see cref="T:System.UInt64"/> parameter to pass to this method(s) is the zero-based count of + iteration. + </param> + </member> + <member name="M:WebSocketSharp.Ext.To``1(System.Byte[],WebSocketSharp.ByteOrder)"> + <summary> + Converts the specified array of <see cref="T:System.Byte"/> to the specified type data. + </summary> + <returns> + A T converted from <paramref name="source"/>, or a default value of + T if <paramref name="source"/> is an empty array of <see cref="T:System.Byte"/> or + if the type of T isn't <see cref="T:System.Boolean"/>, <see cref="T:System.Char"/>, <see cref="T:System.Double"/>, + <see cref="T:System.Single"/>, <see cref="T:System.Int32"/>, <see cref="T:System.Int64"/>, <see cref="T:System.Int16"/>, + <see cref="T:System.UInt32"/>, <see cref="T:System.UInt64"/>, or <see cref="T:System.UInt16"/>. + </returns> + <param name="source"> + An array of <see cref="T:System.Byte"/> to convert. + </param> + <param name="sourceOrder"> + One of the <see cref="T:WebSocketSharp.ByteOrder"/> enum values, specifies the byte order of + <paramref name="source"/>. + </param> + <typeparam name="T"> + The type of the return. The T must be a value type. + </typeparam> + <exception cref="T:System.ArgumentNullException"> + <paramref name="source"/> is <see langword="null"/>. + </exception> + </member> + <member name="M:WebSocketSharp.Ext.ToByteArray``1(``0,WebSocketSharp.ByteOrder)"> + <summary> + Converts the specified <paramref name="value"/> to an array of <see cref="T:System.Byte"/>. + </summary> + <returns> + An array of <see cref="T:System.Byte"/> converted from <paramref name="value"/>. + </returns> + <param name="value"> + A T to convert. + </param> + <param name="order"> + One of the <see cref="T:WebSocketSharp.ByteOrder"/> enum values, specifies the byte order of the return. + </param> + <typeparam name="T"> + The type of <paramref name="value"/>. The T must be a value type. + </typeparam> + </member> + <member name="M:WebSocketSharp.Ext.ToHostOrder(System.Byte[],WebSocketSharp.ByteOrder)"> + <summary> + Converts the order of the specified array of <see cref="T:System.Byte"/> to the host byte order. + </summary> + <returns> + An array of <see cref="T:System.Byte"/> converted from <paramref name="source"/>. + </returns> + <param name="source"> + An array of <see cref="T:System.Byte"/> to convert. + </param> + <param name="sourceOrder"> + One of the <see cref="T:WebSocketSharp.ByteOrder"/> enum values, specifies the byte order of + <paramref name="source"/>. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="source"/> is <see langword="null"/>. + </exception> + </member> + <member name="M:WebSocketSharp.Ext.ToString``1(``0[],System.String)"> + <summary> + Converts the specified <paramref name="array"/> to a <see cref="T:System.String"/> that + concatenates the each element of <paramref name="array"/> across the specified + <paramref name="separator"/>. + </summary> + <returns> + A <see cref="T:System.String"/> converted from <paramref name="array"/>, + or <see cref="F:System.String.Empty"/> if <paramref name="array"/> is empty. + </returns> + <param name="array"> + An array of T to convert. + </param> + <param name="separator"> + A <see cref="T:System.String"/> that represents the separator string. + </param> + <typeparam name="T"> + The type of elements in <paramref name="array"/>. + </typeparam> + <exception cref="T:System.ArgumentNullException"> + <paramref name="array"/> is <see langword="null"/>. + </exception> + </member> + <member name="M:WebSocketSharp.Ext.ToUri(System.String)"> + <summary> + Converts the specified <see cref="T:System.String"/> to a <see cref="T:System.Uri"/>. + </summary> + <returns> + A <see cref="T:System.Uri"/> converted from <paramref name="value"/> or + <see langword="null"/> if the convert has failed. + </returns> + <param name="value"> + A <see cref="T:System.String"/> to convert. + </param> + </member> + <member name="M:WebSocketSharp.Ext.UrlDecode(System.String)"> + <summary> + URL-decodes the specified <see cref="T:System.String"/>. + </summary> + <returns> + A <see cref="T:System.String"/> that receives the decoded string or + <paramref name="value"/> if it is <see langword="null"/> or empty. + </returns> + <param name="value"> + A <see cref="T:System.String"/> to decode. + </param> + </member> + <member name="M:WebSocketSharp.Ext.UrlEncode(System.String)"> + <summary> + URL-encodes the specified <see cref="T:System.String"/>. + </summary> + <returns> + A <see cref="T:System.String"/> that receives the encoded string or + <paramref name="value"/> if it is <see langword="null"/> or empty. + </returns> + <param name="value"> + A <see cref="T:System.String"/> to encode. + </param> + </member> + <member name="M:WebSocketSharp.Ext.WriteContent(WebSocketSharp.Net.HttpListenerResponse,System.Byte[])"> + <summary> + Writes and sends the specified <paramref name="content"/> data with the specified + <see cref="T:WebSocketSharp.Net.HttpListenerResponse"/>. + </summary> + <param name="response"> + A <see cref="T:WebSocketSharp.Net.HttpListenerResponse"/> that represents the HTTP response used to + send the content data. + </param> + <param name="content"> + An array of <see cref="T:System.Byte"/> that represents the content data to send. + </param> + <exception cref="T:System.ArgumentNullException"> + <para> + <paramref name="response"/> is <see langword="null"/>. + </para> + <para> + -or- + </para> + <para> + <paramref name="content"/> is <see langword="null"/>. + </para> + </exception> + </member> + <member name="T:WebSocketSharp.Fin"> + <summary> + Indicates whether a WebSocket frame is the final frame of a message. + </summary> + <remarks> + The values of this enumeration are defined in + <see href="http://tools.ietf.org/html/rfc6455#section-5.2">Section 5.2</see> of RFC 6455. + </remarks> + </member> + <member name="F:WebSocketSharp.Fin.More"> + <summary> + Equivalent to numeric value 0. Indicates more frames of a message follow. + </summary> + </member> + <member name="F:WebSocketSharp.Fin.Final"> + <summary> + Equivalent to numeric value 1. Indicates the final frame of a message. + </summary> + </member> + <member name="T:WebSocketSharp.LogData"> + <summary> + Represents a log data used by the <see cref="T:WebSocketSharp.Logger"/> class. + </summary> + </member> + <member name="P:WebSocketSharp.LogData.Caller"> + <summary> + Gets the information of the logging method caller. + </summary> + <value> + A <see cref="T:System.Diagnostics.StackFrame"/> that provides the information of the logging method caller. + </value> + </member> + <member name="P:WebSocketSharp.LogData.Date"> + <summary> + Gets the date and time when the log data was created. + </summary> + <value> + A <see cref="T:System.DateTime"/> that represents the date and time when the log data was created. + </value> + </member> + <member name="P:WebSocketSharp.LogData.Level"> + <summary> + Gets the logging level of the log data. + </summary> + <value> + One of the <see cref="T:WebSocketSharp.LogLevel"/> enum values, indicates the logging level of the log data. + </value> + </member> + <member name="P:WebSocketSharp.LogData.Message"> + <summary> + Gets the message of the log data. + </summary> + <value> + A <see cref="T:System.String"/> that represents the message of the log data. + </value> + </member> + <member name="M:WebSocketSharp.LogData.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents the current <see cref="T:WebSocketSharp.LogData"/>. + </summary> + <returns> + A <see cref="T:System.String"/> that represents the current <see cref="T:WebSocketSharp.LogData"/>. + </returns> + </member> + <member name="T:WebSocketSharp.Logger"> + <summary> + Provides a set of methods and properties for logging. + </summary> + <remarks> + <para> + If you output a log with lower than the value of the <see cref="P:WebSocketSharp.Logger.Level"/> property, + it cannot be outputted. + </para> + <para> + The default output action writes a log to the standard output stream and the log file + if the <see cref="P:WebSocketSharp.Logger.File"/> property has a valid path to it. + </para> + <para> + If you would like to use the custom output action, you should set + the <see cref="P:WebSocketSharp.Logger.Output"/> property to any <c>Action<LogData, string></c> + delegate. + </para> + </remarks> + </member> + <member name="M:WebSocketSharp.Logger.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Logger"/> class. + </summary> + <remarks> + This constructor initializes the current logging level with <see cref="F:WebSocketSharp.LogLevel.Error"/>. + </remarks> + </member> + <member name="M:WebSocketSharp.Logger.#ctor(WebSocketSharp.LogLevel)"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Logger"/> class with + the specified logging <paramref name="level"/>. + </summary> + <param name="level"> + One of the <see cref="T:WebSocketSharp.LogLevel"/> enum values. + </param> + </member> + <member name="M:WebSocketSharp.Logger.#ctor(WebSocketSharp.LogLevel,System.String,System.Action{WebSocketSharp.LogData,System.String})"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Logger"/> class with + the specified logging <paramref name="level"/>, path to the log <paramref name="file"/>, + and <paramref name="output"/> action. + </summary> + <param name="level"> + One of the <see cref="T:WebSocketSharp.LogLevel"/> enum values. + </param> + <param name="file"> + A <see cref="T:System.String"/> that represents the path to the log file. + </param> + <param name="output"> + An <c>Action<LogData, string></c> delegate that references the method(s) used to + output a log. A <see cref="T:System.String"/> parameter passed to this delegate is + <paramref name="file"/>. + </param> + </member> + <member name="P:WebSocketSharp.Logger.File"> + <summary> + Gets or sets the current path to the log file. + </summary> + <value> + A <see cref="T:System.String"/> that represents the current path to the log file if any. + </value> + </member> + <member name="P:WebSocketSharp.Logger.Level"> + <summary> + Gets or sets the current logging level. + </summary> + <remarks> + A log with lower than the value of this property cannot be outputted. + </remarks> + <value> + One of the <see cref="T:WebSocketSharp.LogLevel"/> enum values, specifies the current logging level. + </value> + </member> + <member name="P:WebSocketSharp.Logger.Output"> + <summary> + Gets or sets the current output action used to output a log. + </summary> + <value> + <para> + An <c>Action<LogData, string></c> delegate that references the method(s) used to + output a log. A <see cref="T:System.String"/> parameter passed to this delegate is the value of + the <see cref="P:WebSocketSharp.Logger.File"/> property. + </para> + <para> + If the value to set is <see langword="null"/>, the current output action is changed to + the default output action. + </para> + </value> + </member> + <member name="M:WebSocketSharp.Logger.Debug(System.String)"> + <summary> + Outputs <paramref name="message"/> as a log with <see cref="F:WebSocketSharp.LogLevel.Debug"/>. + </summary> + <remarks> + If the current logging level is higher than <see cref="F:WebSocketSharp.LogLevel.Debug"/>, + this method doesn't output <paramref name="message"/> as a log. + </remarks> + <param name="message"> + A <see cref="T:System.String"/> that represents the message to output as a log. + </param> + </member> + <member name="M:WebSocketSharp.Logger.Error(System.String)"> + <summary> + Outputs <paramref name="message"/> as a log with <see cref="F:WebSocketSharp.LogLevel.Error"/>. + </summary> + <remarks> + If the current logging level is higher than <see cref="F:WebSocketSharp.LogLevel.Error"/>, + this method doesn't output <paramref name="message"/> as a log. + </remarks> + <param name="message"> + A <see cref="T:System.String"/> that represents the message to output as a log. + </param> + </member> + <member name="M:WebSocketSharp.Logger.Fatal(System.String)"> + <summary> + Outputs <paramref name="message"/> as a log with <see cref="F:WebSocketSharp.LogLevel.Fatal"/>. + </summary> + <param name="message"> + A <see cref="T:System.String"/> that represents the message to output as a log. + </param> + </member> + <member name="M:WebSocketSharp.Logger.Info(System.String)"> + <summary> + Outputs <paramref name="message"/> as a log with <see cref="F:WebSocketSharp.LogLevel.Info"/>. + </summary> + <remarks> + If the current logging level is higher than <see cref="F:WebSocketSharp.LogLevel.Info"/>, + this method doesn't output <paramref name="message"/> as a log. + </remarks> + <param name="message"> + A <see cref="T:System.String"/> that represents the message to output as a log. + </param> + </member> + <member name="M:WebSocketSharp.Logger.Trace(System.String)"> + <summary> + Outputs <paramref name="message"/> as a log with <see cref="F:WebSocketSharp.LogLevel.Trace"/>. + </summary> + <remarks> + If the current logging level is higher than <see cref="F:WebSocketSharp.LogLevel.Trace"/>, + this method doesn't output <paramref name="message"/> as a log. + </remarks> + <param name="message"> + A <see cref="T:System.String"/> that represents the message to output as a log. + </param> + </member> + <member name="M:WebSocketSharp.Logger.Warn(System.String)"> + <summary> + Outputs <paramref name="message"/> as a log with <see cref="F:WebSocketSharp.LogLevel.Warn"/>. + </summary> + <remarks> + If the current logging level is higher than <see cref="F:WebSocketSharp.LogLevel.Warn"/>, + this method doesn't output <paramref name="message"/> as a log. + </remarks> + <param name="message"> + A <see cref="T:System.String"/> that represents the message to output as a log. + </param> + </member> + <member name="T:WebSocketSharp.LogLevel"> + <summary> + Specifies the logging level. + </summary> + </member> + <member name="F:WebSocketSharp.LogLevel.Trace"> + <summary> + Specifies the bottom logging level. + </summary> + </member> + <member name="F:WebSocketSharp.LogLevel.Debug"> + <summary> + Specifies the 2nd logging level from the bottom. + </summary> + </member> + <member name="F:WebSocketSharp.LogLevel.Info"> + <summary> + Specifies the 3rd logging level from the bottom. + </summary> + </member> + <member name="F:WebSocketSharp.LogLevel.Warn"> + <summary> + Specifies the 3rd logging level from the top. + </summary> + </member> + <member name="F:WebSocketSharp.LogLevel.Error"> + <summary> + Specifies the 2nd logging level from the top. + </summary> + </member> + <member name="F:WebSocketSharp.LogLevel.Fatal"> + <summary> + Specifies the top logging level. + </summary> + </member> + <member name="T:WebSocketSharp.Mask"> + <summary> + Indicates whether the payload data of a WebSocket frame is masked. + </summary> + <remarks> + The values of this enumeration are defined in + <see href="http://tools.ietf.org/html/rfc6455#section-5.2">Section 5.2</see> of RFC 6455. + </remarks> + </member> + <member name="F:WebSocketSharp.Mask.Off"> + <summary> + Equivalent to numeric value 0. Indicates not masked. + </summary> + </member> + <member name="F:WebSocketSharp.Mask.On"> + <summary> + Equivalent to numeric value 1. Indicates masked. + </summary> + </member> + <member name="T:WebSocketSharp.MessageEventArgs"> + <summary> + Represents the event data for the <see cref="E:WebSocketSharp.WebSocket.OnMessage"/> event. + </summary> + <remarks> + <para> + That event occurs when the <see cref="T:WebSocketSharp.WebSocket"/> receives + a message or a ping if the <see cref="P:WebSocketSharp.WebSocket.EmitOnPing"/> + property is set to <c>true</c>. + </para> + <para> + If you would like to get the message data, you should access + the <see cref="P:WebSocketSharp.MessageEventArgs.Data"/> or <see cref="P:WebSocketSharp.MessageEventArgs.RawData"/> property. + </para> + </remarks> + </member> + <member name="P:WebSocketSharp.MessageEventArgs.Opcode"> + <summary> + Gets the opcode for the message. + </summary> + <value> + <see cref="F:WebSocketSharp.Opcode.Text"/>, <see cref="F:WebSocketSharp.Opcode.Binary"/>, + or <see cref="F:WebSocketSharp.Opcode.Ping"/>. + </value> + </member> + <member name="P:WebSocketSharp.MessageEventArgs.Data"> + <summary> + Gets the message data as a <see cref="T:System.String"/>. + </summary> + <value> + A <see cref="T:System.String"/> that represents the message data if its type is + text or ping and if decoding it to a string has successfully done; + otherwise, <see langword="null"/>. + </value> + </member> + <member name="P:WebSocketSharp.MessageEventArgs.IsBinary"> + <summary> + Gets a value indicating whether the message type is binary. + </summary> + <value> + <c>true</c> if the message type is binary; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.MessageEventArgs.IsPing"> + <summary> + Gets a value indicating whether the message type is ping. + </summary> + <value> + <c>true</c> if the message type is ping; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.MessageEventArgs.IsText"> + <summary> + Gets a value indicating whether the message type is text. + </summary> + <value> + <c>true</c> if the message type is text; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.MessageEventArgs.RawData"> + <summary> + Gets the message data as an array of <see cref="T:System.Byte"/>. + </summary> + <value> + An array of <see cref="T:System.Byte"/> that represents the message data. + </value> + </member> + <member name="T:WebSocketSharp.Net.AuthenticationSchemes"> + <summary> + Specifies the scheme for authentication. + </summary> + </member> + <member name="F:WebSocketSharp.Net.AuthenticationSchemes.None"> + <summary> + No authentication is allowed. + </summary> + </member> + <member name="F:WebSocketSharp.Net.AuthenticationSchemes.Digest"> + <summary> + Specifies digest authentication. + </summary> + </member> + <member name="F:WebSocketSharp.Net.AuthenticationSchemes.Basic"> + <summary> + Specifies basic authentication. + </summary> + </member> + <member name="F:WebSocketSharp.Net.AuthenticationSchemes.Anonymous"> + <summary> + Specifies anonymous authentication. + </summary> + </member> + <member name="T:WebSocketSharp.Net.ClientSslConfiguration"> + <summary> + Stores the parameters for the <see cref="T:System.Net.Security.SslStream"/> used by clients. + </summary> + </member> + <member name="M:WebSocketSharp.Net.ClientSslConfiguration.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Net.ClientSslConfiguration"/> class. + </summary> + </member> + <member name="M:WebSocketSharp.Net.ClientSslConfiguration.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Net.ClientSslConfiguration"/> class + with the specified <paramref name="targetHost"/>. + </summary> + <param name="targetHost"> + A <see cref="T:System.String"/> that represents the target host server name. + </param> + </member> + <member name="M:WebSocketSharp.Net.ClientSslConfiguration.#ctor(WebSocketSharp.Net.ClientSslConfiguration)"> + <summary> + Copies the parameters from the specified <paramref name="configuration"/> to + a new instance of the <see cref="T:WebSocketSharp.Net.ClientSslConfiguration"/> class. + </summary> + <param name="configuration"> + A <see cref="T:WebSocketSharp.Net.ClientSslConfiguration"/> from which to copy. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="configuration"/> is <see langword="null"/>. + </exception> + </member> + <member name="P:WebSocketSharp.Net.ClientSslConfiguration.CheckCertificateRevocation"> + <summary> + Gets or sets a value indicating whether the certificate revocation + list is checked during authentication. + </summary> + <value> + <para> + <c>true</c> if the certificate revocation list is checked during + authentication; otherwise, <c>false</c>. + </para> + <para> + The default value is <c>false</c>. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Net.ClientSslConfiguration.ClientCertificates"> + <summary> + Gets or sets the certificates from which to select one to + supply to the server. + </summary> + <value> + <para> + A <see cref="T:System.Security.Cryptography.X509Certificates.X509CertificateCollection"/> or <see langword="null"/>. + </para> + <para> + That collection contains client certificates from which to select. + </para> + <para> + The default value is <see langword="null"/>. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Net.ClientSslConfiguration.ClientCertificateSelectionCallback"> + <summary> + Gets or sets the callback used to select the certificate to + supply to the server. + </summary> + <remarks> + No certificate is supplied if the callback returns + <see langword="null"/>. + </remarks> + <value> + <para> + A <see cref="T:System.Net.Security.LocalCertificateSelectionCallback"/> delegate that + invokes the method called for selecting the certificate. + </para> + <para> + The default value is a delegate that invokes a method that + only returns <see langword="null"/>. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Net.ClientSslConfiguration.EnabledSslProtocols"> + <summary> + Gets or sets the protocols used for authentication. + </summary> + <value> + <para> + The <see cref="T:System.Security.Authentication.SslProtocols"/> enum values that represent + the protocols used for authentication. + </para> + <para> + The default value is <see cref="F:System.Security.Authentication.SslProtocols.Default"/>. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Net.ClientSslConfiguration.ServerCertificateValidationCallback"> + <summary> + Gets or sets the callback used to validate the certificate + supplied by the server. + </summary> + <remarks> + The certificate is valid if the callback returns <c>true</c>. + </remarks> + <value> + <para> + A <see cref="T:System.Net.Security.RemoteCertificateValidationCallback"/> delegate that + invokes the method called for validating the certificate. + </para> + <para> + The default value is a delegate that invokes a method that + only returns <c>true</c>. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Net.ClientSslConfiguration.TargetHost"> + <summary> + Gets or sets the target host server name. + </summary> + <value> + <para> + A <see cref="T:System.String"/> or <see langword="null"/> + if not specified. + </para> + <para> + That string represents the name of the server that + will share a secure connection with a client. + </para> + </value> + </member> + <member name="T:WebSocketSharp.Net.Cookie"> + <summary> + Provides a set of methods and properties used to manage an HTTP Cookie. + </summary> + <remarks> + <para> + The Cookie class supports the following cookie formats: + <see href="http://web.archive.org/web/20020803110822/http://wp.netscape.com/newsref/std/cookie_spec.html">Netscape specification</see>, + <see href="http://www.ietf.org/rfc/rfc2109.txt">RFC 2109</see>, and + <see href="http://www.ietf.org/rfc/rfc2965.txt">RFC 2965</see> + </para> + <para> + The Cookie class cannot be inherited. + </para> + </remarks> + </member> + <member name="M:WebSocketSharp.Net.Cookie.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Net.Cookie"/> class. + </summary> + </member> + <member name="M:WebSocketSharp.Net.Cookie.#ctor(System.String,System.String)"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Net.Cookie"/> class with the specified + <paramref name="name"/> and <paramref name="value"/>. + </summary> + <param name="name"> + A <see cref="T:System.String"/> that represents the Name of the cookie. + </param> + <param name="value"> + A <see cref="T:System.String"/> that represents the Value of the cookie. + </param> + <exception cref="T:WebSocketSharp.Net.CookieException"> + <para> + <paramref name="name"/> is <see langword="null"/> or empty. + </para> + <para> + - or - + </para> + <para> + <paramref name="name"/> contains an invalid character. + </para> + <para> + - or - + </para> + <para> + <paramref name="value"/> is <see langword="null"/>. + </para> + <para> + - or - + </para> + <para> + <paramref name="value"/> contains a string not enclosed in double quotes + that contains an invalid character. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Net.Cookie.#ctor(System.String,System.String,System.String)"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Net.Cookie"/> class with the specified + <paramref name="name"/>, <paramref name="value"/>, and <paramref name="path"/>. + </summary> + <param name="name"> + A <see cref="T:System.String"/> that represents the Name of the cookie. + </param> + <param name="value"> + A <see cref="T:System.String"/> that represents the Value of the cookie. + </param> + <param name="path"> + A <see cref="T:System.String"/> that represents the value of the Path attribute of the cookie. + </param> + <exception cref="T:WebSocketSharp.Net.CookieException"> + <para> + <paramref name="name"/> is <see langword="null"/> or empty. + </para> + <para> + - or - + </para> + <para> + <paramref name="name"/> contains an invalid character. + </para> + <para> + - or - + </para> + <para> + <paramref name="value"/> is <see langword="null"/>. + </para> + <para> + - or - + </para> + <para> + <paramref name="value"/> contains a string not enclosed in double quotes + that contains an invalid character. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Net.Cookie.#ctor(System.String,System.String,System.String,System.String)"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Net.Cookie"/> class with the specified + <paramref name="name"/>, <paramref name="value"/>, <paramref name="path"/>, and + <paramref name="domain"/>. + </summary> + <param name="name"> + A <see cref="T:System.String"/> that represents the Name of the cookie. + </param> + <param name="value"> + A <see cref="T:System.String"/> that represents the Value of the cookie. + </param> + <param name="path"> + A <see cref="T:System.String"/> that represents the value of the Path attribute of the cookie. + </param> + <param name="domain"> + A <see cref="T:System.String"/> that represents the value of the Domain attribute of the cookie. + </param> + <exception cref="T:WebSocketSharp.Net.CookieException"> + <para> + <paramref name="name"/> is <see langword="null"/> or empty. + </para> + <para> + - or - + </para> + <para> + <paramref name="name"/> contains an invalid character. + </para> + <para> + - or - + </para> + <para> + <paramref name="value"/> is <see langword="null"/>. + </para> + <para> + - or - + </para> + <para> + <paramref name="value"/> contains a string not enclosed in double quotes + that contains an invalid character. + </para> + </exception> + </member> + <member name="P:WebSocketSharp.Net.Cookie.Comment"> + <summary> + Gets or sets the value of the Comment attribute of the cookie. + </summary> + <value> + A <see cref="T:System.String"/> that represents the comment to document intended use of the cookie. + </value> + </member> + <member name="P:WebSocketSharp.Net.Cookie.CommentUri"> + <summary> + Gets or sets the value of the CommentURL attribute of the cookie. + </summary> + <value> + A <see cref="T:System.Uri"/> that represents the URI that provides the comment to document intended + use of the cookie. + </value> + </member> + <member name="P:WebSocketSharp.Net.Cookie.Discard"> + <summary> + Gets or sets a value indicating whether the client discards the cookie unconditionally + when the client terminates. + </summary> + <value> + <c>true</c> if the client discards the cookie unconditionally when the client terminates; + otherwise, <c>false</c>. The default value is <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.Cookie.Domain"> + <summary> + Gets or sets the value of the Domain attribute of the cookie. + </summary> + <value> + A <see cref="T:System.String"/> that represents the URI for which the cookie is valid. + </value> + </member> + <member name="P:WebSocketSharp.Net.Cookie.Expired"> + <summary> + Gets or sets a value indicating whether the cookie has expired. + </summary> + <value> + <c>true</c> if the cookie has expired; otherwise, <c>false</c>. + The default value is <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.Cookie.Expires"> + <summary> + Gets or sets the value of the Expires attribute of the cookie. + </summary> + <value> + A <see cref="T:System.DateTime"/> that represents the date and time at which the cookie expires. + The default value is <see cref="F:System.DateTime.MinValue"/>. + </value> + </member> + <member name="P:WebSocketSharp.Net.Cookie.HttpOnly"> + <summary> + Gets or sets a value indicating whether non-HTTP APIs can access the cookie. + </summary> + <value> + <c>true</c> if non-HTTP APIs cannot access the cookie; otherwise, <c>false</c>. + The default value is <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.Cookie.Name"> + <summary> + Gets or sets the Name of the cookie. + </summary> + <value> + A <see cref="T:System.String"/> that represents the Name of the cookie. + </value> + <exception cref="T:WebSocketSharp.Net.CookieException"> + <para> + The value specified for a set operation is <see langword="null"/> or empty. + </para> + <para> + - or - + </para> + <para> + The value specified for a set operation contains an invalid character. + </para> + </exception> + </member> + <member name="P:WebSocketSharp.Net.Cookie.Path"> + <summary> + Gets or sets the value of the Path attribute of the cookie. + </summary> + <value> + A <see cref="T:System.String"/> that represents the subset of URI on the origin server + to which the cookie applies. + </value> + </member> + <member name="P:WebSocketSharp.Net.Cookie.Port"> + <summary> + Gets or sets the value of the Port attribute of the cookie. + </summary> + <value> + A <see cref="T:System.String"/> that represents the list of TCP ports to which the cookie applies. + </value> + <exception cref="T:WebSocketSharp.Net.CookieException"> + The value specified for a set operation isn't enclosed in double quotes or + couldn't be parsed. + </exception> + </member> + <member name="P:WebSocketSharp.Net.Cookie.Secure"> + <summary> + Gets or sets a value indicating whether the security level of the cookie is secure. + </summary> + <remarks> + When this property is <c>true</c>, the cookie may be included in the HTTP request + only if the request is transmitted over the HTTPS. + </remarks> + <value> + <c>true</c> if the security level of the cookie is secure; otherwise, <c>false</c>. + The default value is <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.Cookie.TimeStamp"> + <summary> + Gets the time when the cookie was issued. + </summary> + <value> + A <see cref="T:System.DateTime"/> that represents the time when the cookie was issued. + </value> + </member> + <member name="P:WebSocketSharp.Net.Cookie.Value"> + <summary> + Gets or sets the Value of the cookie. + </summary> + <value> + A <see cref="T:System.String"/> that represents the Value of the cookie. + </value> + <exception cref="T:WebSocketSharp.Net.CookieException"> + <para> + The value specified for a set operation is <see langword="null"/>. + </para> + <para> + - or - + </para> + <para> + The value specified for a set operation contains a string not enclosed in double quotes + that contains an invalid character. + </para> + </exception> + </member> + <member name="P:WebSocketSharp.Net.Cookie.Version"> + <summary> + Gets or sets the value of the Version attribute of the cookie. + </summary> + <value> + An <see cref="T:System.Int32"/> that represents the version of the HTTP state management + to which the cookie conforms. + </value> + <exception cref="T:System.ArgumentOutOfRangeException"> + The value specified for a set operation isn't 0 or 1. + </exception> + </member> + <member name="M:WebSocketSharp.Net.Cookie.Equals(System.Object)"> + <summary> + Determines whether the specified <see cref="T:System.Object"/> is equal to the current + <see cref="T:WebSocketSharp.Net.Cookie"/>. + </summary> + <param name="comparand"> + An <see cref="T:System.Object"/> to compare with the current <see cref="T:WebSocketSharp.Net.Cookie"/>. + </param> + <returns> + <c>true</c> if <paramref name="comparand"/> is equal to the current <see cref="T:WebSocketSharp.Net.Cookie"/>; + otherwise, <c>false</c>. + </returns> + </member> + <member name="M:WebSocketSharp.Net.Cookie.GetHashCode"> + <summary> + Serves as a hash function for a <see cref="T:WebSocketSharp.Net.Cookie"/> object. + </summary> + <returns> + An <see cref="T:System.Int32"/> that represents the hash code for the current <see cref="T:WebSocketSharp.Net.Cookie"/>. + </returns> + </member> + <member name="M:WebSocketSharp.Net.Cookie.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents the current <see cref="T:WebSocketSharp.Net.Cookie"/>. + </summary> + <remarks> + This method returns a <see cref="T:System.String"/> to use to send an HTTP Cookie to + an origin server. + </remarks> + <returns> + A <see cref="T:System.String"/> that represents the current <see cref="T:WebSocketSharp.Net.Cookie"/>. + </returns> + </member> + <member name="T:WebSocketSharp.Net.CookieCollection"> + <summary> + Provides a collection container for instances of the <see cref="T:WebSocketSharp.Net.Cookie"/> class. + </summary> + </member> + <member name="M:WebSocketSharp.Net.CookieCollection.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Net.CookieCollection"/> class. + </summary> + </member> + <member name="P:WebSocketSharp.Net.CookieCollection.Count"> + <summary> + Gets the number of cookies in the collection. + </summary> + <value> + An <see cref="T:System.Int32"/> that represents the number of cookies in the collection. + </value> + </member> + <member name="P:WebSocketSharp.Net.CookieCollection.IsReadOnly"> + <summary> + Gets a value indicating whether the collection is read-only. + </summary> + <value> + <c>true</c> if the collection is read-only; otherwise, <c>false</c>. + The default value is <c>true</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.CookieCollection.IsSynchronized"> + <summary> + Gets a value indicating whether the access to the collection is thread safe. + </summary> + <value> + <c>true</c> if the access to the collection is thread safe; otherwise, <c>false</c>. + The default value is <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.CookieCollection.Item(System.Int32)"> + <summary> + Gets the <see cref="T:WebSocketSharp.Net.Cookie"/> at the specified <paramref name="index"/> from + the collection. + </summary> + <value> + A <see cref="T:WebSocketSharp.Net.Cookie"/> at the specified <paramref name="index"/> in the collection. + </value> + <param name="index"> + An <see cref="T:System.Int32"/> that represents the zero-based index of the <see cref="T:WebSocketSharp.Net.Cookie"/> + to find. + </param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is out of allowable range of indexes for the collection. + </exception> + </member> + <member name="P:WebSocketSharp.Net.CookieCollection.Item(System.String)"> + <summary> + Gets the <see cref="T:WebSocketSharp.Net.Cookie"/> with the specified <paramref name="name"/> from + the collection. + </summary> + <value> + A <see cref="T:WebSocketSharp.Net.Cookie"/> with the specified <paramref name="name"/> in the collection. + </value> + <param name="name"> + A <see cref="T:System.String"/> that represents the name of the <see cref="T:WebSocketSharp.Net.Cookie"/> to find. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="name"/> is <see langword="null"/>. + </exception> + </member> + <member name="P:WebSocketSharp.Net.CookieCollection.SyncRoot"> + <summary> + Gets an object used to synchronize access to the collection. + </summary> + <value> + An <see cref="T:System.Object"/> used to synchronize access to the collection. + </value> + </member> + <member name="M:WebSocketSharp.Net.CookieCollection.Add(WebSocketSharp.Net.Cookie)"> + <summary> + Adds the specified <paramref name="cookie"/> to the collection. + </summary> + <param name="cookie"> + A <see cref="T:WebSocketSharp.Net.Cookie"/> to add. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="cookie"/> is <see langword="null"/>. + </exception> + </member> + <member name="M:WebSocketSharp.Net.CookieCollection.Add(WebSocketSharp.Net.CookieCollection)"> + <summary> + Adds the specified <paramref name="cookies"/> to the collection. + </summary> + <param name="cookies"> + A <see cref="T:WebSocketSharp.Net.CookieCollection"/> that contains the cookies to add. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="cookies"/> is <see langword="null"/>. + </exception> + </member> + <member name="M:WebSocketSharp.Net.CookieCollection.CopyTo(System.Array,System.Int32)"> + <summary> + Copies the elements of the collection to the specified <see cref="T:System.Array"/>, starting at + the specified <paramref name="index"/> in the <paramref name="array"/>. + </summary> + <param name="array"> + An <see cref="T:System.Array"/> that represents the destination of the elements copied from + the collection. + </param> + <param name="index"> + An <see cref="T:System.Int32"/> that represents the zero-based index in <paramref name="array"/> + at which copying begins. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="array"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is less than zero. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="array"/> is multidimensional. + </para> + <para> + -or- + </para> + <para> + The number of elements in the collection is greater than the available space from + <paramref name="index"/> to the end of the destination <paramref name="array"/>. + </para> + </exception> + <exception cref="T:System.InvalidCastException"> + The elements in the collection cannot be cast automatically to the type of the destination + <paramref name="array"/>. + </exception> + </member> + <member name="M:WebSocketSharp.Net.CookieCollection.CopyTo(WebSocketSharp.Net.Cookie[],System.Int32)"> + <summary> + Copies the elements of the collection to the specified array of <see cref="T:WebSocketSharp.Net.Cookie"/>, + starting at the specified <paramref name="index"/> in the <paramref name="array"/>. + </summary> + <param name="array"> + An array of <see cref="T:WebSocketSharp.Net.Cookie"/> that represents the destination of the elements + copied from the collection. + </param> + <param name="index"> + An <see cref="T:System.Int32"/> that represents the zero-based index in <paramref name="array"/> + at which copying begins. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="array"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is less than zero. + </exception> + <exception cref="T:System.ArgumentException"> + The number of elements in the collection is greater than the available space from + <paramref name="index"/> to the end of the destination <paramref name="array"/>. + </exception> + </member> + <member name="M:WebSocketSharp.Net.CookieCollection.GetEnumerator"> + <summary> + Gets the enumerator used to iterate through the collection. + </summary> + <returns> + An <see cref="T:System.Collections.IEnumerator"/> instance used to iterate through the collection. + </returns> + </member> + <member name="T:WebSocketSharp.Net.CookieException"> + <summary> + The exception that is thrown when a <see cref="T:WebSocketSharp.Net.Cookie"/> gets an error. + </summary> + </member> + <member name="M:WebSocketSharp.Net.CookieException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Net.CookieException"/> class from + the specified <see cref="T:System.Runtime.Serialization.SerializationInfo"/> and <see cref="T:System.Runtime.Serialization.StreamingContext"/>. + </summary> + <param name="serializationInfo"> + A <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that contains the serialized object data. + </param> + <param name="streamingContext"> + A <see cref="T:System.Runtime.Serialization.StreamingContext"/> that specifies the source for the deserialization. + </param> + </member> + <member name="M:WebSocketSharp.Net.CookieException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Net.CookieException"/> class. + </summary> + </member> + <member name="M:WebSocketSharp.Net.CookieException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Populates the specified <see cref="T:System.Runtime.Serialization.SerializationInfo"/> with the data needed to serialize + the current <see cref="T:WebSocketSharp.Net.CookieException"/>. + </summary> + <param name="serializationInfo"> + A <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data. + </param> + <param name="streamingContext"> + A <see cref="T:System.Runtime.Serialization.StreamingContext"/> that specifies the destination for the serialization. + </param> + </member> + <member name="M:WebSocketSharp.Net.CookieException.System#Runtime#Serialization#ISerializable#GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Populates the specified <see cref="T:System.Runtime.Serialization.SerializationInfo"/> with the data needed to serialize + the current <see cref="T:WebSocketSharp.Net.CookieException"/>. + </summary> + <param name="serializationInfo"> + A <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data. + </param> + <param name="streamingContext"> + A <see cref="T:System.Runtime.Serialization.StreamingContext"/> that specifies the destination for the serialization. + </param> + </member> + <member name="T:WebSocketSharp.Net.HttpBasicIdentity"> + <summary> + Holds the username and password from an HTTP Basic authentication attempt. + </summary> + </member> + <member name="P:WebSocketSharp.Net.HttpBasicIdentity.Password"> + <summary> + Gets the password from a basic authentication attempt. + </summary> + <value> + A <see cref="T:System.String"/> that represents the password. + </value> + </member> + <member name="T:WebSocketSharp.Net.HttpDigestIdentity"> + <summary> + Holds the username and other parameters from + an HTTP Digest authentication attempt. + </summary> + </member> + <member name="P:WebSocketSharp.Net.HttpDigestIdentity.Algorithm"> + <summary> + Gets the algorithm parameter from a digest authentication attempt. + </summary> + <value> + A <see cref="T:System.String"/> that represents the algorithm parameter. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpDigestIdentity.Cnonce"> + <summary> + Gets the cnonce parameter from a digest authentication attempt. + </summary> + <value> + A <see cref="T:System.String"/> that represents the cnonce parameter. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpDigestIdentity.Nc"> + <summary> + Gets the nc parameter from a digest authentication attempt. + </summary> + <value> + A <see cref="T:System.String"/> that represents the nc parameter. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpDigestIdentity.Nonce"> + <summary> + Gets the nonce parameter from a digest authentication attempt. + </summary> + <value> + A <see cref="T:System.String"/> that represents the nonce parameter. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpDigestIdentity.Opaque"> + <summary> + Gets the opaque parameter from a digest authentication attempt. + </summary> + <value> + A <see cref="T:System.String"/> that represents the opaque parameter. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpDigestIdentity.Qop"> + <summary> + Gets the qop parameter from a digest authentication attempt. + </summary> + <value> + A <see cref="T:System.String"/> that represents the qop parameter. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpDigestIdentity.Realm"> + <summary> + Gets the realm parameter from a digest authentication attempt. + </summary> + <value> + A <see cref="T:System.String"/> that represents the realm parameter. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpDigestIdentity.Response"> + <summary> + Gets the response parameter from a digest authentication attempt. + </summary> + <value> + A <see cref="T:System.String"/> that represents the response parameter. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpDigestIdentity.Uri"> + <summary> + Gets the uri parameter from a digest authentication attempt. + </summary> + <value> + A <see cref="T:System.String"/> that represents the uri parameter. + </value> + </member> + <member name="T:WebSocketSharp.Net.HttpListener"> + <summary> + Provides a simple, programmatically controlled HTTP listener. + </summary> + </member> + <member name="M:WebSocketSharp.Net.HttpListener.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Net.HttpListener"/> class. + </summary> + </member> + <member name="P:WebSocketSharp.Net.HttpListener.AuthenticationSchemes"> + <summary> + Gets or sets the scheme used to authenticate the clients. + </summary> + <value> + One of the <see cref="T:WebSocketSharp.Net.AuthenticationSchemes"/> enum values, + represents the scheme used to authenticate the clients. The default value is + <see cref="F:WebSocketSharp.Net.AuthenticationSchemes.Anonymous"/>. + </value> + <exception cref="T:System.ObjectDisposedException"> + This listener has been closed. + </exception> + </member> + <member name="P:WebSocketSharp.Net.HttpListener.AuthenticationSchemeSelector"> + <summary> + Gets or sets the delegate called to select the scheme used to authenticate the clients. + </summary> + <remarks> + If you set this property, the listener uses the authentication scheme selected by + the delegate for each request. Or if you don't set, the listener uses the value of + the <see cref="P:WebSocketSharp.Net.HttpListener.AuthenticationSchemes"/> property as the authentication + scheme for all requests. + </remarks> + <value> + A <c>Func<<see cref="T:WebSocketSharp.Net.HttpListenerRequest"/>, <see cref="P:WebSocketSharp.Net.HttpListener.AuthenticationSchemes"/>></c> + delegate that references the method used to select an authentication scheme. The default + value is <see langword="null"/>. + </value> + <exception cref="T:System.ObjectDisposedException"> + This listener has been closed. + </exception> + </member> + <member name="P:WebSocketSharp.Net.HttpListener.CertificateFolderPath"> + <summary> + Gets or sets the path to the folder in which stores the certificate files used to + authenticate the server on the secure connection. + </summary> + <remarks> + <para> + This property represents the path to the folder in which stores the certificate files + associated with each port number of added URI prefixes. A set of the certificate files + is a pair of the <c>'port number'.cer</c> (DER) and <c>'port number'.key</c> + (DER, RSA Private Key). + </para> + <para> + If this property is <see langword="null"/> or empty, the result of + <c>System.Environment.GetFolderPath + (<see cref="F:System.Environment.SpecialFolder.ApplicationData"/>)</c> is used as the default path. + </para> + </remarks> + <value> + A <see cref="T:System.String"/> that represents the path to the folder in which stores + the certificate files. The default value is <see langword="null"/>. + </value> + <exception cref="T:System.ObjectDisposedException"> + This listener has been closed. + </exception> + </member> + <member name="P:WebSocketSharp.Net.HttpListener.IgnoreWriteExceptions"> + <summary> + Gets or sets a value indicating whether the listener returns exceptions that occur when + sending the response to the client. + </summary> + <value> + <c>true</c> if the listener shouldn't return those exceptions; otherwise, <c>false</c>. + The default value is <c>false</c>. + </value> + <exception cref="T:System.ObjectDisposedException"> + This listener has been closed. + </exception> + </member> + <member name="P:WebSocketSharp.Net.HttpListener.IsListening"> + <summary> + Gets a value indicating whether the listener has been started. + </summary> + <value> + <c>true</c> if the listener has been started; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListener.IsSupported"> + <summary> + Gets a value indicating whether the listener can be used with the current operating system. + </summary> + <value> + <c>true</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListener.Log"> + <summary> + Gets the logging functions. + </summary> + <remarks> + The default logging level is <see cref="F:WebSocketSharp.LogLevel.Error"/>. If you would like to change it, + you should set the <c>Log.Level</c> property to any of the <see cref="T:WebSocketSharp.LogLevel"/> enum + values. + </remarks> + <value> + A <see cref="T:WebSocketSharp.Logger"/> that provides the logging functions. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListener.Prefixes"> + <summary> + Gets the URI prefixes handled by the listener. + </summary> + <value> + A <see cref="T:WebSocketSharp.Net.HttpListenerPrefixCollection"/> that contains the URI prefixes. + </value> + <exception cref="T:System.ObjectDisposedException"> + This listener has been closed. + </exception> + </member> + <member name="P:WebSocketSharp.Net.HttpListener.Realm"> + <summary> + Gets or sets the name of the realm associated with the listener. + </summary> + <remarks> + If this property is <see langword="null"/> or empty, <c>"SECRET AREA"</c> will be used as + the name of the realm. + </remarks> + <value> + A <see cref="T:System.String"/> that represents the name of the realm. The default value is + <see langword="null"/>. + </value> + <exception cref="T:System.ObjectDisposedException"> + This listener has been closed. + </exception> + </member> + <member name="P:WebSocketSharp.Net.HttpListener.SslConfiguration"> + <summary> + Gets or sets the SSL configuration used to authenticate the server and + optionally the client for secure connection. + </summary> + <value> + A <see cref="T:WebSocketSharp.Net.ServerSslConfiguration"/> that represents the configuration used to + authenticate the server and optionally the client for secure connection. + </value> + <exception cref="T:System.ObjectDisposedException"> + This listener has been closed. + </exception> + </member> + <member name="P:WebSocketSharp.Net.HttpListener.UnsafeConnectionNtlmAuthentication"> + <summary> + Gets or sets a value indicating whether, when NTLM authentication is used, + the authentication information of first request is used to authenticate + additional requests on the same connection. + </summary> + <remarks> + This property isn't currently supported and always throws + a <see cref="T:System.NotSupportedException"/>. + </remarks> + <value> + <c>true</c> if the authentication information of first request is used; + otherwise, <c>false</c>. + </value> + <exception cref="T:System.NotSupportedException"> + Any use of this property. + </exception> + </member> + <member name="P:WebSocketSharp.Net.HttpListener.UserCredentialsFinder"> + <summary> + Gets or sets the delegate called to find the credentials for an identity used to + authenticate a client. + </summary> + <value> + A <c>Func<<see cref="T:System.Security.Principal.IIdentity"/>, <see cref="T:WebSocketSharp.Net.NetworkCredential"/>></c> delegate + that references the method used to find the credentials. The default value is + <see langword="null"/>. + </value> + <exception cref="T:System.ObjectDisposedException"> + This listener has been closed. + </exception> + </member> + <member name="M:WebSocketSharp.Net.HttpListener.Abort"> + <summary> + Shuts down the listener immediately. + </summary> + </member> + <member name="M:WebSocketSharp.Net.HttpListener.BeginGetContext(System.AsyncCallback,System.Object)"> + <summary> + Begins getting an incoming request asynchronously. + </summary> + <remarks> + This asynchronous operation must be completed by calling the <c>EndGetContext</c> method. + Typically, the method is invoked by the <paramref name="callback"/> delegate. + </remarks> + <returns> + An <see cref="T:System.IAsyncResult"/> that represents the status of the asynchronous operation. + </returns> + <param name="callback"> + An <see cref="T:System.AsyncCallback"/> delegate that references the method to invoke when + the asynchronous operation completes. + </param> + <param name="state"> + An <see cref="T:System.Object"/> that represents a user defined object to pass to + the <paramref name="callback"/> delegate. + </param> + <exception cref="T:System.InvalidOperationException"> + <para> + This listener has no URI prefix on which listens. + </para> + <para> + -or- + </para> + <para> + This listener hasn't been started, or is currently stopped. + </para> + </exception> + <exception cref="T:System.ObjectDisposedException"> + This listener has been closed. + </exception> + </member> + <member name="M:WebSocketSharp.Net.HttpListener.Close"> + <summary> + Shuts down the listener. + </summary> + </member> + <member name="M:WebSocketSharp.Net.HttpListener.EndGetContext(System.IAsyncResult)"> + <summary> + Ends an asynchronous operation to get an incoming request. + </summary> + <remarks> + This method completes an asynchronous operation started by calling + the <c>BeginGetContext</c> method. + </remarks> + <returns> + A <see cref="T:WebSocketSharp.Net.HttpListenerContext"/> that represents a request. + </returns> + <param name="asyncResult"> + An <see cref="T:System.IAsyncResult"/> obtained by calling the <c>BeginGetContext</c> method. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="asyncResult"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="asyncResult"/> wasn't obtained by calling the <c>BeginGetContext</c> method. + </exception> + <exception cref="T:System.InvalidOperationException"> + This method was already called for the specified <paramref name="asyncResult"/>. + </exception> + <exception cref="T:System.ObjectDisposedException"> + This listener has been closed. + </exception> + </member> + <member name="M:WebSocketSharp.Net.HttpListener.GetContext"> + <summary> + Gets an incoming request. + </summary> + <remarks> + This method waits for an incoming request, and returns when a request is received. + </remarks> + <returns> + A <see cref="T:WebSocketSharp.Net.HttpListenerContext"/> that represents a request. + </returns> + <exception cref="T:System.InvalidOperationException"> + <para> + This listener has no URI prefix on which listens. + </para> + <para> + -or- + </para> + <para> + This listener hasn't been started, or is currently stopped. + </para> + </exception> + <exception cref="T:System.ObjectDisposedException"> + This listener has been closed. + </exception> + </member> + <member name="M:WebSocketSharp.Net.HttpListener.Start"> + <summary> + Starts receiving incoming requests. + </summary> + <exception cref="T:System.ObjectDisposedException"> + This listener has been closed. + </exception> + </member> + <member name="M:WebSocketSharp.Net.HttpListener.Stop"> + <summary> + Stops receiving incoming requests. + </summary> + <exception cref="T:System.ObjectDisposedException"> + This listener has been closed. + </exception> + </member> + <member name="M:WebSocketSharp.Net.HttpListener.System#IDisposable#Dispose"> + <summary> + Releases all resources used by the listener. + </summary> + </member> + <member name="T:WebSocketSharp.Net.HttpListenerContext"> + <summary> + Provides the access to the HTTP request and response objects used by + the <see cref="T:WebSocketSharp.Net.HttpListener"/>. + </summary> + <remarks> + This class cannot be inherited. + </remarks> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerContext.Request"> + <summary> + Gets the HTTP request object that represents a client request. + </summary> + <value> + A <see cref="T:WebSocketSharp.Net.HttpListenerRequest"/> that represents the client request. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerContext.Response"> + <summary> + Gets the HTTP response object used to send a response to the client. + </summary> + <value> + A <see cref="T:WebSocketSharp.Net.HttpListenerResponse"/> that represents a response to the client request. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerContext.User"> + <summary> + Gets the client information (identity, authentication, and security roles). + </summary> + <value> + A <see cref="T:System.Security.Principal.IPrincipal"/> instance that represents the client information. + </value> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerContext.AcceptWebSocket(System.String)"> + <summary> + Accepts a WebSocket handshake request. + </summary> + <returns> + A <see cref="T:WebSocketSharp.Net.WebSockets.HttpListenerWebSocketContext"/> that represents + the WebSocket handshake request. + </returns> + <param name="protocol"> + A <see cref="T:System.String"/> that represents the subprotocol supported on + this WebSocket connection. + </param> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="protocol"/> is empty. + </para> + <para> + -or- + </para> + <para> + <paramref name="protocol"/> contains an invalid character. + </para> + </exception> + <exception cref="T:System.InvalidOperationException"> + This method has already been called. + </exception> + </member> + <member name="T:WebSocketSharp.Net.HttpListenerException"> + <summary> + The exception that is thrown when a <see cref="T:WebSocketSharp.Net.HttpListener"/> gets an error + processing an HTTP request. + </summary> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Net.HttpListenerException"/> class from + the specified <see cref="T:System.Runtime.Serialization.SerializationInfo"/> and <see cref="T:System.Runtime.Serialization.StreamingContext"/>. + </summary> + <param name="serializationInfo"> + A <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that contains the serialized object data. + </param> + <param name="streamingContext"> + A <see cref="T:System.Runtime.Serialization.StreamingContext"/> that specifies the source for the deserialization. + </param> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Net.HttpListenerException"/> class. + </summary> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerException.#ctor(System.Int32)"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Net.HttpListenerException"/> class + with the specified <paramref name="errorCode"/>. + </summary> + <param name="errorCode"> + An <see cref="T:System.Int32"/> that identifies the error. + </param> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerException.#ctor(System.Int32,System.String)"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Net.HttpListenerException"/> class + with the specified <paramref name="errorCode"/> and <paramref name="message"/>. + </summary> + <param name="errorCode"> + An <see cref="T:System.Int32"/> that identifies the error. + </param> + <param name="message"> + A <see cref="T:System.String"/> that describes the error. + </param> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerException.ErrorCode"> + <summary> + Gets the error code that identifies the error that occurred. + </summary> + <value> + An <see cref="T:System.Int32"/> that identifies the error. + </value> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerPrefix.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Net.HttpListenerPrefix"/> class with + the specified <paramref name="uriPrefix"/>. + </summary> + <remarks> + This constructor must be called after calling the CheckPrefix method. + </remarks> + <param name="uriPrefix"> + A <see cref="T:System.String"/> that represents the URI prefix. + </param> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerPrefix.Equals(System.Object)"> + <summary> + Determines whether this instance and the specified <see cref="T:System.Object"/> have the same value. + </summary> + <remarks> + This method will be required to detect duplicates in any collection. + </remarks> + <param name="obj"> + An <see cref="T:System.Object"/> to compare to this instance. + </param> + <returns> + <c>true</c> if <paramref name="obj"/> is a <see cref="T:WebSocketSharp.Net.HttpListenerPrefix"/> and + its value is the same as this instance; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerPrefix.GetHashCode"> + <summary> + Gets the hash code for this instance. + </summary> + <remarks> + This method will be required to detect duplicates in any collection. + </remarks> + <returns> + An <see cref="T:System.Int32"/> that represents the hash code. + </returns> + </member> + <member name="T:WebSocketSharp.Net.HttpListenerPrefixCollection"> + <summary> + Provides the collection used to store the URI prefixes for the <see cref="T:WebSocketSharp.Net.HttpListener"/>. + </summary> + <remarks> + The <see cref="T:WebSocketSharp.Net.HttpListener"/> responds to the request which has a requested URI that + the prefixes most closely match. + </remarks> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerPrefixCollection.Count"> + <summary> + Gets the number of prefixes in the collection. + </summary> + <value> + An <see cref="T:System.Int32"/> that represents the number of prefixes. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerPrefixCollection.IsReadOnly"> + <summary> + Gets a value indicating whether the access to the collection is read-only. + </summary> + <value> + Always returns <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerPrefixCollection.IsSynchronized"> + <summary> + Gets a value indicating whether the access to the collection is synchronized. + </summary> + <value> + Always returns <c>false</c>. + </value> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerPrefixCollection.Add(System.String)"> + <summary> + Adds the specified <paramref name="uriPrefix"/> to the collection. + </summary> + <param name="uriPrefix"> + A <see cref="T:System.String"/> that represents the URI prefix to add. The prefix must be + a well-formed URI prefix with http or https scheme, and must end with a <c>'/'</c>. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="uriPrefix"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="uriPrefix"/> is invalid. + </exception> + <exception cref="T:System.ObjectDisposedException"> + The <see cref="T:WebSocketSharp.Net.HttpListener"/> associated with this collection is closed. + </exception> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerPrefixCollection.Clear"> + <summary> + Removes all URI prefixes from the collection. + </summary> + <exception cref="T:System.ObjectDisposedException"> + The <see cref="T:WebSocketSharp.Net.HttpListener"/> associated with this collection is closed. + </exception> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerPrefixCollection.Contains(System.String)"> + <summary> + Returns a value indicating whether the collection contains the specified + <paramref name="uriPrefix"/>. + </summary> + <returns> + <c>true</c> if the collection contains <paramref name="uriPrefix"/>; + otherwise, <c>false</c>. + </returns> + <param name="uriPrefix"> + A <see cref="T:System.String"/> that represents the URI prefix to test. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="uriPrefix"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ObjectDisposedException"> + The <see cref="T:WebSocketSharp.Net.HttpListener"/> associated with this collection is closed. + </exception> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerPrefixCollection.CopyTo(System.Array,System.Int32)"> + <summary> + Copies the contents of the collection to the specified <see cref="T:System.Array"/>. + </summary> + <param name="array"> + An <see cref="T:System.Array"/> that receives the URI prefix strings in the collection. + </param> + <param name="offset"> + An <see cref="T:System.Int32"/> that represents the zero-based index in <paramref name="array"/> + at which copying begins. + </param> + <exception cref="T:System.ObjectDisposedException"> + The <see cref="T:WebSocketSharp.Net.HttpListener"/> associated with this collection is closed. + </exception> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerPrefixCollection.CopyTo(System.String[],System.Int32)"> + <summary> + Copies the contents of the collection to the specified array of <see cref="T:System.String"/>. + </summary> + <param name="array"> + An array of <see cref="T:System.String"/> that receives the URI prefix strings in the collection. + </param> + <param name="offset"> + An <see cref="T:System.Int32"/> that represents the zero-based index in <paramref name="array"/> + at which copying begins. + </param> + <exception cref="T:System.ObjectDisposedException"> + The <see cref="T:WebSocketSharp.Net.HttpListener"/> associated with this collection is closed. + </exception> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerPrefixCollection.GetEnumerator"> + <summary> + Gets the enumerator used to iterate through the <see cref="T:WebSocketSharp.Net.HttpListenerPrefixCollection"/>. + </summary> + <returns> + An <see cref="T:System.Collections.Generic.IEnumerator{string}"/> instance used to iterate + through the collection. + </returns> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerPrefixCollection.Remove(System.String)"> + <summary> + Removes the specified <paramref name="uriPrefix"/> from the collection. + </summary> + <returns> + <c>true</c> if <paramref name="uriPrefix"/> is successfully found and removed; + otherwise, <c>false</c>. + </returns> + <param name="uriPrefix"> + A <see cref="T:System.String"/> that represents the URI prefix to remove. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="uriPrefix"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ObjectDisposedException"> + The <see cref="T:WebSocketSharp.Net.HttpListener"/> associated with this collection is closed. + </exception> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerPrefixCollection.System#Collections#IEnumerable#GetEnumerator"> + <summary> + Gets the enumerator used to iterate through the <see cref="T:WebSocketSharp.Net.HttpListenerPrefixCollection"/>. + </summary> + <returns> + An <see cref="T:System.Collections.IEnumerator"/> instance used to iterate through the collection. + </returns> + </member> + <member name="T:WebSocketSharp.Net.HttpListenerRequest"> + <summary> + Provides the access to a request to the <see cref="T:WebSocketSharp.Net.HttpListener"/>. + </summary> + <remarks> + The HttpListenerRequest class cannot be inherited. + </remarks> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.AcceptTypes"> + <summary> + Gets the media types which are acceptable for the response. + </summary> + <value> + An array of <see cref="T:System.String"/> that contains the media type names in + the Accept request-header, or <see langword="null"/> if the request didn't include + the Accept header. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.ClientCertificateError"> + <summary> + Gets an error code that identifies a problem with the client's certificate. + </summary> + <value> + Always returns <c>0</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.ContentEncoding"> + <summary> + Gets the encoding for the entity body data included in the request. + </summary> + <value> + A <see cref="T:System.Text.Encoding"/> that represents the encoding for the entity body data, + or <see cref="P:System.Text.Encoding.Default"/> if the request didn't include the information about + the encoding. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.ContentLength64"> + <summary> + Gets the number of bytes in the entity body data included in the request. + </summary> + <value> + A <see cref="T:System.Int64"/> that represents the value of the Content-Length entity-header, + or <c>-1</c> if the value isn't known. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.ContentType"> + <summary> + Gets the media type of the entity body included in the request. + </summary> + <value> + A <see cref="T:System.String"/> that represents the value of the Content-Type entity-header. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.Cookies"> + <summary> + Gets the cookies included in the request. + </summary> + <value> + A <see cref="T:WebSocketSharp.Net.CookieCollection"/> that contains the cookies included in the request. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.HasEntityBody"> + <summary> + Gets a value indicating whether the request has the entity body. + </summary> + <value> + <c>true</c> if the request has the entity body; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.Headers"> + <summary> + Gets the HTTP headers used in the request. + </summary> + <value> + A <see cref="T:System.Collections.Specialized.NameValueCollection"/> that contains the HTTP headers used in the request. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.HttpMethod"> + <summary> + Gets the HTTP method used in the request. + </summary> + <value> + A <see cref="T:System.String"/> that represents the HTTP method used in the request. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.InputStream"> + <summary> + Gets a <see cref="T:System.IO.Stream"/> that contains the entity body data included in the request. + </summary> + <value> + A <see cref="T:System.IO.Stream"/> that contains the entity body data included in the request. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.IsAuthenticated"> + <summary> + Gets a value indicating whether the client that sent the request is authenticated. + </summary> + <value> + <c>true</c> if the client is authenticated; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.IsLocal"> + <summary> + Gets a value indicating whether the request is sent from the local computer. + </summary> + <value> + <c>true</c> if the request is sent from the local computer; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.IsSecureConnection"> + <summary> + Gets a value indicating whether the HTTP connection is secured using the SSL protocol. + </summary> + <value> + <c>true</c> if the HTTP connection is secured; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.IsWebSocketRequest"> + <summary> + Gets a value indicating whether the request is a WebSocket connection request. + </summary> + <value> + <c>true</c> if the request is a WebSocket connection request; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.KeepAlive"> + <summary> + Gets a value indicating whether the client requests a persistent connection. + </summary> + <value> + <c>true</c> if the client requests a persistent connection; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.LocalEndPoint"> + <summary> + Gets the server endpoint as an IP address and a port number. + </summary> + <value> + A <see cref="T:System.Net.IPEndPoint"/> that represents the server endpoint. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.ProtocolVersion"> + <summary> + Gets the HTTP version used in the request. + </summary> + <value> + A <see cref="T:System.Version"/> that represents the HTTP version used in the request. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.QueryString"> + <summary> + Gets the query string included in the request. + </summary> + <value> + A <see cref="T:System.Collections.Specialized.NameValueCollection"/> that contains the query string parameters. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.RawUrl"> + <summary> + Gets the raw URL (without the scheme, host, and port) requested by the client. + </summary> + <value> + A <see cref="T:System.String"/> that represents the raw URL requested by the client. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.RemoteEndPoint"> + <summary> + Gets the client endpoint as an IP address and a port number. + </summary> + <value> + A <see cref="T:System.Net.IPEndPoint"/> that represents the client endpoint. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.RequestTraceIdentifier"> + <summary> + Gets the request identifier of a incoming HTTP request. + </summary> + <value> + A <see cref="T:System.Guid"/> that represents the identifier of a request. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.Url"> + <summary> + Gets the URL requested by the client. + </summary> + <value> + A <see cref="T:System.Uri"/> that represents the URL requested by the client. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.UrlReferrer"> + <summary> + Gets the URL of the resource from which the requested URL was obtained. + </summary> + <value> + A <see cref="T:System.Uri"/> that represents the value of the Referer request-header, + or <see langword="null"/> if the request didn't include an Referer header. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.UserAgent"> + <summary> + Gets the information about the user agent originating the request. + </summary> + <value> + A <see cref="T:System.String"/> that represents the value of the User-Agent request-header. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.UserHostAddress"> + <summary> + Gets the server endpoint as an IP address and a port number. + </summary> + <value> + A <see cref="T:System.String"/> that represents the server endpoint. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.UserHostName"> + <summary> + Gets the internet host name and port number (if present) specified by the client. + </summary> + <value> + A <see cref="T:System.String"/> that represents the value of the Host request-header. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerRequest.UserLanguages"> + <summary> + Gets the natural languages which are preferred for the response. + </summary> + <value> + An array of <see cref="T:System.String"/> that contains the natural language names in + the Accept-Language request-header, or <see langword="null"/> if the request + didn't include an Accept-Language header. + </value> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerRequest.BeginGetClientCertificate(System.AsyncCallback,System.Object)"> + <summary> + Begins getting the client's X.509 v.3 certificate asynchronously. + </summary> + <remarks> + This asynchronous operation must be completed by calling + the <see cref="M:WebSocketSharp.Net.HttpListenerRequest.EndGetClientCertificate(System.IAsyncResult)"/> method. Typically, + that method is invoked by the <paramref name="requestCallback"/> delegate. + </remarks> + <returns> + An <see cref="T:System.IAsyncResult"/> that contains the status of the asynchronous operation. + </returns> + <param name="requestCallback"> + An <see cref="T:System.AsyncCallback"/> delegate that references the method(s) called when + the asynchronous operation completes. + </param> + <param name="state"> + An <see cref="T:System.Object"/> that contains a user defined object to pass to + the <paramref name="requestCallback"/> delegate. + </param> + <exception cref="T:System.NotImplementedException"> + This method isn't implemented. + </exception> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerRequest.EndGetClientCertificate(System.IAsyncResult)"> + <summary> + Ends an asynchronous operation to get the client's X.509 v.3 certificate. + </summary> + <remarks> + This method completes an asynchronous operation started by calling + the <see cref="M:WebSocketSharp.Net.HttpListenerRequest.BeginGetClientCertificate(System.AsyncCallback,System.Object)"/> method. + </remarks> + <returns> + A <see cref="T:System.Security.Cryptography.X509Certificates.X509Certificate2"/> that contains the client's X.509 v.3 certificate. + </returns> + <param name="asyncResult"> + An <see cref="T:System.IAsyncResult"/> obtained by calling + the <see cref="M:WebSocketSharp.Net.HttpListenerRequest.BeginGetClientCertificate(System.AsyncCallback,System.Object)"/> method. + </param> + <exception cref="T:System.NotImplementedException"> + This method isn't implemented. + </exception> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerRequest.GetClientCertificate"> + <summary> + Gets the client's X.509 v.3 certificate. + </summary> + <returns> + A <see cref="T:System.Security.Cryptography.X509Certificates.X509Certificate2"/> that contains the client's X.509 v.3 certificate. + </returns> + <exception cref="T:System.NotImplementedException"> + This method isn't implemented. + </exception> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerRequest.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents + the current <see cref="T:WebSocketSharp.Net.HttpListenerRequest"/>. + </summary> + <returns> + A <see cref="T:System.String"/> that represents the current <see cref="T:WebSocketSharp.Net.HttpListenerRequest"/>. + </returns> + </member> + <member name="T:WebSocketSharp.Net.HttpListenerResponse"> + <summary> + Provides the access to a response to a request received by the <see cref="T:WebSocketSharp.Net.HttpListener"/>. + </summary> + <remarks> + The HttpListenerResponse class cannot be inherited. + </remarks> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerResponse.ContentEncoding"> + <summary> + Gets or sets the encoding for the entity body data included in the response. + </summary> + <value> + A <see cref="T:System.Text.Encoding"/> that represents the encoding for the entity body data, + or <see langword="null"/> if no encoding is specified. + </value> + <exception cref="T:System.ObjectDisposedException"> + This object is closed. + </exception> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerResponse.ContentLength64"> + <summary> + Gets or sets the number of bytes in the entity body data included in the response. + </summary> + <value> + A <see cref="T:System.Int64"/> that represents the value of the Content-Length entity-header. + </value> + <exception cref="T:System.ArgumentOutOfRangeException"> + The value specified for a set operation is less than zero. + </exception> + <exception cref="T:System.InvalidOperationException"> + The response has already been sent. + </exception> + <exception cref="T:System.ObjectDisposedException"> + This object is closed. + </exception> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerResponse.ContentType"> + <summary> + Gets or sets the media type of the entity body included in the response. + </summary> + <value> + A <see cref="T:System.String"/> that represents the media type of the entity body, + or <see langword="null"/> if no media type is specified. This value is + used for the value of the Content-Type entity-header. + </value> + <exception cref="T:System.ArgumentException"> + The value specified for a set operation is empty. + </exception> + <exception cref="T:System.ObjectDisposedException"> + This object is closed. + </exception> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerResponse.Cookies"> + <summary> + Gets or sets the cookies sent with the response. + </summary> + <value> + A <see cref="T:WebSocketSharp.Net.CookieCollection"/> that contains the cookies sent with the response. + </value> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerResponse.Headers"> + <summary> + Gets or sets the HTTP headers sent to the client. + </summary> + <value> + A <see cref="T:WebSocketSharp.Net.WebHeaderCollection"/> that contains the headers sent to the client. + </value> + <exception cref="T:System.InvalidOperationException"> + The value specified for a set operation isn't valid for a response. + </exception> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerResponse.KeepAlive"> + <summary> + Gets or sets a value indicating whether the server requests a persistent connection. + </summary> + <value> + <c>true</c> if the server requests a persistent connection; otherwise, <c>false</c>. + The default value is <c>true</c>. + </value> + <exception cref="T:System.InvalidOperationException"> + The response has already been sent. + </exception> + <exception cref="T:System.ObjectDisposedException"> + This object is closed. + </exception> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerResponse.OutputStream"> + <summary> + Gets a <see cref="T:System.IO.Stream"/> to use to write the entity body data. + </summary> + <value> + A <see cref="T:System.IO.Stream"/> to use to write the entity body data. + </value> + <exception cref="T:System.ObjectDisposedException"> + This object is closed. + </exception> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerResponse.ProtocolVersion"> + <summary> + Gets or sets the HTTP version used in the response. + </summary> + <value> + A <see cref="T:System.Version"/> that represents the version used in the response. + </value> + <exception cref="T:System.ArgumentNullException"> + The value specified for a set operation is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + The value specified for a set operation doesn't have its <c>Major</c> property set to 1 or + doesn't have its <c>Minor</c> property set to either 0 or 1. + </exception> + <exception cref="T:System.InvalidOperationException"> + The response has already been sent. + </exception> + <exception cref="T:System.ObjectDisposedException"> + This object is closed. + </exception> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerResponse.RedirectLocation"> + <summary> + Gets or sets the URL to which the client is redirected to locate a requested resource. + </summary> + <value> + A <see cref="T:System.String"/> that represents the value of the Location response-header, + or <see langword="null"/> if no redirect location is specified. + </value> + <exception cref="T:System.ArgumentException"> + The value specified for a set operation isn't an absolute URL. + </exception> + <exception cref="T:System.ObjectDisposedException"> + This object is closed. + </exception> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerResponse.SendChunked"> + <summary> + Gets or sets a value indicating whether the response uses the chunked transfer encoding. + </summary> + <value> + <c>true</c> if the response uses the chunked transfer encoding; + otherwise, <c>false</c>. The default value is <c>false</c>. + </value> + <exception cref="T:System.InvalidOperationException"> + The response has already been sent. + </exception> + <exception cref="T:System.ObjectDisposedException"> + This object is closed. + </exception> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerResponse.StatusCode"> + <summary> + Gets or sets the HTTP status code returned to the client. + </summary> + <value> + An <see cref="T:System.Int32"/> that represents the status code for the response to + the request. The default value is same as <see cref="F:WebSocketSharp.Net.HttpStatusCode.OK"/>. + </value> + <exception cref="T:System.InvalidOperationException"> + The response has already been sent. + </exception> + <exception cref="T:System.ObjectDisposedException"> + This object is closed. + </exception> + <exception cref="T:System.Net.ProtocolViolationException"> + The value specified for a set operation is invalid. Valid values are + between 100 and 999 inclusive. + </exception> + </member> + <member name="P:WebSocketSharp.Net.HttpListenerResponse.StatusDescription"> + <summary> + Gets or sets the description of the HTTP status code returned to the client. + </summary> + <value> + A <see cref="T:System.String"/> that represents the description of the status code. The default + value is the <see href="http://tools.ietf.org/html/rfc2616#section-10">RFC 2616</see> + description for the <see cref="P:WebSocketSharp.Net.HttpListenerResponse.StatusCode"/> property value, + or <see cref="F:System.String.Empty"/> if an RFC 2616 description doesn't exist. + </value> + <exception cref="T:System.ArgumentException"> + The value specified for a set operation contains invalid characters. + </exception> + <exception cref="T:System.InvalidOperationException"> + The response has already been sent. + </exception> + <exception cref="T:System.ObjectDisposedException"> + This object is closed. + </exception> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerResponse.Abort"> + <summary> + Closes the connection to the client without returning a response. + </summary> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerResponse.AddHeader(System.String,System.String)"> + <summary> + Adds an HTTP header with the specified <paramref name="name"/> and + <paramref name="value"/> to the headers for the response. + </summary> + <param name="name"> + A <see cref="T:System.String"/> that represents the name of the header to add. + </param> + <param name="value"> + A <see cref="T:System.String"/> that represents the value of the header to add. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="name"/> is <see langword="null"/> or empty. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="name"/> or <paramref name="value"/> contains invalid characters. + </para> + <para> + -or- + </para> + <para> + <paramref name="name"/> is a restricted header name. + </para> + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + The length of <paramref name="value"/> is greater than 65,535 characters. + </exception> + <exception cref="T:System.InvalidOperationException"> + The header cannot be allowed to add to the current headers. + </exception> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerResponse.AppendCookie(WebSocketSharp.Net.Cookie)"> + <summary> + Appends the specified <paramref name="cookie"/> to the cookies sent with the response. + </summary> + <param name="cookie"> + A <see cref="T:WebSocketSharp.Net.Cookie"/> to append. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="cookie"/> is <see langword="null"/>. + </exception> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerResponse.AppendHeader(System.String,System.String)"> + <summary> + Appends a <paramref name="value"/> to the specified HTTP header sent with the response. + </summary> + <param name="name"> + A <see cref="T:System.String"/> that represents the name of the header to append + <paramref name="value"/> to. + </param> + <param name="value"> + A <see cref="T:System.String"/> that represents the value to append to the header. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="name"/> is <see langword="null"/> or empty. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="name"/> or <paramref name="value"/> contains invalid characters. + </para> + <para> + -or- + </para> + <para> + <paramref name="name"/> is a restricted header name. + </para> + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + The length of <paramref name="value"/> is greater than 65,535 characters. + </exception> + <exception cref="T:System.InvalidOperationException"> + The current headers cannot allow the header to append a value. + </exception> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerResponse.Close"> + <summary> + Returns the response to the client and releases the resources used by + this <see cref="T:WebSocketSharp.Net.HttpListenerResponse"/> instance. + </summary> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerResponse.Close(System.Byte[],System.Boolean)"> + <summary> + Returns the response with the specified array of <see cref="T:System.Byte"/> to the client and + releases the resources used by this <see cref="T:WebSocketSharp.Net.HttpListenerResponse"/> instance. + </summary> + <param name="responseEntity"> + An array of <see cref="T:System.Byte"/> that contains the response entity body data. + </param> + <param name="willBlock"> + <c>true</c> if this method blocks execution while flushing the stream to the client; + otherwise, <c>false</c>. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="responseEntity"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ObjectDisposedException"> + This object is closed. + </exception> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerResponse.CopyFrom(WebSocketSharp.Net.HttpListenerResponse)"> + <summary> + Copies some properties from the specified <see cref="T:WebSocketSharp.Net.HttpListenerResponse"/> to + this response. + </summary> + <param name="templateResponse"> + A <see cref="T:WebSocketSharp.Net.HttpListenerResponse"/> to copy. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="templateResponse"/> is <see langword="null"/>. + </exception> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerResponse.Redirect(System.String)"> + <summary> + Configures the response to redirect the client's request to + the specified <paramref name="url"/>. + </summary> + <remarks> + This method sets the <see cref="P:WebSocketSharp.Net.HttpListenerResponse.RedirectLocation"/> property to + <paramref name="url"/>, the <see cref="P:WebSocketSharp.Net.HttpListenerResponse.StatusCode"/> property to + <c>302</c>, and the <see cref="P:WebSocketSharp.Net.HttpListenerResponse.StatusDescription"/> property to + <c>"Found"</c>. + </remarks> + <param name="url"> + A <see cref="T:System.String"/> that represents the URL to redirect the client's request to. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="url"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="url"/> isn't an absolute URL. + </exception> + <exception cref="T:System.InvalidOperationException"> + The response has already been sent. + </exception> + <exception cref="T:System.ObjectDisposedException"> + This object is closed. + </exception> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerResponse.SetCookie(WebSocketSharp.Net.Cookie)"> + <summary> + Adds or updates a <paramref name="cookie"/> in the cookies sent with the response. + </summary> + <param name="cookie"> + A <see cref="T:WebSocketSharp.Net.Cookie"/> to set. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="cookie"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="cookie"/> already exists in the cookies and couldn't be replaced. + </exception> + </member> + <member name="M:WebSocketSharp.Net.HttpListenerResponse.System#IDisposable#Dispose"> + <summary> + Releases all resources used by the <see cref="T:WebSocketSharp.Net.HttpListenerResponse"/>. + </summary> + </member> + <member name="T:WebSocketSharp.Net.HttpRequestHeader"> + <summary> + Contains the HTTP headers that may be specified in a client request. + </summary> + <remarks> + The HttpRequestHeader enumeration contains the HTTP request headers defined in + <see href="http://tools.ietf.org/html/rfc2616#section-14">RFC 2616</see> for the HTTP/1.1 and + <see href="http://tools.ietf.org/html/rfc6455#section-11.3">RFC 6455</see> for the WebSocket. + </remarks> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.CacheControl"> + <summary> + Indicates the Cache-Control header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.Connection"> + <summary> + Indicates the Connection header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.Date"> + <summary> + Indicates the Date header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.KeepAlive"> + <summary> + Indicates the Keep-Alive header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.Pragma"> + <summary> + Indicates the Pragma header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.Trailer"> + <summary> + Indicates the Trailer header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.TransferEncoding"> + <summary> + Indicates the Transfer-Encoding header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.Upgrade"> + <summary> + Indicates the Upgrade header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.Via"> + <summary> + Indicates the Via header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.Warning"> + <summary> + Indicates the Warning header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.Allow"> + <summary> + Indicates the Allow header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.ContentLength"> + <summary> + Indicates the Content-Length header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.ContentType"> + <summary> + Indicates the Content-Type header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.ContentEncoding"> + <summary> + Indicates the Content-Encoding header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.ContentLanguage"> + <summary> + Indicates the Content-Language header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.ContentLocation"> + <summary> + Indicates the Content-Location header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.ContentMd5"> + <summary> + Indicates the Content-MD5 header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.ContentRange"> + <summary> + Indicates the Content-Range header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.Expires"> + <summary> + Indicates the Expires header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.LastModified"> + <summary> + Indicates the Last-Modified header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.Accept"> + <summary> + Indicates the Accept header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.AcceptCharset"> + <summary> + Indicates the Accept-Charset header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.AcceptEncoding"> + <summary> + Indicates the Accept-Encoding header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.AcceptLanguage"> + <summary> + Indicates the Accept-Language header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.Authorization"> + <summary> + Indicates the Authorization header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.Cookie"> + <summary> + Indicates the Cookie header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.Expect"> + <summary> + Indicates the Expect header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.From"> + <summary> + Indicates the From header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.Host"> + <summary> + Indicates the Host header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.IfMatch"> + <summary> + Indicates the If-Match header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.IfModifiedSince"> + <summary> + Indicates the If-Modified-Since header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.IfNoneMatch"> + <summary> + Indicates the If-None-Match header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.IfRange"> + <summary> + Indicates the If-Range header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.IfUnmodifiedSince"> + <summary> + Indicates the If-Unmodified-Since header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.MaxForwards"> + <summary> + Indicates the Max-Forwards header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.ProxyAuthorization"> + <summary> + Indicates the Proxy-Authorization header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.Referer"> + <summary> + Indicates the Referer header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.Range"> + <summary> + Indicates the Range header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.Te"> + <summary> + Indicates the TE header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.Translate"> + <summary> + Indicates the Translate header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.UserAgent"> + <summary> + Indicates the User-Agent header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.SecWebSocketKey"> + <summary> + Indicates the Sec-WebSocket-Key header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.SecWebSocketExtensions"> + <summary> + Indicates the Sec-WebSocket-Extensions header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.SecWebSocketProtocol"> + <summary> + Indicates the Sec-WebSocket-Protocol header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpRequestHeader.SecWebSocketVersion"> + <summary> + Indicates the Sec-WebSocket-Version header. + </summary> + </member> + <member name="T:WebSocketSharp.Net.HttpResponseHeader"> + <summary> + Contains the HTTP headers that can be specified in a server response. + </summary> + <remarks> + The HttpResponseHeader enumeration contains the HTTP response headers defined in + <see href="http://tools.ietf.org/html/rfc2616#section-14">RFC 2616</see> for the HTTP/1.1 and + <see href="http://tools.ietf.org/html/rfc6455#section-11.3">RFC 6455</see> for the WebSocket. + </remarks> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.CacheControl"> + <summary> + Indicates the Cache-Control header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.Connection"> + <summary> + Indicates the Connection header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.Date"> + <summary> + Indicates the Date header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.KeepAlive"> + <summary> + Indicates the Keep-Alive header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.Pragma"> + <summary> + Indicates the Pragma header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.Trailer"> + <summary> + Indicates the Trailer header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.TransferEncoding"> + <summary> + Indicates the Transfer-Encoding header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.Upgrade"> + <summary> + Indicates the Upgrade header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.Via"> + <summary> + Indicates the Via header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.Warning"> + <summary> + Indicates the Warning header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.Allow"> + <summary> + Indicates the Allow header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.ContentLength"> + <summary> + Indicates the Content-Length header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.ContentType"> + <summary> + Indicates the Content-Type header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.ContentEncoding"> + <summary> + Indicates the Content-Encoding header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.ContentLanguage"> + <summary> + Indicates the Content-Language header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.ContentLocation"> + <summary> + Indicates the Content-Location header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.ContentMd5"> + <summary> + Indicates the Content-MD5 header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.ContentRange"> + <summary> + Indicates the Content-Range header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.Expires"> + <summary> + Indicates the Expires header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.LastModified"> + <summary> + Indicates the Last-Modified header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.AcceptRanges"> + <summary> + Indicates the Accept-Ranges header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.Age"> + <summary> + Indicates the Age header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.ETag"> + <summary> + Indicates the ETag header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.Location"> + <summary> + Indicates the Location header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.ProxyAuthenticate"> + <summary> + Indicates the Proxy-Authenticate header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.RetryAfter"> + <summary> + Indicates the Retry-After header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.Server"> + <summary> + Indicates the Server header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.SetCookie"> + <summary> + Indicates the Set-Cookie header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.Vary"> + <summary> + Indicates the Vary header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.WwwAuthenticate"> + <summary> + Indicates the WWW-Authenticate header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.SecWebSocketExtensions"> + <summary> + Indicates the Sec-WebSocket-Extensions header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.SecWebSocketAccept"> + <summary> + Indicates the Sec-WebSocket-Accept header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.SecWebSocketProtocol"> + <summary> + Indicates the Sec-WebSocket-Protocol header. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpResponseHeader.SecWebSocketVersion"> + <summary> + Indicates the Sec-WebSocket-Version header. + </summary> + </member> + <member name="T:WebSocketSharp.Net.HttpStatusCode"> + <summary> + Contains the values of the HTTP status codes. + </summary> + <remarks> + The HttpStatusCode enumeration contains the values of the HTTP status codes defined in + <see href="http://tools.ietf.org/html/rfc2616#section-10">RFC 2616</see> for the HTTP/1.1. + </remarks> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.Continue"> + <summary> + Equivalent to status code 100. + Indicates that the client should continue with its request. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.SwitchingProtocols"> + <summary> + Equivalent to status code 101. + Indicates that the server is switching the HTTP version or protocol on the connection. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.OK"> + <summary> + Equivalent to status code 200. + Indicates that the client's request has succeeded. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.Created"> + <summary> + Equivalent to status code 201. + Indicates that the client's request has been fulfilled and resulted in a new resource being + created. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.Accepted"> + <summary> + Equivalent to status code 202. + Indicates that the client's request has been accepted for processing, but the processing + hasn't been completed. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.NonAuthoritativeInformation"> + <summary> + Equivalent to status code 203. + Indicates that the returned metainformation is from a local or a third-party copy instead of + the origin server. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.NoContent"> + <summary> + Equivalent to status code 204. + Indicates that the server has fulfilled the client's request but doesn't need to return + an entity-body. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.ResetContent"> + <summary> + Equivalent to status code 205. + Indicates that the server has fulfilled the client's request, and the user agent should + reset the document view which caused the request to be sent. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.PartialContent"> + <summary> + Equivalent to status code 206. + Indicates that the server has fulfilled the partial GET request for the resource. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.MultipleChoices"> + <summary> + <para> + Equivalent to status code 300. + Indicates that the requested resource corresponds to any of multiple representations. + </para> + <para> + MultipleChoices is a synonym for Ambiguous. + </para> + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.Ambiguous"> + <summary> + <para> + Equivalent to status code 300. + Indicates that the requested resource corresponds to any of multiple representations. + </para> + <para> + Ambiguous is a synonym for MultipleChoices. + </para> + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.MovedPermanently"> + <summary> + <para> + Equivalent to status code 301. + Indicates that the requested resource has been assigned a new permanent URI and + any future references to this resource should use one of the returned URIs. + </para> + <para> + MovedPermanently is a synonym for Moved. + </para> + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.Moved"> + <summary> + <para> + Equivalent to status code 301. + Indicates that the requested resource has been assigned a new permanent URI and + any future references to this resource should use one of the returned URIs. + </para> + <para> + Moved is a synonym for MovedPermanently. + </para> + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.Found"> + <summary> + <para> + Equivalent to status code 302. + Indicates that the requested resource is located temporarily under a different URI. + </para> + <para> + Found is a synonym for Redirect. + </para> + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.Redirect"> + <summary> + <para> + Equivalent to status code 302. + Indicates that the requested resource is located temporarily under a different URI. + </para> + <para> + Redirect is a synonym for Found. + </para> + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.SeeOther"> + <summary> + <para> + Equivalent to status code 303. + Indicates that the response to the request can be found under a different URI and + should be retrieved using a GET method on that resource. + </para> + <para> + SeeOther is a synonym for RedirectMethod. + </para> + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.RedirectMethod"> + <summary> + <para> + Equivalent to status code 303. + Indicates that the response to the request can be found under a different URI and + should be retrieved using a GET method on that resource. + </para> + <para> + RedirectMethod is a synonym for SeeOther. + </para> + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.NotModified"> + <summary> + Equivalent to status code 304. + Indicates that the client has performed a conditional GET request and access is allowed, + but the document hasn't been modified. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.UseProxy"> + <summary> + Equivalent to status code 305. + Indicates that the requested resource must be accessed through the proxy given by + the Location field. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.Unused"> + <summary> + Equivalent to status code 306. + This status code was used in a previous version of the specification, is no longer used, + and is reserved for future use. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.TemporaryRedirect"> + <summary> + <para> + Equivalent to status code 307. + Indicates that the requested resource is located temporarily under a different URI. + </para> + <para> + TemporaryRedirect is a synonym for RedirectKeepVerb. + </para> + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.RedirectKeepVerb"> + <summary> + <para> + Equivalent to status code 307. + Indicates that the requested resource is located temporarily under a different URI. + </para> + <para> + RedirectKeepVerb is a synonym for TemporaryRedirect. + </para> + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.BadRequest"> + <summary> + Equivalent to status code 400. + Indicates that the client's request couldn't be understood by the server due to + malformed syntax. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.Unauthorized"> + <summary> + Equivalent to status code 401. + Indicates that the client's request requires user authentication. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.PaymentRequired"> + <summary> + Equivalent to status code 402. + This status code is reserved for future use. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.Forbidden"> + <summary> + Equivalent to status code 403. + Indicates that the server understood the client's request but is refusing to fulfill it. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.NotFound"> + <summary> + Equivalent to status code 404. + Indicates that the server hasn't found anything matching the request URI. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.MethodNotAllowed"> + <summary> + Equivalent to status code 405. + Indicates that the method specified in the request line isn't allowed for the resource + identified by the request URI. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.NotAcceptable"> + <summary> + Equivalent to status code 406. + Indicates that the server doesn't have the appropriate resource to respond to the Accept + headers in the client's request. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.ProxyAuthenticationRequired"> + <summary> + Equivalent to status code 407. + Indicates that the client must first authenticate itself with the proxy. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.RequestTimeout"> + <summary> + Equivalent to status code 408. + Indicates that the client didn't produce a request within the time that the server was + prepared to wait. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.Conflict"> + <summary> + Equivalent to status code 409. + Indicates that the client's request couldn't be completed due to a conflict on the server. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.Gone"> + <summary> + Equivalent to status code 410. + Indicates that the requested resource is no longer available at the server and + no forwarding address is known. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.LengthRequired"> + <summary> + Equivalent to status code 411. + Indicates that the server refuses to accept the client's request without a defined + Content-Length. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.PreconditionFailed"> + <summary> + Equivalent to status code 412. + Indicates that the precondition given in one or more of the request headers evaluated to + false when it was tested on the server. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.RequestEntityTooLarge"> + <summary> + Equivalent to status code 413. + Indicates that the entity of the client's request is larger than the server is willing or + able to process. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.RequestUriTooLong"> + <summary> + Equivalent to status code 414. + Indicates that the request URI is longer than the server is willing to interpret. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.UnsupportedMediaType"> + <summary> + Equivalent to status code 415. + Indicates that the entity of the client's request is in a format not supported by + the requested resource for the requested method. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.RequestedRangeNotSatisfiable"> + <summary> + Equivalent to status code 416. + Indicates that none of the range specifier values in a Range request header overlap + the current extent of the selected resource. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.ExpectationFailed"> + <summary> + Equivalent to status code 417. + Indicates that the expectation given in an Expect request header couldn't be met by + the server. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.InternalServerError"> + <summary> + Equivalent to status code 500. + Indicates that the server encountered an unexpected condition which prevented it from + fulfilling the client's request. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.NotImplemented"> + <summary> + Equivalent to status code 501. + Indicates that the server doesn't support the functionality required to fulfill the client's + request. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.BadGateway"> + <summary> + Equivalent to status code 502. + Indicates that a gateway or proxy server received an invalid response from the upstream + server. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.ServiceUnavailable"> + <summary> + Equivalent to status code 503. + Indicates that the server is currently unable to handle the client's request due to + a temporary overloading or maintenance of the server. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.GatewayTimeout"> + <summary> + Equivalent to status code 504. + Indicates that a gateway or proxy server didn't receive a timely response from the upstream + server or some other auxiliary server. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpStatusCode.HttpVersionNotSupported"> + <summary> + Equivalent to status code 505. + Indicates that the server doesn't support the HTTP version used in the client's request. + </summary> + </member> + <member name="M:WebSocketSharp.Net.HttpUtility.HtmlDecode(System.String)"> + <summary> + Decodes an HTML-encoded <see cref="T:System.String"/> and returns the decoded <see cref="T:System.String"/>. + </summary> + <returns> + A <see cref="T:System.String"/> that represents the decoded string. + </returns> + <param name="s"> + A <see cref="T:System.String"/> to decode. + </param> + </member> + <member name="M:WebSocketSharp.Net.HttpUtility.HtmlDecode(System.String,System.IO.TextWriter)"> + <summary> + Decodes an HTML-encoded <see cref="T:System.String"/> and sends the decoded <see cref="T:System.String"/> + to the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="s"> + A <see cref="T:System.String"/> to decode. + </param> + <param name="output"> + A <see cref="T:System.IO.TextWriter"/> that receives the decoded string. + </param> + </member> + <member name="M:WebSocketSharp.Net.HttpUtility.HtmlEncode(System.String)"> + <summary> + HTML-encodes a <see cref="T:System.String"/> and returns the encoded <see cref="T:System.String"/>. + </summary> + <returns> + A <see cref="T:System.String"/> that represents the encoded string. + </returns> + <param name="s"> + A <see cref="T:System.String"/> to encode. + </param> + </member> + <member name="M:WebSocketSharp.Net.HttpUtility.HtmlEncode(System.String,System.IO.TextWriter)"> + <summary> + HTML-encodes a <see cref="T:System.String"/> and sends the encoded <see cref="T:System.String"/> + to the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="s"> + A <see cref="T:System.String"/> to encode. + </param> + <param name="output"> + A <see cref="T:System.IO.TextWriter"/> that receives the encoded string. + </param> + </member> + <member name="T:WebSocketSharp.Net.HttpVersion"> + <summary> + Provides the HTTP version numbers. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpVersion.Version10"> + <summary> + Provides a <see cref="T:System.Version"/> instance for the HTTP/1.0. + </summary> + </member> + <member name="F:WebSocketSharp.Net.HttpVersion.Version11"> + <summary> + Provides a <see cref="T:System.Version"/> instance for the HTTP/1.1. + </summary> + </member> + <member name="M:WebSocketSharp.Net.HttpVersion.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Net.HttpVersion"/> class. + </summary> + </member> + <member name="T:WebSocketSharp.Net.NetworkCredential"> + <summary> + Provides the credentials for the password-based authentication. + </summary> + </member> + <member name="M:WebSocketSharp.Net.NetworkCredential.#ctor(System.String,System.String)"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Net.NetworkCredential"/> class with + the specified <paramref name="username"/> and <paramref name="password"/>. + </summary> + <param name="username"> + A <see cref="T:System.String"/> that represents the username associated with + the credentials. + </param> + <param name="password"> + A <see cref="T:System.String"/> that represents the password for the username + associated with the credentials. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="username"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="username"/> is empty. + </exception> + </member> + <member name="M:WebSocketSharp.Net.NetworkCredential.#ctor(System.String,System.String,System.String,System.String[])"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Net.NetworkCredential"/> class with + the specified <paramref name="username"/>, <paramref name="password"/>, + <paramref name="domain"/> and <paramref name="roles"/>. + </summary> + <param name="username"> + A <see cref="T:System.String"/> that represents the username associated with + the credentials. + </param> + <param name="password"> + A <see cref="T:System.String"/> that represents the password for the username + associated with the credentials. + </param> + <param name="domain"> + A <see cref="T:System.String"/> that represents the domain associated with + the credentials. + </param> + <param name="roles"> + An array of <see cref="T:System.String"/> that represents the roles + associated with the credentials if any. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="username"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="username"/> is empty. + </exception> + </member> + <member name="P:WebSocketSharp.Net.NetworkCredential.Domain"> + <summary> + Gets the domain associated with the credentials. + </summary> + <remarks> + This property returns an empty string if the domain was + initialized with <see langword="null"/>. + </remarks> + <value> + A <see cref="T:System.String"/> that represents the domain name + to which the username belongs. + </value> + </member> + <member name="P:WebSocketSharp.Net.NetworkCredential.Password"> + <summary> + Gets the password for the username associated with the credentials. + </summary> + <remarks> + This property returns an empty string if the password was + initialized with <see langword="null"/>. + </remarks> + <value> + A <see cref="T:System.String"/> that represents the password. + </value> + </member> + <member name="P:WebSocketSharp.Net.NetworkCredential.Roles"> + <summary> + Gets the roles associated with the credentials. + </summary> + <remarks> + This property returns an empty array if the roles were + initialized with <see langword="null"/>. + </remarks> + <value> + An array of <see cref="T:System.String"/> that represents the role names + to which the username belongs. + </value> + </member> + <member name="P:WebSocketSharp.Net.NetworkCredential.Username"> + <summary> + Gets the username associated with the credentials. + </summary> + <value> + A <see cref="T:System.String"/> that represents the username. + </value> + </member> + <member name="T:WebSocketSharp.Net.ServerSslConfiguration"> + <summary> + Stores the parameters for the <see cref="T:System.Net.Security.SslStream"/> used by servers. + </summary> + </member> + <member name="M:WebSocketSharp.Net.ServerSslConfiguration.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Net.ServerSslConfiguration"/> class. + </summary> + </member> + <member name="M:WebSocketSharp.Net.ServerSslConfiguration.#ctor(System.Security.Cryptography.X509Certificates.X509Certificate2)"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Net.ServerSslConfiguration"/> class + with the specified <paramref name="serverCertificate"/>. + </summary> + <param name="serverCertificate"> + A <see cref="T:System.Security.Cryptography.X509Certificates.X509Certificate2"/> that represents the certificate used to + authenticate the server. + </param> + </member> + <member name="M:WebSocketSharp.Net.ServerSslConfiguration.#ctor(WebSocketSharp.Net.ServerSslConfiguration)"> + <summary> + Copies the parameters from the specified <paramref name="configuration"/> to + a new instance of the <see cref="T:WebSocketSharp.Net.ServerSslConfiguration"/> class. + </summary> + <param name="configuration"> + A <see cref="T:WebSocketSharp.Net.ServerSslConfiguration"/> from which to copy. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="configuration"/> is <see langword="null"/>. + </exception> + </member> + <member name="P:WebSocketSharp.Net.ServerSslConfiguration.CheckCertificateRevocation"> + <summary> + Gets or sets a value indicating whether the certificate revocation + list is checked during authentication. + </summary> + <value> + <para> + <c>true</c> if the certificate revocation list is checked during + authentication; otherwise, <c>false</c>. + </para> + <para> + The default value is <c>false</c>. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Net.ServerSslConfiguration.ClientCertificateRequired"> + <summary> + Gets or sets a value indicating whether the client is asked for + a certificate for authentication. + </summary> + <value> + <para> + <c>true</c> if the client is asked for a certificate for + authentication; otherwise, <c>false</c>. + </para> + <para> + The default value is <c>false</c>. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Net.ServerSslConfiguration.ClientCertificateValidationCallback"> + <summary> + Gets or sets the callback used to validate the certificate + supplied by the client. + </summary> + <remarks> + The certificate is valid if the callback returns <c>true</c>. + </remarks> + <value> + <para> + A <see cref="T:System.Net.Security.RemoteCertificateValidationCallback"/> delegate that + invokes the method called for validating the certificate. + </para> + <para> + The default value is a delegate that invokes a method that + only returns <c>true</c>. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Net.ServerSslConfiguration.EnabledSslProtocols"> + <summary> + Gets or sets the protocols used for authentication. + </summary> + <value> + <para> + The <see cref="T:System.Security.Authentication.SslProtocols"/> enum values that represent + the protocols used for authentication. + </para> + <para> + The default value is <see cref="F:System.Security.Authentication.SslProtocols.Default"/>. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Net.ServerSslConfiguration.ServerCertificate"> + <summary> + Gets or sets the certificate used to authenticate the server. + </summary> + <value> + <para> + A <see cref="T:System.Security.Cryptography.X509Certificates.X509Certificate2"/> or <see langword="null"/> + if not specified. + </para> + <para> + That instance represents an X.509 certificate. + </para> + </value> + </member> + <member name="T:WebSocketSharp.Net.WebHeaderCollection"> + <summary> + Provides a collection of the HTTP headers associated with a request or response. + </summary> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Net.WebHeaderCollection"/> class from + the specified <see cref="T:System.Runtime.Serialization.SerializationInfo"/> and <see cref="T:System.Runtime.Serialization.StreamingContext"/>. + </summary> + <param name="serializationInfo"> + A <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that contains the serialized object data. + </param> + <param name="streamingContext"> + A <see cref="T:System.Runtime.Serialization.StreamingContext"/> that specifies the source for the deserialization. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="serializationInfo"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + An element with the specified name isn't found in <paramref name="serializationInfo"/>. + </exception> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Net.WebHeaderCollection"/> class. + </summary> + </member> + <member name="P:WebSocketSharp.Net.WebHeaderCollection.AllKeys"> + <summary> + Gets all header names in the collection. + </summary> + <value> + An array of <see cref="T:System.String"/> that contains all header names in the collection. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebHeaderCollection.Count"> + <summary> + Gets the number of headers in the collection. + </summary> + <value> + An <see cref="T:System.Int32"/> that represents the number of headers in the collection. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebHeaderCollection.Item(WebSocketSharp.Net.HttpRequestHeader)"> + <summary> + Gets or sets the specified request <paramref name="header"/> in the collection. + </summary> + <value> + A <see cref="T:System.String"/> that represents the value of the request <paramref name="header"/>. + </value> + <param name="header"> + One of the <see cref="T:WebSocketSharp.Net.HttpRequestHeader"/> enum values, represents + the request header to get or set. + </param> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="header"/> is a restricted header. + </para> + <para> + -or- + </para> + <para> + <paramref name="value"/> contains invalid characters. + </para> + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + The length of <paramref name="value"/> is greater than 65,535 characters. + </exception> + <exception cref="T:System.InvalidOperationException"> + The current <see cref="T:WebSocketSharp.Net.WebHeaderCollection"/> instance doesn't allow + the request <paramref name="header"/>. + </exception> + </member> + <member name="P:WebSocketSharp.Net.WebHeaderCollection.Item(WebSocketSharp.Net.HttpResponseHeader)"> + <summary> + Gets or sets the specified response <paramref name="header"/> in the collection. + </summary> + <value> + A <see cref="T:System.String"/> that represents the value of the response <paramref name="header"/>. + </value> + <param name="header"> + One of the <see cref="T:WebSocketSharp.Net.HttpResponseHeader"/> enum values, represents + the response header to get or set. + </param> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="header"/> is a restricted header. + </para> + <para> + -or- + </para> + <para> + <paramref name="value"/> contains invalid characters. + </para> + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + The length of <paramref name="value"/> is greater than 65,535 characters. + </exception> + <exception cref="T:System.InvalidOperationException"> + The current <see cref="T:WebSocketSharp.Net.WebHeaderCollection"/> instance doesn't allow + the response <paramref name="header"/>. + </exception> + </member> + <member name="P:WebSocketSharp.Net.WebHeaderCollection.Keys"> + <summary> + Gets a collection of header names in the collection. + </summary> + <value> + A <see cref="T:System.Collections.Specialized.NameObjectCollectionBase.KeysCollection"/> that contains + all header names in the collection. + </value> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.AddWithoutValidate(System.String,System.String)"> + <summary> + Adds a header to the collection without checking if the header is on + the restricted header list. + </summary> + <param name="headerName"> + A <see cref="T:System.String"/> that represents the name of the header to add. + </param> + <param name="headerValue"> + A <see cref="T:System.String"/> that represents the value of the header to add. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="headerName"/> is <see langword="null"/> or empty. + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="headerName"/> or <paramref name="headerValue"/> contains invalid characters. + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + The length of <paramref name="headerValue"/> is greater than 65,535 characters. + </exception> + <exception cref="T:System.InvalidOperationException"> + The current <see cref="T:WebSocketSharp.Net.WebHeaderCollection"/> instance doesn't allow + the <paramref name="headerName"/>. + </exception> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.Add(System.String)"> + <summary> + Adds the specified <paramref name="header"/> to the collection. + </summary> + <param name="header"> + A <see cref="T:System.String"/> that represents the header with the name and value separated by + a colon (<c>':'</c>). + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="header"/> is <see langword="null"/>, empty, or the name part of + <paramref name="header"/> is empty. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="header"/> doesn't contain a colon. + </para> + <para> + -or- + </para> + <para> + <paramref name="header"/> is a restricted header. + </para> + <para> + -or- + </para> + <para> + The name or value part of <paramref name="header"/> contains invalid characters. + </para> + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + The length of the value part of <paramref name="header"/> is greater than 65,535 characters. + </exception> + <exception cref="T:System.InvalidOperationException"> + The current <see cref="T:WebSocketSharp.Net.WebHeaderCollection"/> instance doesn't allow + the <paramref name="header"/>. + </exception> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.Add(WebSocketSharp.Net.HttpRequestHeader,System.String)"> + <summary> + Adds the specified request <paramref name="header"/> with + the specified <paramref name="value"/> to the collection. + </summary> + <param name="header"> + One of the <see cref="T:WebSocketSharp.Net.HttpRequestHeader"/> enum values, represents + the request header to add. + </param> + <param name="value"> + A <see cref="T:System.String"/> that represents the value of the header to add. + </param> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="header"/> is a restricted header. + </para> + <para> + -or- + </para> + <para> + <paramref name="value"/> contains invalid characters. + </para> + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + The length of <paramref name="value"/> is greater than 65,535 characters. + </exception> + <exception cref="T:System.InvalidOperationException"> + The current <see cref="T:WebSocketSharp.Net.WebHeaderCollection"/> instance doesn't allow + the request <paramref name="header"/>. + </exception> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.Add(WebSocketSharp.Net.HttpResponseHeader,System.String)"> + <summary> + Adds the specified response <paramref name="header"/> with + the specified <paramref name="value"/> to the collection. + </summary> + <param name="header"> + One of the <see cref="T:WebSocketSharp.Net.HttpResponseHeader"/> enum values, represents + the response header to add. + </param> + <param name="value"> + A <see cref="T:System.String"/> that represents the value of the header to add. + </param> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="header"/> is a restricted header. + </para> + <para> + -or- + </para> + <para> + <paramref name="value"/> contains invalid characters. + </para> + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + The length of <paramref name="value"/> is greater than 65,535 characters. + </exception> + <exception cref="T:System.InvalidOperationException"> + The current <see cref="T:WebSocketSharp.Net.WebHeaderCollection"/> instance doesn't allow + the response <paramref name="header"/>. + </exception> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.Add(System.String,System.String)"> + <summary> + Adds a header with the specified <paramref name="name"/> and + <paramref name="value"/> to the collection. + </summary> + <param name="name"> + A <see cref="T:System.String"/> that represents the name of the header to add. + </param> + <param name="value"> + A <see cref="T:System.String"/> that represents the value of the header to add. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="name"/> is <see langword="null"/> or empty. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="name"/> or <paramref name="value"/> contains invalid characters. + </para> + <para> + -or- + </para> + <para> + <paramref name="name"/> is a restricted header name. + </para> + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + The length of <paramref name="value"/> is greater than 65,535 characters. + </exception> + <exception cref="T:System.InvalidOperationException"> + The current <see cref="T:WebSocketSharp.Net.WebHeaderCollection"/> instance doesn't allow + the header <paramref name="name"/>. + </exception> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.Clear"> + <summary> + Removes all headers from the collection. + </summary> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.Get(System.Int32)"> + <summary> + Get the value of the header at the specified <paramref name="index"/> in the collection. + </summary> + <returns> + A <see cref="T:System.String"/> that receives the value of the header. + </returns> + <param name="index"> + An <see cref="T:System.Int32"/> that represents the zero-based index of the header to find. + </param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is out of allowable range of indexes for the collection. + </exception> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.Get(System.String)"> + <summary> + Get the value of the header with the specified <paramref name="name"/> in the collection. + </summary> + <returns> + A <see cref="T:System.String"/> that receives the value of the header if found; + otherwise, <see langword="null"/>. + </returns> + <param name="name"> + A <see cref="T:System.String"/> that represents the name of the header to find. + </param> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.GetEnumerator"> + <summary> + Gets the enumerator used to iterate through the collection. + </summary> + <returns> + An <see cref="T:System.Collections.IEnumerator"/> instance used to iterate through the collection. + </returns> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.GetKey(System.Int32)"> + <summary> + Get the name of the header at the specified <paramref name="index"/> in the collection. + </summary> + <returns> + A <see cref="T:System.String"/> that receives the header name. + </returns> + <param name="index"> + An <see cref="T:System.Int32"/> that represents the zero-based index of the header to find. + </param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is out of allowable range of indexes for the collection. + </exception> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.GetValues(System.Int32)"> + <summary> + Gets an array of header values stored in the specified <paramref name="index"/> position of + the collection. + </summary> + <returns> + An array of <see cref="T:System.String"/> that receives the header values if found; + otherwise, <see langword="null"/>. + </returns> + <param name="index"> + An <see cref="T:System.Int32"/> that represents the zero-based index of the header to find. + </param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is out of allowable range of indexes for the collection. + </exception> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.GetValues(System.String)"> + <summary> + Gets an array of header values stored in the specified <paramref name="header"/>. + </summary> + <returns> + An array of <see cref="T:System.String"/> that receives the header values if found; + otherwise, <see langword="null"/>. + </returns> + <param name="header"> + A <see cref="T:System.String"/> that represents the name of the header to find. + </param> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Populates the specified <see cref="T:System.Runtime.Serialization.SerializationInfo"/> with the data needed to serialize + the <see cref="T:WebSocketSharp.Net.WebHeaderCollection"/>. + </summary> + <param name="serializationInfo"> + A <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data. + </param> + <param name="streamingContext"> + A <see cref="T:System.Runtime.Serialization.StreamingContext"/> that specifies the destination for the serialization. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="serializationInfo"/> is <see langword="null"/>. + </exception> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.IsRestricted(System.String)"> + <summary> + Determines whether the specified header can be set for the request. + </summary> + <returns> + <c>true</c> if the header is restricted; otherwise, <c>false</c>. + </returns> + <param name="headerName"> + A <see cref="T:System.String"/> that represents the name of the header to test. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="headerName"/> is <see langword="null"/> or empty. + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="headerName"/> contains invalid characters. + </exception> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.IsRestricted(System.String,System.Boolean)"> + <summary> + Determines whether the specified header can be set for the request or the response. + </summary> + <returns> + <c>true</c> if the header is restricted; otherwise, <c>false</c>. + </returns> + <param name="headerName"> + A <see cref="T:System.String"/> that represents the name of the header to test. + </param> + <param name="response"> + <c>true</c> if does the test for the response; for the request, <c>false</c>. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="headerName"/> is <see langword="null"/> or empty. + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="headerName"/> contains invalid characters. + </exception> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.OnDeserialization(System.Object)"> + <summary> + Implements the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface and raises the deserialization event + when the deserialization is complete. + </summary> + <param name="sender"> + An <see cref="T:System.Object"/> that represents the source of the deserialization event. + </param> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.Remove(WebSocketSharp.Net.HttpRequestHeader)"> + <summary> + Removes the specified request <paramref name="header"/> from the collection. + </summary> + <param name="header"> + One of the <see cref="T:WebSocketSharp.Net.HttpRequestHeader"/> enum values, represents + the request header to remove. + </param> + <exception cref="T:System.ArgumentException"> + <paramref name="header"/> is a restricted header. + </exception> + <exception cref="T:System.InvalidOperationException"> + The current <see cref="T:WebSocketSharp.Net.WebHeaderCollection"/> instance doesn't allow + the request <paramref name="header"/>. + </exception> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.Remove(WebSocketSharp.Net.HttpResponseHeader)"> + <summary> + Removes the specified response <paramref name="header"/> from the collection. + </summary> + <param name="header"> + One of the <see cref="T:WebSocketSharp.Net.HttpResponseHeader"/> enum values, represents + the response header to remove. + </param> + <exception cref="T:System.ArgumentException"> + <paramref name="header"/> is a restricted header. + </exception> + <exception cref="T:System.InvalidOperationException"> + The current <see cref="T:WebSocketSharp.Net.WebHeaderCollection"/> instance doesn't allow + the response <paramref name="header"/>. + </exception> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.Remove(System.String)"> + <summary> + Removes the specified header from the collection. + </summary> + <param name="name"> + A <see cref="T:System.String"/> that represents the name of the header to remove. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="name"/> is <see langword="null"/> or empty. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="name"/> contains invalid characters. + </para> + <para> + -or- + </para> + <para> + <paramref name="name"/> is a restricted header name. + </para> + </exception> + <exception cref="T:System.InvalidOperationException"> + The current <see cref="T:WebSocketSharp.Net.WebHeaderCollection"/> instance doesn't allow + the header <paramref name="name"/>. + </exception> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.Set(WebSocketSharp.Net.HttpRequestHeader,System.String)"> + <summary> + Sets the specified request <paramref name="header"/> to the specified value. + </summary> + <param name="header"> + One of the <see cref="T:WebSocketSharp.Net.HttpRequestHeader"/> enum values, represents + the request header to set. + </param> + <param name="value"> + A <see cref="T:System.String"/> that represents the value of the request header to set. + </param> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="header"/> is a restricted header. + </para> + <para> + -or- + </para> + <para> + <paramref name="value"/> contains invalid characters. + </para> + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + The length of <paramref name="value"/> is greater than 65,535 characters. + </exception> + <exception cref="T:System.InvalidOperationException"> + The current <see cref="T:WebSocketSharp.Net.WebHeaderCollection"/> instance doesn't allow + the request <paramref name="header"/>. + </exception> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.Set(WebSocketSharp.Net.HttpResponseHeader,System.String)"> + <summary> + Sets the specified response <paramref name="header"/> to the specified value. + </summary> + <param name="header"> + One of the <see cref="T:WebSocketSharp.Net.HttpResponseHeader"/> enum values, represents + the response header to set. + </param> + <param name="value"> + A <see cref="T:System.String"/> that represents the value of the response header to set. + </param> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="header"/> is a restricted header. + </para> + <para> + -or- + </para> + <para> + <paramref name="value"/> contains invalid characters. + </para> + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + The length of <paramref name="value"/> is greater than 65,535 characters. + </exception> + <exception cref="T:System.InvalidOperationException"> + The current <see cref="T:WebSocketSharp.Net.WebHeaderCollection"/> instance doesn't allow + the response <paramref name="header"/>. + </exception> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.Set(System.String,System.String)"> + <summary> + Sets the specified header to the specified value. + </summary> + <param name="name"> + A <see cref="T:System.String"/> that represents the name of the header to set. + </param> + <param name="value"> + A <see cref="T:System.String"/> that represents the value of the header to set. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="name"/> is <see langword="null"/> or empty. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="name"/> or <paramref name="value"/> contains invalid characters. + </para> + <para> + -or- + </para> + <para> + <paramref name="name"/> is a restricted header name. + </para> + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + The length of <paramref name="value"/> is greater than 65,535 characters. + </exception> + <exception cref="T:System.InvalidOperationException"> + The current <see cref="T:WebSocketSharp.Net.WebHeaderCollection"/> instance doesn't allow + the header <paramref name="name"/>. + </exception> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.ToByteArray"> + <summary> + Converts the current <see cref="T:WebSocketSharp.Net.WebHeaderCollection"/> to an array of <see cref="T:System.Byte"/>. + </summary> + <returns> + An array of <see cref="T:System.Byte"/> that receives the converted current + <see cref="T:WebSocketSharp.Net.WebHeaderCollection"/>. + </returns> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents the current + <see cref="T:WebSocketSharp.Net.WebHeaderCollection"/>. + </summary> + <returns> + A <see cref="T:System.String"/> that represents the current <see cref="T:WebSocketSharp.Net.WebHeaderCollection"/>. + </returns> + </member> + <member name="M:WebSocketSharp.Net.WebHeaderCollection.System#Runtime#Serialization#ISerializable#GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Populates the specified <see cref="T:System.Runtime.Serialization.SerializationInfo"/> with the data needed to serialize + the current <see cref="T:WebSocketSharp.Net.WebHeaderCollection"/>. + </summary> + <param name="serializationInfo"> + A <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data. + </param> + <param name="streamingContext"> + A <see cref="T:System.Runtime.Serialization.StreamingContext"/> that specifies the destination for the serialization. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="serializationInfo"/> is <see langword="null"/>. + </exception> + </member> + <member name="T:WebSocketSharp.Net.WebSockets.HttpListenerWebSocketContext"> + <summary> + Provides the properties used to access the information in + a WebSocket handshake request received by the <see cref="T:WebSocketSharp.Net.HttpListener"/>. + </summary> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.HttpListenerWebSocketContext.CookieCollection"> + <summary> + Gets the HTTP cookies included in the request. + </summary> + <value> + A <see cref="T:WebSocketSharp.Net.CookieCollection"/> that contains the cookies. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.HttpListenerWebSocketContext.Headers"> + <summary> + Gets the HTTP headers included in the request. + </summary> + <value> + A <see cref="T:System.Collections.Specialized.NameValueCollection"/> that contains the headers. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.HttpListenerWebSocketContext.Host"> + <summary> + Gets the value of the Host header included in the request. + </summary> + <value> + A <see cref="T:System.String"/> that represents the value of the Host header. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.HttpListenerWebSocketContext.IsAuthenticated"> + <summary> + Gets a value indicating whether the client is authenticated. + </summary> + <value> + <c>true</c> if the client is authenticated; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.HttpListenerWebSocketContext.IsLocal"> + <summary> + Gets a value indicating whether the client connected from the local computer. + </summary> + <value> + <c>true</c> if the client connected from the local computer; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.HttpListenerWebSocketContext.IsSecureConnection"> + <summary> + Gets a value indicating whether the WebSocket connection is secured. + </summary> + <value> + <c>true</c> if the connection is secured; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.HttpListenerWebSocketContext.IsWebSocketRequest"> + <summary> + Gets a value indicating whether the request is a WebSocket handshake request. + </summary> + <value> + <c>true</c> if the request is a WebSocket handshake request; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.HttpListenerWebSocketContext.Origin"> + <summary> + Gets the value of the Origin header included in the request. + </summary> + <value> + A <see cref="T:System.String"/> that represents the value of the Origin header. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.HttpListenerWebSocketContext.QueryString"> + <summary> + Gets the query string included in the request. + </summary> + <value> + A <see cref="T:System.Collections.Specialized.NameValueCollection"/> that contains the query string parameters. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.HttpListenerWebSocketContext.RequestUri"> + <summary> + Gets the URI requested by the client. + </summary> + <value> + A <see cref="T:System.Uri"/> that represents the requested URI. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.HttpListenerWebSocketContext.SecWebSocketKey"> + <summary> + Gets the value of the Sec-WebSocket-Key header included in the request. + </summary> + <remarks> + This property provides a part of the information used by the server to prove that + it received a valid WebSocket handshake request. + </remarks> + <value> + A <see cref="T:System.String"/> that represents the value of the Sec-WebSocket-Key header. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.HttpListenerWebSocketContext.SecWebSocketProtocols"> + <summary> + Gets the values of the Sec-WebSocket-Protocol header included in the request. + </summary> + <remarks> + This property represents the subprotocols requested by the client. + </remarks> + <value> + An <see cref="T:System.Collections.Generic.IEnumerable{string}"/> instance that provides + an enumerator which supports the iteration over the values of the Sec-WebSocket-Protocol + header. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.HttpListenerWebSocketContext.SecWebSocketVersion"> + <summary> + Gets the value of the Sec-WebSocket-Version header included in the request. + </summary> + <remarks> + This property represents the WebSocket protocol version. + </remarks> + <value> + A <see cref="T:System.String"/> that represents the value of the Sec-WebSocket-Version header. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.HttpListenerWebSocketContext.ServerEndPoint"> + <summary> + Gets the server endpoint as an IP address and a port number. + </summary> + <value> + A <see cref="T:System.Net.IPEndPoint"/> that represents the server endpoint. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.HttpListenerWebSocketContext.User"> + <summary> + Gets the client information (identity, authentication, and security roles). + </summary> + <value> + A <see cref="T:System.Security.Principal.IPrincipal"/> instance that represents the client information. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.HttpListenerWebSocketContext.UserEndPoint"> + <summary> + Gets the client endpoint as an IP address and a port number. + </summary> + <value> + A <see cref="T:System.Net.IPEndPoint"/> that represents the client endpoint. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.HttpListenerWebSocketContext.WebSocket"> + <summary> + Gets the <see cref="T:WebSocketSharp.WebSocket"/> instance used for + two-way communication between client and server. + </summary> + <value> + A <see cref="T:WebSocketSharp.WebSocket"/>. + </value> + </member> + <member name="M:WebSocketSharp.Net.WebSockets.HttpListenerWebSocketContext.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents + the current <see cref="T:WebSocketSharp.Net.WebSockets.HttpListenerWebSocketContext"/>. + </summary> + <returns> + A <see cref="T:System.String"/> that represents + the current <see cref="T:WebSocketSharp.Net.WebSockets.HttpListenerWebSocketContext"/>. + </returns> + </member> + <member name="T:WebSocketSharp.Net.WebSockets.TcpListenerWebSocketContext"> + <summary> + Provides the properties used to access the information in + a WebSocket handshake request received by the <see cref="T:System.Net.Sockets.TcpListener"/>. + </summary> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.TcpListenerWebSocketContext.CookieCollection"> + <summary> + Gets the HTTP cookies included in the request. + </summary> + <value> + A <see cref="T:WebSocketSharp.Net.CookieCollection"/> that contains the cookies. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.TcpListenerWebSocketContext.Headers"> + <summary> + Gets the HTTP headers included in the request. + </summary> + <value> + A <see cref="T:System.Collections.Specialized.NameValueCollection"/> that contains the headers. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.TcpListenerWebSocketContext.Host"> + <summary> + Gets the value of the Host header included in the request. + </summary> + <value> + A <see cref="T:System.String"/> that represents the value of the Host header. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.TcpListenerWebSocketContext.IsAuthenticated"> + <summary> + Gets a value indicating whether the client is authenticated. + </summary> + <value> + <c>true</c> if the client is authenticated; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.TcpListenerWebSocketContext.IsLocal"> + <summary> + Gets a value indicating whether the client connected from the local computer. + </summary> + <value> + <c>true</c> if the client connected from the local computer; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.TcpListenerWebSocketContext.IsSecureConnection"> + <summary> + Gets a value indicating whether the WebSocket connection is secured. + </summary> + <value> + <c>true</c> if the connection is secured; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.TcpListenerWebSocketContext.IsWebSocketRequest"> + <summary> + Gets a value indicating whether the request is a WebSocket handshake request. + </summary> + <value> + <c>true</c> if the request is a WebSocket handshake request; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.TcpListenerWebSocketContext.Origin"> + <summary> + Gets the value of the Origin header included in the request. + </summary> + <value> + A <see cref="T:System.String"/> that represents the value of the Origin header. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.TcpListenerWebSocketContext.QueryString"> + <summary> + Gets the query string included in the request. + </summary> + <value> + A <see cref="T:System.Collections.Specialized.NameValueCollection"/> that contains the query string parameters. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.TcpListenerWebSocketContext.RequestUri"> + <summary> + Gets the URI requested by the client. + </summary> + <value> + A <see cref="T:System.Uri"/> that represents the requested URI. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.TcpListenerWebSocketContext.SecWebSocketKey"> + <summary> + Gets the value of the Sec-WebSocket-Key header included in the request. + </summary> + <remarks> + This property provides a part of the information used by the server to prove that + it received a valid WebSocket handshake request. + </remarks> + <value> + A <see cref="T:System.String"/> that represents the value of the Sec-WebSocket-Key header. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.TcpListenerWebSocketContext.SecWebSocketProtocols"> + <summary> + Gets the values of the Sec-WebSocket-Protocol header included in the request. + </summary> + <remarks> + This property represents the subprotocols requested by the client. + </remarks> + <value> + An <see cref="T:System.Collections.Generic.IEnumerable{string}"/> instance that provides + an enumerator which supports the iteration over the values of the Sec-WebSocket-Protocol + header. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.TcpListenerWebSocketContext.SecWebSocketVersion"> + <summary> + Gets the value of the Sec-WebSocket-Version header included in the request. + </summary> + <remarks> + This property represents the WebSocket protocol version. + </remarks> + <value> + A <see cref="T:System.String"/> that represents the value of the Sec-WebSocket-Version header. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.TcpListenerWebSocketContext.ServerEndPoint"> + <summary> + Gets the server endpoint as an IP address and a port number. + </summary> + <value> + A <see cref="T:System.Net.IPEndPoint"/> that represents the server endpoint. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.TcpListenerWebSocketContext.User"> + <summary> + Gets the client information (identity, authentication, and security roles). + </summary> + <value> + A <see cref="T:System.Security.Principal.IPrincipal"/> instance that represents the client information. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.TcpListenerWebSocketContext.UserEndPoint"> + <summary> + Gets the client endpoint as an IP address and a port number. + </summary> + <value> + A <see cref="T:System.Net.IPEndPoint"/> that represents the client endpoint. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.TcpListenerWebSocketContext.WebSocket"> + <summary> + Gets the <see cref="T:WebSocketSharp.WebSocket"/> instance used for + two-way communication between client and server. + </summary> + <value> + A <see cref="T:WebSocketSharp.WebSocket"/>. + </value> + </member> + <member name="M:WebSocketSharp.Net.WebSockets.TcpListenerWebSocketContext.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents + the current <see cref="T:WebSocketSharp.Net.WebSockets.TcpListenerWebSocketContext"/>. + </summary> + <returns> + A <see cref="T:System.String"/> that represents + the current <see cref="T:WebSocketSharp.Net.WebSockets.TcpListenerWebSocketContext"/>. + </returns> + </member> + <member name="T:WebSocketSharp.Net.WebSockets.WebSocketContext"> + <summary> + Exposes the properties used to access the information in a WebSocket handshake request. + </summary> + <remarks> + This class is an abstract class. + </remarks> + </member> + <member name="M:WebSocketSharp.Net.WebSockets.WebSocketContext.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Net.WebSockets.WebSocketContext"/> class. + </summary> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.WebSocketContext.CookieCollection"> + <summary> + Gets the HTTP cookies included in the request. + </summary> + <value> + A <see cref="T:WebSocketSharp.Net.CookieCollection"/> that contains the cookies. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.WebSocketContext.Headers"> + <summary> + Gets the HTTP headers included in the request. + </summary> + <value> + A <see cref="T:System.Collections.Specialized.NameValueCollection"/> that contains the headers. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.WebSocketContext.Host"> + <summary> + Gets the value of the Host header included in the request. + </summary> + <value> + A <see cref="T:System.String"/> that represents the value of the Host header. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.WebSocketContext.IsAuthenticated"> + <summary> + Gets a value indicating whether the client is authenticated. + </summary> + <value> + <c>true</c> if the client is authenticated; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.WebSocketContext.IsLocal"> + <summary> + Gets a value indicating whether the client connected from the local computer. + </summary> + <value> + <c>true</c> if the client connected from the local computer; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.WebSocketContext.IsSecureConnection"> + <summary> + Gets a value indicating whether the WebSocket connection is secured. + </summary> + <value> + <c>true</c> if the connection is secured; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.WebSocketContext.IsWebSocketRequest"> + <summary> + Gets a value indicating whether the request is a WebSocket handshake request. + </summary> + <value> + <c>true</c> if the request is a WebSocket handshake request; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.WebSocketContext.Origin"> + <summary> + Gets the value of the Origin header included in the request. + </summary> + <value> + A <see cref="T:System.String"/> that represents the value of the Origin header. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.WebSocketContext.QueryString"> + <summary> + Gets the query string included in the request. + </summary> + <value> + A <see cref="T:System.Collections.Specialized.NameValueCollection"/> that contains the query string parameters. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.WebSocketContext.RequestUri"> + <summary> + Gets the URI requested by the client. + </summary> + <value> + A <see cref="T:System.Uri"/> that represents the requested URI. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.WebSocketContext.SecWebSocketKey"> + <summary> + Gets the value of the Sec-WebSocket-Key header included in the request. + </summary> + <remarks> + This property provides a part of the information used by the server to prove that + it received a valid WebSocket handshake request. + </remarks> + <value> + A <see cref="T:System.String"/> that represents the value of the Sec-WebSocket-Key header. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.WebSocketContext.SecWebSocketProtocols"> + <summary> + Gets the values of the Sec-WebSocket-Protocol header included in the request. + </summary> + <remarks> + This property represents the subprotocols requested by the client. + </remarks> + <value> + An <see cref="T:System.Collections.Generic.IEnumerable{string}"/> instance that provides + an enumerator which supports the iteration over the values of the Sec-WebSocket-Protocol + header. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.WebSocketContext.SecWebSocketVersion"> + <summary> + Gets the value of the Sec-WebSocket-Version header included in the request. + </summary> + <remarks> + This property represents the WebSocket protocol version. + </remarks> + <value> + A <see cref="T:System.String"/> that represents the value of the Sec-WebSocket-Version header. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.WebSocketContext.ServerEndPoint"> + <summary> + Gets the server endpoint as an IP address and a port number. + </summary> + <value> + A <see cref="T:System.Net.IPEndPoint"/> that represents the server endpoint. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.WebSocketContext.User"> + <summary> + Gets the client information (identity, authentication, and security roles). + </summary> + <value> + A <see cref="T:System.Security.Principal.IPrincipal"/> instance that represents the client information. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.WebSocketContext.UserEndPoint"> + <summary> + Gets the client endpoint as an IP address and a port number. + </summary> + <value> + A <see cref="T:System.Net.IPEndPoint"/> that represents the client endpoint. + </value> + </member> + <member name="P:WebSocketSharp.Net.WebSockets.WebSocketContext.WebSocket"> + <summary> + Gets the <see cref="T:WebSocketSharp.WebSocket"/> instance used for + two-way communication between client and server. + </summary> + <value> + A <see cref="T:WebSocketSharp.WebSocket"/>. + </value> + </member> + <member name="T:WebSocketSharp.Opcode"> + <summary> + Indicates the WebSocket frame type. + </summary> + <remarks> + The values of this enumeration are defined in + <see href="http://tools.ietf.org/html/rfc6455#section-5.2"> + Section 5.2</see> of RFC 6455. + </remarks> + </member> + <member name="F:WebSocketSharp.Opcode.Cont"> + <summary> + Equivalent to numeric value 0. Indicates continuation frame. + </summary> + </member> + <member name="F:WebSocketSharp.Opcode.Text"> + <summary> + Equivalent to numeric value 1. Indicates text frame. + </summary> + </member> + <member name="F:WebSocketSharp.Opcode.Binary"> + <summary> + Equivalent to numeric value 2. Indicates binary frame. + </summary> + </member> + <member name="F:WebSocketSharp.Opcode.Close"> + <summary> + Equivalent to numeric value 8. Indicates connection close frame. + </summary> + </member> + <member name="F:WebSocketSharp.Opcode.Ping"> + <summary> + Equivalent to numeric value 9. Indicates ping frame. + </summary> + </member> + <member name="F:WebSocketSharp.Opcode.Pong"> + <summary> + Equivalent to numeric value 10. Indicates pong frame. + </summary> + </member> + <member name="F:WebSocketSharp.PayloadData.Empty"> + <summary> + Represents the empty payload data. + </summary> + </member> + <member name="F:WebSocketSharp.PayloadData.MaxLength"> + <summary> + Represents the allowable max length. + </summary> + <remarks> + <para> + A <see cref="T:WebSocketSharp.WebSocketException"/> will occur if the payload data length is + greater than the value of this field. + </para> + <para> + If you would like to change the value, you must set it to a value between + <c>WebSocket.FragmentLength</c> and <c>Int64.MaxValue</c> inclusive. + </para> + </remarks> + </member> + <member name="T:WebSocketSharp.Rsv"> + <summary> + Indicates whether each RSV (RSV1, RSV2, and RSV3) of a WebSocket frame is non-zero. + </summary> + <remarks> + The values of this enumeration are defined in + <see href="http://tools.ietf.org/html/rfc6455#section-5.2">Section 5.2</see> of RFC 6455. + </remarks> + </member> + <member name="F:WebSocketSharp.Rsv.Off"> + <summary> + Equivalent to numeric value 0. Indicates zero. + </summary> + </member> + <member name="F:WebSocketSharp.Rsv.On"> + <summary> + Equivalent to numeric value 1. Indicates non-zero. + </summary> + </member> + <member name="T:WebSocketSharp.Server.HttpRequestEventArgs"> + <summary> + Represents the event data for the HTTP request events of + the <see cref="T:WebSocketSharp.Server.HttpServer"/>. + </summary> + <remarks> + <para> + An HTTP request event occurs when the <see cref="T:WebSocketSharp.Server.HttpServer"/> + receives an HTTP request. + </para> + <para> + You should access the <see cref="P:WebSocketSharp.Server.HttpRequestEventArgs.Request"/> property if you would + like to get the request data sent from a client. + </para> + <para> + And you should access the <see cref="P:WebSocketSharp.Server.HttpRequestEventArgs.Response"/> property if you would + like to get the response data to return to the client. + </para> + </remarks> + </member> + <member name="P:WebSocketSharp.Server.HttpRequestEventArgs.Request"> + <summary> + Gets the request data sent from a client. + </summary> + <value> + A <see cref="T:WebSocketSharp.Net.HttpListenerRequest"/> that provides the methods and + properties for the request data. + </value> + </member> + <member name="P:WebSocketSharp.Server.HttpRequestEventArgs.Response"> + <summary> + Gets the response data to return to the client. + </summary> + <value> + A <see cref="T:WebSocketSharp.Net.HttpListenerResponse"/> that provides the methods and + properties for the response data. + </value> + </member> + <member name="P:WebSocketSharp.Server.HttpRequestEventArgs.User"> + <summary> + Gets the information for the client. + </summary> + <value> + <para> + A <see cref="T:System.Security.Principal.IPrincipal"/> instance or <see langword="null"/> + if not authenticated. + </para> + <para> + That instance describes the identity, authentication scheme, + and security roles for the client. + </para> + </value> + </member> + <member name="M:WebSocketSharp.Server.HttpRequestEventArgs.ReadFile(System.String)"> + <summary> + Reads the specified file from the document folder of + the <see cref="T:WebSocketSharp.Server.HttpServer"/>. + </summary> + <returns> + <para> + An array of <see cref="T:System.Byte"/> or <see langword="null"/> + if it fails. + </para> + <para> + That array receives the contents of the file. + </para> + </returns> + <param name="path"> + A <see cref="T:System.String"/> that represents a virtual path to + find the file from the document folder. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="path"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="path"/> is an empty string. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> contains "..". + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.HttpRequestEventArgs.TryReadFile(System.String,System.Byte[]@)"> + <summary> + Tries to read the specified file from the document folder of + the <see cref="T:WebSocketSharp.Server.HttpServer"/>. + </summary> + <returns> + <c>true</c> if it succeeds to read; otherwise, <c>false</c>. + </returns> + <param name="path"> + A <see cref="T:System.String"/> that represents a virtual path to + find the file from the document folder. + </param> + <param name="contents"> + <para> + When this method returns, an array of <see cref="T:System.Byte"/> or + <see langword="null"/> if it fails. + </para> + <para> + That array receives the contents of the file. + </para> + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="path"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="path"/> is an empty string. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> contains "..". + </para> + </exception> + </member> + <member name="T:WebSocketSharp.Server.HttpServer"> + <summary> + Provides a simple HTTP server that allows to accept + WebSocket handshake requests. + </summary> + <remarks> + This class can provide multiple WebSocket services. + </remarks> + </member> + <member name="M:WebSocketSharp.Server.HttpServer.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Server.HttpServer"/> class. + </summary> + <remarks> + The new instance listens for incoming requests on + <see cref="F:System.Net.IPAddress.Any"/> and port 80. + </remarks> + </member> + <member name="M:WebSocketSharp.Server.HttpServer.#ctor(System.Int32)"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Server.HttpServer"/> class with + the specified <paramref name="port"/>. + </summary> + <remarks> + <para> + The new instance listens for incoming requests on + <see cref="F:System.Net.IPAddress.Any"/> and <paramref name="port"/>. + </para> + <para> + It provides secure connections if <paramref name="port"/> is 443. + </para> + </remarks> + <param name="port"> + An <see cref="T:System.Int32"/> that represents the number of the port + on which to listen. + </param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="port"/> is less than 1 or greater than 65535. + </exception> + </member> + <member name="M:WebSocketSharp.Server.HttpServer.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Server.HttpServer"/> class with + the specified <paramref name="url"/>. + </summary> + <remarks> + <para> + The new instance listens for incoming requests on the IP address of the + host of <paramref name="url"/> and the port of <paramref name="url"/>. + </para> + <para> + Either port 80 or 443 is used if <paramref name="url"/> includes + no port. Port 443 is used if the scheme of <paramref name="url"/> + is https; otherwise, port 80 is used. + </para> + <para> + The new instance provides secure connections if the scheme of + <paramref name="url"/> is https. + </para> + </remarks> + <param name="url"> + A <see cref="T:System.String"/> that represents the HTTP URL of the server. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="url"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="url"/> is empty. + </para> + <para> + -or- + </para> + <para> + <paramref name="url"/> is invalid. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.HttpServer.#ctor(System.Int32,System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Server.HttpServer"/> class with + the specified <paramref name="port"/> and <paramref name="secure"/>. + </summary> + <remarks> + The new instance listens for incoming requests on + <see cref="F:System.Net.IPAddress.Any"/> and <paramref name="port"/>. + </remarks> + <param name="port"> + An <see cref="T:System.Int32"/> that represents the number of the port + on which to listen. + </param> + <param name="secure"> + A <see cref="T:System.Boolean"/>: <c>true</c> if the new instance provides + secure connections; otherwise, <c>false</c>. + </param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="port"/> is less than 1 or greater than 65535. + </exception> + </member> + <member name="M:WebSocketSharp.Server.HttpServer.#ctor(System.Net.IPAddress,System.Int32)"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Server.HttpServer"/> class with + the specified <paramref name="address"/> and <paramref name="port"/>. + </summary> + <remarks> + <para> + The new instance listens for incoming requests on + <paramref name="address"/> and <paramref name="port"/>. + </para> + <para> + It provides secure connections if <paramref name="port"/> is 443. + </para> + </remarks> + <param name="address"> + A <see cref="T:System.Net.IPAddress"/> that represents + the local IP address on which to listen. + </param> + <param name="port"> + An <see cref="T:System.Int32"/> that represents the number of the port + on which to listen. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="address"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="address"/> is not a local IP address. + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="port"/> is less than 1 or greater than 65535. + </exception> + </member> + <member name="M:WebSocketSharp.Server.HttpServer.#ctor(System.Net.IPAddress,System.Int32,System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Server.HttpServer"/> class with + the specified <paramref name="address"/>, <paramref name="port"/>, + and <paramref name="secure"/>. + </summary> + <remarks> + The new instance listens for incoming requests on + <paramref name="address"/> and <paramref name="port"/>. + </remarks> + <param name="address"> + A <see cref="T:System.Net.IPAddress"/> that represents + the local IP address on which to listen. + </param> + <param name="port"> + An <see cref="T:System.Int32"/> that represents the number of the port + on which to listen. + </param> + <param name="secure"> + A <see cref="T:System.Boolean"/>: <c>true</c> if the new instance provides + secure connections; otherwise, <c>false</c>. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="address"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="address"/> is not a local IP address. + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="port"/> is less than 1 or greater than 65535. + </exception> + </member> + <member name="P:WebSocketSharp.Server.HttpServer.Address"> + <summary> + Gets the IP address of the server. + </summary> + <value> + A <see cref="T:System.Net.IPAddress"/> that represents the local + IP address on which to listen for incoming requests. + </value> + </member> + <member name="P:WebSocketSharp.Server.HttpServer.AuthenticationSchemes"> + <summary> + Gets or sets the scheme used to authenticate the clients. + </summary> + <remarks> + The set operation does nothing if the server has already + started or it is shutting down. + </remarks> + <value> + <para> + One of the <see cref="T:WebSocketSharp.Net.AuthenticationSchemes"/> + enum values. + </para> + <para> + It represents the scheme used to authenticate the clients. + </para> + <para> + The default value is + <see cref="F:WebSocketSharp.Net.AuthenticationSchemes.Anonymous"/>. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Server.HttpServer.DocumentRootPath"> + <summary> + Gets or sets the path to the document folder of the server. + </summary> + <remarks> + <para> + '/' or '\' is trimmed from the end of the value if any. + </para> + <para> + The set operation does nothing if the server has already + started or it is shutting down. + </para> + </remarks> + <value> + <para> + A <see cref="T:System.String"/> that represents a path to the folder + from which to find the requested file. + </para> + <para> + The default value is "./Public". + </para> + </value> + <exception cref="T:System.ArgumentNullException"> + The value specified for a set operation is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + The value specified for a set operation is an empty string. + </para> + <para> + -or- + </para> + <para> + The value specified for a set operation is an invalid path string. + </para> + <para> + -or- + </para> + <para> + The value specified for a set operation is an absolute root. + </para> + </exception> + </member> + <member name="P:WebSocketSharp.Server.HttpServer.IsListening"> + <summary> + Gets a value indicating whether the server has started. + </summary> + <value> + <c>true</c> if the server has started; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Server.HttpServer.IsSecure"> + <summary> + Gets a value indicating whether the server provides + secure connections. + </summary> + <value> + <c>true</c> if the server provides secure connections; + otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Server.HttpServer.KeepClean"> + <summary> + Gets or sets a value indicating whether the server cleans up + the inactive sessions periodically. + </summary> + <remarks> + The set operation does nothing if the server has already + started or it is shutting down. + </remarks> + <value> + <para> + <c>true</c> if the server cleans up the inactive sessions + every 60 seconds; otherwise, <c>false</c>. + </para> + <para> + The default value is <c>true</c>. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Server.HttpServer.Log"> + <summary> + Gets the logging function for the server. + </summary> + <remarks> + The default logging level is <see cref="F:WebSocketSharp.LogLevel.Error"/>. + </remarks> + <value> + A <see cref="T:WebSocketSharp.Logger"/> that provides the logging function. + </value> + </member> + <member name="P:WebSocketSharp.Server.HttpServer.Port"> + <summary> + Gets the port of the server. + </summary> + <value> + An <see cref="T:System.Int32"/> that represents the number of the port + on which to listen for incoming requests. + </value> + </member> + <member name="P:WebSocketSharp.Server.HttpServer.Realm"> + <summary> + Gets or sets the realm used for authentication. + </summary> + <remarks> + <para> + "SECRET AREA" is used as the realm if the value is + <see langword="null"/> or an empty string. + </para> + <para> + The set operation does nothing if the server has + already started or it is shutting down. + </para> + </remarks> + <value> + <para> + A <see cref="T:System.String"/> or <see langword="null"/> by default. + </para> + <para> + That string represents the name of the realm. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Server.HttpServer.ReuseAddress"> + <summary> + Gets or sets a value indicating whether the server is allowed to + be bound to an address that is already in use. + </summary> + <remarks> + <para> + You should set this property to <c>true</c> if you would + like to resolve to wait for socket in TIME_WAIT state. + </para> + <para> + The set operation does nothing if the server has already + started or it is shutting down. + </para> + </remarks> + <value> + <para> + <c>true</c> if the server is allowed to be bound to an address + that is already in use; otherwise, <c>false</c>. + </para> + <para> + The default value is <c>false</c>. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Server.HttpServer.SslConfiguration"> + <summary> + Gets the configuration for secure connections. + </summary> + <remarks> + This configuration will be referenced when attempts to start, + so it must be configured before the start method is called. + </remarks> + <value> + A <see cref="T:WebSocketSharp.Net.ServerSslConfiguration"/> that represents + the configuration used to provide secure connections. + </value> + <exception cref="T:System.InvalidOperationException"> + This instance does not provide secure connections. + </exception> + </member> + <member name="P:WebSocketSharp.Server.HttpServer.UserCredentialsFinder"> + <summary> + Gets or sets the delegate used to find the credentials + for an identity. + </summary> + <remarks> + <para> + No credentials are found if the method invoked by + the delegate returns <see langword="null"/> or + the value is <see langword="null"/>. + </para> + <para> + The set operation does nothing if the server has + already started or it is shutting down. + </para> + </remarks> + <value> + <para> + A <c>Func<<see cref="T:System.Security.Principal.IIdentity"/>, + <see cref="T:WebSocketSharp.Net.NetworkCredential"/>></c> delegate or + <see langword="null"/> if not needed. + </para> + <para> + That delegate invokes the method called for finding + the credentials used to authenticate a client. + </para> + <para> + The default value is <see langword="null"/>. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Server.HttpServer.WaitTime"> + <summary> + Gets or sets the time to wait for the response to the WebSocket Ping or + Close. + </summary> + <remarks> + The set operation does nothing if the server has already started or + it is shutting down. + </remarks> + <value> + <para> + A <see cref="T:System.TimeSpan"/> to wait for the response. + </para> + <para> + The default value is the same as 1 second. + </para> + </value> + <exception cref="T:System.ArgumentOutOfRangeException"> + The value specified for a set operation is zero or less. + </exception> + </member> + <member name="P:WebSocketSharp.Server.HttpServer.WebSocketServices"> + <summary> + Gets the management function for the WebSocket services + provided by the server. + </summary> + <value> + A <see cref="T:WebSocketSharp.Server.WebSocketServiceManager"/> that manages + the WebSocket services provided by the server. + </value> + </member> + <member name="E:WebSocketSharp.Server.HttpServer.OnConnect"> + <summary> + Occurs when the server receives an HTTP CONNECT request. + </summary> + </member> + <member name="E:WebSocketSharp.Server.HttpServer.OnDelete"> + <summary> + Occurs when the server receives an HTTP DELETE request. + </summary> + </member> + <member name="E:WebSocketSharp.Server.HttpServer.OnGet"> + <summary> + Occurs when the server receives an HTTP GET request. + </summary> + </member> + <member name="E:WebSocketSharp.Server.HttpServer.OnHead"> + <summary> + Occurs when the server receives an HTTP HEAD request. + </summary> + </member> + <member name="E:WebSocketSharp.Server.HttpServer.OnOptions"> + <summary> + Occurs when the server receives an HTTP OPTIONS request. + </summary> + </member> + <member name="E:WebSocketSharp.Server.HttpServer.OnPatch"> + <summary> + Occurs when the server receives an HTTP PATCH request. + </summary> + </member> + <member name="E:WebSocketSharp.Server.HttpServer.OnPost"> + <summary> + Occurs when the server receives an HTTP POST request. + </summary> + </member> + <member name="E:WebSocketSharp.Server.HttpServer.OnPut"> + <summary> + Occurs when the server receives an HTTP PUT request. + </summary> + </member> + <member name="E:WebSocketSharp.Server.HttpServer.OnTrace"> + <summary> + Occurs when the server receives an HTTP TRACE request. + </summary> + </member> + <member name="M:WebSocketSharp.Server.HttpServer.AddWebSocketService``1(System.String,System.Func{``0})"> + <summary> + Adds a WebSocket service with the specified behavior, + <paramref name="path"/>, and <paramref name="creator"/>. + </summary> + <remarks> + <paramref name="path"/> is converted to a URL-decoded string and + '/' is trimmed from the end of the converted string if any. + </remarks> + <param name="path"> + A <see cref="T:System.String"/> that represents an absolute path to + the service to add. + </param> + <param name="creator"> + <para> + A <c>Func<TBehavior></c> delegate. + </para> + <para> + It invokes the method called for creating + a new session instance for the service. + </para> + <para> + The method must create a new instance of + the specified behavior class and return it. + </para> + </param> + <typeparam name="TBehavior"> + <para> + The type of the behavior for the service. + </para> + <para> + It must inherit the <see cref="T:WebSocketSharp.Server.WebSocketBehavior"/> class. + </para> + </typeparam> + <exception cref="T:System.ArgumentNullException"> + <para> + <paramref name="path"/> is <see langword="null"/>. + </para> + <para> + -or- + </para> + <para> + <paramref name="creator"/> is <see langword="null"/>. + </para> + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="path"/> is an empty string. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> is not an absolute path. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> includes either or both + query and fragment components. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> is already in use. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.HttpServer.AddWebSocketService``1(System.String)"> + <summary> + Adds a WebSocket service with the specified behavior and + <paramref name="path"/>. + </summary> + <remarks> + <paramref name="path"/> is converted to a URL-decoded string and + '/' is trimmed from the end of the converted string if any. + </remarks> + <param name="path"> + A <see cref="T:System.String"/> that represents an absolute path to + the service to add. + </param> + <typeparam name="TBehaviorWithNew"> + <para> + The type of the behavior for the service. + </para> + <para> + It must inherit the <see cref="T:WebSocketSharp.Server.WebSocketBehavior"/> class and + must have a public parameterless constructor. + </para> + </typeparam> + <exception cref="T:System.ArgumentNullException"> + <paramref name="path"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="path"/> is an empty string. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> is not an absolute path. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> includes either or both + query and fragment components. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> is already in use. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.HttpServer.AddWebSocketService``1(System.String,System.Action{``0})"> + <summary> + Adds a WebSocket service with the specified behavior, + <paramref name="path"/>, and <paramref name="initializer"/>. + </summary> + <remarks> + <paramref name="path"/> is converted to a URL-decoded string and + '/' is trimmed from the end of the converted string if any. + </remarks> + <param name="path"> + A <see cref="T:System.String"/> that represents an absolute path to + the service to add. + </param> + <param name="initializer"> + <para> + An <c>Action<TBehaviorWithNew></c> delegate or + <see langword="null"/> if not needed. + </para> + <para> + That delegate invokes the method called for initializing + a new session instance for the service. + </para> + </param> + <typeparam name="TBehaviorWithNew"> + <para> + The type of the behavior for the service. + </para> + <para> + It must inherit the <see cref="T:WebSocketSharp.Server.WebSocketBehavior"/> class and + must have a public parameterless constructor. + </para> + </typeparam> + <exception cref="T:System.ArgumentNullException"> + <paramref name="path"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="path"/> is an empty string. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> is not an absolute path. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> includes either or both + query and fragment components. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> is already in use. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.HttpServer.GetFile(System.String)"> + <summary> + Gets the contents of the specified file from the document + folder of the server. + </summary> + <returns> + <para> + An array of <see cref="T:System.Byte"/> or <see langword="null"/> + if it fails. + </para> + <para> + That array represents the contents of the file. + </para> + </returns> + <param name="path"> + A <see cref="T:System.String"/> that represents a virtual path to + find the file from the document folder. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="path"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="path"/> is an empty string. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> contains "..". + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.HttpServer.RemoveWebSocketService(System.String)"> + <summary> + Removes a WebSocket service with the specified <paramref name="path"/>. + </summary> + <remarks> + <para> + <paramref name="path"/> is converted to a URL-decoded string and + '/' is trimmed from the end of the converted string if any. + </para> + <para> + The service is stopped with close status 1001 (going away) + if it has already started. + </para> + </remarks> + <returns> + <c>true</c> if the service is successfully found and removed; + otherwise, <c>false</c>. + </returns> + <param name="path"> + A <see cref="T:System.String"/> that represents an absolute path to + the service to remove. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="path"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="path"/> is an empty string. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> is not an absolute path. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> includes either or both + query and fragment components. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.HttpServer.Start"> + <summary> + Starts receiving incoming requests. + </summary> + <remarks> + This method does nothing if the server has already started or + it is shutting down. + </remarks> + <exception cref="T:System.InvalidOperationException"> + <para> + There is no server certificate for secure connections. + </para> + <para> + -or- + </para> + <para> + The underlying <see cref="T:WebSocketSharp.Net.HttpListener"/> has failed to start. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.HttpServer.Stop"> + <summary> + Stops receiving incoming requests and closes each connection. + </summary> + <remarks> + This method does nothing if the server is not started, + it is shutting down, or it has already stopped. + </remarks> + </member> + <member name="M:WebSocketSharp.Server.HttpServer.Stop(System.UInt16,System.String)"> + <summary> + Stops receiving incoming requests and closes each connection. + </summary> + <remarks> + This method does nothing if the server is not started, + it is shutting down, or it has already stopped. + </remarks> + <param name="code"> + <para> + A <see cref="T:System.UInt16"/> that represents the status code + indicating the reason for the WebSocket connection close. + </para> + <para> + The status codes are defined in + <see href="http://tools.ietf.org/html/rfc6455#section-7.4"> + Section 7.4</see> of RFC 6455. + </para> + </param> + <param name="reason"> + <para> + A <see cref="T:System.String"/> that represents the reason for + the WebSocket connection close. + </para> + <para> + The size must be 123 bytes or less in UTF-8. + </para> + </param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <para> + <paramref name="code"/> is less than 1000 or greater than 4999. + </para> + <para> + -or- + </para> + <para> + The size of <paramref name="reason"/> is greater than 123 bytes. + </para> + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="code"/> is 1010 (mandatory extension). + </para> + <para> + -or- + </para> + <para> + <paramref name="code"/> is 1005 (no status) and + there is <paramref name="reason"/>. + </para> + <para> + -or- + </para> + <para> + <paramref name="reason"/> could not be UTF-8-encoded. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.HttpServer.Stop(WebSocketSharp.CloseStatusCode,System.String)"> + <summary> + Stops receiving incoming requests and closes each connection. + </summary> + <remarks> + This method does nothing if the server is not started, + it is shutting down, or it has already stopped. + </remarks> + <param name="code"> + <para> + One of the <see cref="T:WebSocketSharp.CloseStatusCode"/> enum values. + </para> + <para> + It represents the status code indicating the reason for + the WebSocket connection close. + </para> + </param> + <param name="reason"> + <para> + A <see cref="T:System.String"/> that represents the reason for + the WebSocket connection close. + </para> + <para> + The size must be 123 bytes or less in UTF-8. + </para> + </param> + <exception cref="T:System.ArgumentOutOfRangeException"> + The size of <paramref name="reason"/> is greater than 123 bytes. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="code"/> is + <see cref="F:WebSocketSharp.CloseStatusCode.MandatoryExtension"/>. + </para> + <para> + -or- + </para> + <para> + <paramref name="code"/> is + <see cref="F:WebSocketSharp.CloseStatusCode.NoStatus"/> and + there is <paramref name="reason"/>. + </para> + <para> + -or- + </para> + <para> + <paramref name="reason"/> could not be UTF-8-encoded. + </para> + </exception> + </member> + <member name="T:WebSocketSharp.Server.IWebSocketSession"> + <summary> + Exposes the properties used to access the information in a session in a WebSocket service. + </summary> + </member> + <member name="P:WebSocketSharp.Server.IWebSocketSession.Context"> + <summary> + Gets the information in the connection request to the WebSocket service. + </summary> + <value> + A <see cref="T:WebSocketSharp.Net.WebSockets.WebSocketContext"/> that provides the access to the connection request. + </value> + </member> + <member name="P:WebSocketSharp.Server.IWebSocketSession.ID"> + <summary> + Gets the unique ID of the session. + </summary> + <value> + A <see cref="T:System.String"/> that represents the unique ID of the session. + </value> + </member> + <member name="P:WebSocketSharp.Server.IWebSocketSession.Protocol"> + <summary> + Gets the WebSocket subprotocol used in the session. + </summary> + <value> + A <see cref="T:System.String"/> that represents the subprotocol if any. + </value> + </member> + <member name="P:WebSocketSharp.Server.IWebSocketSession.StartTime"> + <summary> + Gets the time that the session has started. + </summary> + <value> + A <see cref="T:System.DateTime"/> that represents the time that the session has started. + </value> + </member> + <member name="P:WebSocketSharp.Server.IWebSocketSession.State"> + <summary> + Gets the state of the <see cref="T:WebSocketSharp.WebSocket"/> used in the session. + </summary> + <value> + One of the <see cref="T:WebSocketSharp.WebSocketState"/> enum values, indicates the state of + the <see cref="T:WebSocketSharp.WebSocket"/> used in the session. + </value> + </member> + <member name="T:WebSocketSharp.Server.WebSocketBehavior"> + <summary> + Exposes the methods and properties used to define the behavior of a WebSocket service + provided by the <see cref="T:WebSocketSharp.Server.WebSocketServer"/> or <see cref="T:WebSocketSharp.Server.HttpServer"/>. + </summary> + <remarks> + The WebSocketBehavior class is an abstract class. + </remarks> + </member> + <member name="M:WebSocketSharp.Server.WebSocketBehavior.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Server.WebSocketBehavior"/> class. + </summary> + </member> + <member name="P:WebSocketSharp.Server.WebSocketBehavior.Log"> + <summary> + Gets the logging functions. + </summary> + <value> + A <see cref="T:WebSocketSharp.Logger"/> that provides the logging functions, + or <see langword="null"/> if the WebSocket connection isn't established. + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketBehavior.Sessions"> + <summary> + Gets the access to the sessions in the WebSocket service. + </summary> + <value> + A <see cref="T:WebSocketSharp.Server.WebSocketSessionManager"/> that provides the access to the sessions, + or <see langword="null"/> if the WebSocket connection isn't established. + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketBehavior.Context"> + <summary> + Gets the information in a handshake request to the WebSocket service. + </summary> + <value> + A <see cref="T:WebSocketSharp.Net.WebSockets.WebSocketContext"/> instance that provides the access to the handshake request, + or <see langword="null"/> if the WebSocket connection isn't established. + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketBehavior.CookiesValidator"> + <summary> + Gets or sets the delegate called to validate the HTTP cookies included in + a handshake request to the WebSocket service. + </summary> + <remarks> + This delegate is called when the <see cref="T:WebSocketSharp.WebSocket"/> used in a session validates + the handshake request. + </remarks> + <value> + <para> + A <c>Func<CookieCollection, CookieCollection, bool></c> delegate that references + the method(s) used to validate the cookies. + </para> + <para> + 1st <see cref="T:WebSocketSharp.Net.CookieCollection"/> parameter passed to this delegate contains + the cookies to validate if any. + </para> + <para> + 2nd <see cref="T:WebSocketSharp.Net.CookieCollection"/> parameter passed to this delegate receives + the cookies to send to the client. + </para> + <para> + This delegate should return <c>true</c> if the cookies are valid. + </para> + <para> + The default value is <see langword="null"/>, and it does nothing to validate. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketBehavior.EmitOnPing"> + <summary> + Gets or sets a value indicating whether the <see cref="T:WebSocketSharp.WebSocket"/> used in a session emits + a <see cref="E:WebSocketSharp.WebSocket.OnMessage"/> event when receives a Ping. + </summary> + <value> + <c>true</c> if the <see cref="T:WebSocketSharp.WebSocket"/> emits a <see cref="E:WebSocketSharp.WebSocket.OnMessage"/> event + when receives a Ping; otherwise, <c>false</c>. The default value is <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketBehavior.ID"> + <summary> + Gets the unique ID of a session. + </summary> + <value> + A <see cref="T:System.String"/> that represents the unique ID of the session, + or <see langword="null"/> if the WebSocket connection isn't established. + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketBehavior.IgnoreExtensions"> + <summary> + Gets or sets a value indicating whether the WebSocket service ignores + the Sec-WebSocket-Extensions header included in a handshake request. + </summary> + <value> + <c>true</c> if the WebSocket service ignores the extensions requested from + a client; otherwise, <c>false</c>. The default value is <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketBehavior.OriginValidator"> + <summary> + Gets or sets the delegate called to validate the Origin header included in + a handshake request to the WebSocket service. + </summary> + <remarks> + This delegate is called when the <see cref="T:WebSocketSharp.WebSocket"/> used in a session validates + the handshake request. + </remarks> + <value> + <para> + A <c>Func<string, bool></c> delegate that references the method(s) used to + validate the origin header. + </para> + <para> + <see cref="T:System.String"/> parameter passed to this delegate represents the value of + the origin header to validate if any. + </para> + <para> + This delegate should return <c>true</c> if the origin header is valid. + </para> + <para> + The default value is <see langword="null"/>, and it does nothing to validate. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketBehavior.Protocol"> + <summary> + Gets or sets the WebSocket subprotocol used in the WebSocket service. + </summary> + <remarks> + Set operation of this property is available before the WebSocket connection has + been established. + </remarks> + <value> + <para> + A <see cref="T:System.String"/> that represents the subprotocol if any. + The default value is <see cref="F:System.String.Empty"/>. + </para> + <para> + The value to set must be a token defined in + <see href="http://tools.ietf.org/html/rfc2616#section-2.2">RFC 2616</see>. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketBehavior.StartTime"> + <summary> + Gets the time that a session has started. + </summary> + <value> + A <see cref="T:System.DateTime"/> that represents the time that the session has started, + or <see cref="F:System.DateTime.MaxValue"/> if the WebSocket connection isn't established. + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketBehavior.State"> + <summary> + Gets the state of the <see cref="T:WebSocketSharp.WebSocket"/> used in a session. + </summary> + <value> + One of the <see cref="T:WebSocketSharp.WebSocketState"/> enum values, indicates the state of + the <see cref="T:WebSocketSharp.WebSocket"/>. + </value> + </member> + <member name="M:WebSocketSharp.Server.WebSocketBehavior.Error(System.String,System.Exception)"> + <summary> + Calls the <see cref="M:WebSocketSharp.Server.WebSocketBehavior.OnError(WebSocketSharp.ErrorEventArgs)"/> method with the specified <paramref name="message"/> and + <paramref name="exception"/>. + </summary> + <remarks> + This method doesn't call the <see cref="M:WebSocketSharp.Server.WebSocketBehavior.OnError(WebSocketSharp.ErrorEventArgs)"/> method if <paramref name="message"/> is + <see langword="null"/> or empty. + </remarks> + <param name="message"> + A <see cref="T:System.String"/> that represents the error message. + </param> + <param name="exception"> + An <see cref="T:System.Exception"/> instance that represents the cause of the error if any. + </param> + </member> + <member name="M:WebSocketSharp.Server.WebSocketBehavior.OnClose(WebSocketSharp.CloseEventArgs)"> + <summary> + Called when the WebSocket connection used in a session has been closed. + </summary> + <param name="e"> + A <see cref="T:WebSocketSharp.CloseEventArgs"/> that represents the event data passed to + a <see cref="E:WebSocketSharp.WebSocket.OnClose"/> event. + </param> + </member> + <member name="M:WebSocketSharp.Server.WebSocketBehavior.OnError(WebSocketSharp.ErrorEventArgs)"> + <summary> + Called when the <see cref="T:WebSocketSharp.WebSocket"/> used in a session gets an error. + </summary> + <param name="e"> + A <see cref="T:WebSocketSharp.ErrorEventArgs"/> that represents the event data passed to + a <see cref="E:WebSocketSharp.WebSocket.OnError"/> event. + </param> + </member> + <member name="M:WebSocketSharp.Server.WebSocketBehavior.OnMessage(WebSocketSharp.MessageEventArgs)"> + <summary> + Called when the <see cref="T:WebSocketSharp.WebSocket"/> used in a session receives a message. + </summary> + <param name="e"> + A <see cref="T:WebSocketSharp.MessageEventArgs"/> that represents the event data passed to + a <see cref="E:WebSocketSharp.WebSocket.OnMessage"/> event. + </param> + </member> + <member name="M:WebSocketSharp.Server.WebSocketBehavior.OnOpen"> + <summary> + Called when the WebSocket connection used in a session has been established. + </summary> + </member> + <member name="M:WebSocketSharp.Server.WebSocketBehavior.Send(System.Byte[])"> + <summary> + Sends binary <paramref name="data"/> to the client on a session. + </summary> + <remarks> + This method is available after the WebSocket connection has been established. + </remarks> + <param name="data"> + An array of <see cref="T:System.Byte"/> that represents the binary data to send. + </param> + </member> + <member name="M:WebSocketSharp.Server.WebSocketBehavior.Send(System.IO.FileInfo)"> + <summary> + Sends the specified <paramref name="file"/> as binary data to the client on a session. + </summary> + <remarks> + This method is available after the WebSocket connection has been established. + </remarks> + <param name="file"> + A <see cref="T:System.IO.FileInfo"/> that represents the file to send. + </param> + </member> + <member name="M:WebSocketSharp.Server.WebSocketBehavior.Send(System.String)"> + <summary> + Sends text <paramref name="data"/> to the client on a session. + </summary> + <remarks> + This method is available after the WebSocket connection has been established. + </remarks> + <param name="data"> + A <see cref="T:System.String"/> that represents the text data to send. + </param> + </member> + <member name="M:WebSocketSharp.Server.WebSocketBehavior.SendAsync(System.Byte[],System.Action{System.Boolean})"> + <summary> + Sends binary <paramref name="data"/> asynchronously to the client on a session. + </summary> + <remarks> + <para> + This method is available after the WebSocket connection has been established. + </para> + <para> + This method doesn't wait for the send to be complete. + </para> + </remarks> + <param name="data"> + An array of <see cref="T:System.Byte"/> that represents the binary data to send. + </param> + <param name="completed"> + An <c>Action<bool></c> delegate that references the method(s) called when + the send is complete. A <see cref="T:System.Boolean"/> passed to this delegate is <c>true</c> + if the send is complete successfully. + </param> + </member> + <member name="M:WebSocketSharp.Server.WebSocketBehavior.SendAsync(System.IO.FileInfo,System.Action{System.Boolean})"> + <summary> + Sends the specified <paramref name="file"/> as binary data asynchronously to + the client on a session. + </summary> + <remarks> + <para> + This method is available after the WebSocket connection has been established. + </para> + <para> + This method doesn't wait for the send to be complete. + </para> + </remarks> + <param name="file"> + A <see cref="T:System.IO.FileInfo"/> that represents the file to send. + </param> + <param name="completed"> + An <c>Action<bool></c> delegate that references the method(s) called when + the send is complete. A <see cref="T:System.Boolean"/> passed to this delegate is <c>true</c> + if the send is complete successfully. + </param> + </member> + <member name="M:WebSocketSharp.Server.WebSocketBehavior.SendAsync(System.String,System.Action{System.Boolean})"> + <summary> + Sends text <paramref name="data"/> asynchronously to the client on a session. + </summary> + <remarks> + <para> + This method is available after the WebSocket connection has been established. + </para> + <para> + This method doesn't wait for the send to be complete. + </para> + </remarks> + <param name="data"> + A <see cref="T:System.String"/> that represents the text data to send. + </param> + <param name="completed"> + An <c>Action<bool></c> delegate that references the method(s) called when + the send is complete. A <see cref="T:System.Boolean"/> passed to this delegate is <c>true</c> + if the send is complete successfully. + </param> + </member> + <member name="M:WebSocketSharp.Server.WebSocketBehavior.SendAsync(System.IO.Stream,System.Int32,System.Action{System.Boolean})"> + <summary> + Sends binary data from the specified <see cref="T:System.IO.Stream"/> asynchronously to + the client on a session. + </summary> + <remarks> + <para> + This method is available after the WebSocket connection has been established. + </para> + <para> + This method doesn't wait for the send to be complete. + </para> + </remarks> + <param name="stream"> + A <see cref="T:System.IO.Stream"/> from which contains the binary data to send. + </param> + <param name="length"> + An <see cref="T:System.Int32"/> that represents the number of bytes to send. + </param> + <param name="completed"> + An <c>Action<bool></c> delegate that references the method(s) called when + the send is complete. A <see cref="T:System.Boolean"/> passed to this delegate is <c>true</c> + if the send is complete successfully. + </param> + </member> + <member name="T:WebSocketSharp.Server.WebSocketServer"> + <summary> + Provides a WebSocket protocol server. + </summary> + <remarks> + This class can provide multiple WebSocket services. + </remarks> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServer.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Server.WebSocketServer"/> class. + </summary> + <remarks> + The new instance listens for incoming handshake requests on + <see cref="F:System.Net.IPAddress.Any"/> and port 80. + </remarks> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServer.#ctor(System.Int32)"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Server.WebSocketServer"/> class + with the specified <paramref name="port"/>. + </summary> + <remarks> + <para> + The new instance listens for incoming handshake requests on + <see cref="F:System.Net.IPAddress.Any"/> and <paramref name="port"/>. + </para> + <para> + It provides secure connections if <paramref name="port"/> is 443. + </para> + </remarks> + <param name="port"> + An <see cref="T:System.Int32"/> that represents the number of the port + on which to listen. + </param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="port"/> is less than 1 or greater than 65535. + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServer.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Server.WebSocketServer"/> class + with the specified <paramref name="url"/>. + </summary> + <remarks> + <para> + The new instance listens for incoming handshake requests on + the IP address of the host of <paramref name="url"/> and + the port of <paramref name="url"/>. + </para> + <para> + Either port 80 or 443 is used if <paramref name="url"/> includes + no port. Port 443 is used if the scheme of <paramref name="url"/> + is wss; otherwise, port 80 is used. + </para> + <para> + The new instance provides secure connections if the scheme of + <paramref name="url"/> is wss. + </para> + </remarks> + <param name="url"> + A <see cref="T:System.String"/> that represents the WebSocket URL of the server. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="url"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="url"/> is an empty string. + </para> + <para> + -or- + </para> + <para> + <paramref name="url"/> is invalid. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServer.#ctor(System.Int32,System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Server.WebSocketServer"/> class + with the specified <paramref name="port"/> and <paramref name="secure"/>. + </summary> + <remarks> + The new instance listens for incoming handshake requests on + <see cref="F:System.Net.IPAddress.Any"/> and <paramref name="port"/>. + </remarks> + <param name="port"> + An <see cref="T:System.Int32"/> that represents the number of the port + on which to listen. + </param> + <param name="secure"> + A <see cref="T:System.Boolean"/>: <c>true</c> if the new instance provides + secure connections; otherwise, <c>false</c>. + </param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="port"/> is less than 1 or greater than 65535. + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServer.#ctor(System.Net.IPAddress,System.Int32)"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Server.WebSocketServer"/> class + with the specified <paramref name="address"/> and <paramref name="port"/>. + </summary> + <remarks> + <para> + The new instance listens for incoming handshake requests on + <paramref name="address"/> and <paramref name="port"/>. + </para> + <para> + It provides secure connections if <paramref name="port"/> is 443. + </para> + </remarks> + <param name="address"> + A <see cref="T:System.Net.IPAddress"/> that represents the local + IP address on which to listen. + </param> + <param name="port"> + An <see cref="T:System.Int32"/> that represents the number of the port + on which to listen. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="address"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="address"/> is not a local IP address. + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="port"/> is less than 1 or greater than 65535. + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServer.#ctor(System.Net.IPAddress,System.Int32,System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Server.WebSocketServer"/> class + with the specified <paramref name="address"/>, <paramref name="port"/>, + and <paramref name="secure"/>. + </summary> + <remarks> + The new instance listens for incoming handshake requests on + <paramref name="address"/> and <paramref name="port"/>. + </remarks> + <param name="address"> + A <see cref="T:System.Net.IPAddress"/> that represents the local + IP address on which to listen. + </param> + <param name="port"> + An <see cref="T:System.Int32"/> that represents the number of the port + on which to listen. + </param> + <param name="secure"> + A <see cref="T:System.Boolean"/>: <c>true</c> if the new instance provides + secure connections; otherwise, <c>false</c>. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="address"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="address"/> is not a local IP address. + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="port"/> is less than 1 or greater than 65535. + </exception> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServer.Address"> + <summary> + Gets the IP address of the server. + </summary> + <value> + A <see cref="T:System.Net.IPAddress"/> that represents the local + IP address on which to listen for incoming handshake requests. + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServer.AllowForwardedRequest"> + <summary> + Gets or sets a value indicating whether the server accepts every + handshake request without checking the request URI. + </summary> + <remarks> + The set operation does nothing if the server has already started or + it is shutting down. + </remarks> + <value> + <para> + <c>true</c> if the server accepts every handshake request without + checking the request URI; otherwise, <c>false</c>. + </para> + <para> + The default value is <c>false</c>. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServer.AuthenticationSchemes"> + <summary> + Gets or sets the scheme used to authenticate the clients. + </summary> + <remarks> + The set operation does nothing if the server has already started or + it is shutting down. + </remarks> + <value> + <para> + One of the <see cref="T:WebSocketSharp.Net.AuthenticationSchemes"/> + enum values. + </para> + <para> + It represents the scheme used to authenticate the clients. + </para> + <para> + The default value is + <see cref="F:WebSocketSharp.Net.AuthenticationSchemes.Anonymous"/>. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServer.IsListening"> + <summary> + Gets a value indicating whether the server has started. + </summary> + <value> + <c>true</c> if the server has started; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServer.IsSecure"> + <summary> + Gets a value indicating whether the server provides + secure connections. + </summary> + <value> + <c>true</c> if the server provides secure connections; + otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServer.KeepClean"> + <summary> + Gets or sets a value indicating whether the server cleans up + the inactive sessions periodically. + </summary> + <remarks> + The set operation does nothing if the server has already started or + it is shutting down. + </remarks> + <value> + <para> + <c>true</c> if the server cleans up the inactive sessions every + 60 seconds; otherwise, <c>false</c>. + </para> + <para> + The default value is <c>true</c>. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServer.Log"> + <summary> + Gets the logging function for the server. + </summary> + <remarks> + The default logging level is <see cref="F:WebSocketSharp.LogLevel.Error"/>. + </remarks> + <value> + A <see cref="T:WebSocketSharp.Logger"/> that provides the logging function. + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServer.Port"> + <summary> + Gets the port of the server. + </summary> + <value> + An <see cref="T:System.Int32"/> that represents the number of the port + on which to listen for incoming handshake requests. + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServer.Realm"> + <summary> + Gets or sets the realm used for authentication. + </summary> + <remarks> + <para> + "SECRET AREA" is used as the realm if the value is + <see langword="null"/> or an empty string. + </para> + <para> + The set operation does nothing if the server has + already started or it is shutting down. + </para> + </remarks> + <value> + <para> + A <see cref="T:System.String"/> or <see langword="null"/> by default. + </para> + <para> + That string represents the name of the realm. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServer.ReuseAddress"> + <summary> + Gets or sets a value indicating whether the server is allowed to + be bound to an address that is already in use. + </summary> + <remarks> + <para> + You should set this property to <c>true</c> if you would + like to resolve to wait for socket in TIME_WAIT state. + </para> + <para> + The set operation does nothing if the server has already + started or it is shutting down. + </para> + </remarks> + <value> + <para> + <c>true</c> if the server is allowed to be bound to an address + that is already in use; otherwise, <c>false</c>. + </para> + <para> + The default value is <c>false</c>. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServer.SslConfiguration"> + <summary> + Gets the configuration for secure connections. + </summary> + <remarks> + This configuration will be referenced when attempts to start, + so it must be configured before the start method is called. + </remarks> + <value> + A <see cref="T:WebSocketSharp.Net.ServerSslConfiguration"/> that represents + the configuration used to provide secure connections. + </value> + <exception cref="T:System.InvalidOperationException"> + This instance does not provide secure connections. + </exception> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServer.UserCredentialsFinder"> + <summary> + Gets or sets the delegate used to find the credentials + for an identity. + </summary> + <remarks> + <para> + No credentials are found if the method invoked by + the delegate returns <see langword="null"/> or + the value is <see langword="null"/>. + </para> + <para> + The set operation does nothing if the server has + already started or it is shutting down. + </para> + </remarks> + <value> + <para> + A <c>Func<<see cref="T:System.Security.Principal.IIdentity"/>, + <see cref="T:WebSocketSharp.Net.NetworkCredential"/>></c> delegate or + <see langword="null"/> if not needed. + </para> + <para> + That delegate invokes the method called for finding + the credentials used to authenticate a client. + </para> + <para> + The default value is <see langword="null"/>. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServer.WaitTime"> + <summary> + Gets or sets the time to wait for the response to the WebSocket Ping or + Close. + </summary> + <remarks> + The set operation does nothing if the server has already started or + it is shutting down. + </remarks> + <value> + <para> + A <see cref="T:System.TimeSpan"/> to wait for the response. + </para> + <para> + The default value is the same as 1 second. + </para> + </value> + <exception cref="T:System.ArgumentOutOfRangeException"> + The value specified for a set operation is zero or less. + </exception> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServer.WebSocketServices"> + <summary> + Gets the management function for the WebSocket services + provided by the server. + </summary> + <value> + A <see cref="T:WebSocketSharp.Server.WebSocketServiceManager"/> that manages + the WebSocket services provided by the server. + </value> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServer.AddWebSocketService``1(System.String,System.Func{``0})"> + <summary> + Adds a WebSocket service with the specified behavior, + <paramref name="path"/>, and <paramref name="creator"/>. + </summary> + <remarks> + <paramref name="path"/> is converted to a URL-decoded string and + '/' is trimmed from the end of the converted string if any. + </remarks> + <param name="path"> + A <see cref="T:System.String"/> that represents an absolute path to + the service to add. + </param> + <param name="creator"> + <para> + A <c>Func<TBehavior></c> delegate. + </para> + <para> + It invokes the method called for creating a new session + instance for the service. + </para> + <para> + The method must create a new instance of the specified + behavior class and return it. + </para> + </param> + <typeparam name="TBehavior"> + <para> + The type of the behavior for the service. + </para> + <para> + It must inherit the <see cref="T:WebSocketSharp.Server.WebSocketBehavior"/> class. + </para> + </typeparam> + <exception cref="T:System.ArgumentNullException"> + <para> + <paramref name="path"/> is <see langword="null"/>. + </para> + <para> + -or- + </para> + <para> + <paramref name="creator"/> is <see langword="null"/>. + </para> + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="path"/> is an empty string. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> is not an absolute path. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> includes either or both + query and fragment components. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> is already in use. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServer.AddWebSocketService``1(System.String)"> + <summary> + Adds a WebSocket service with the specified behavior and + <paramref name="path"/>. + </summary> + <remarks> + <paramref name="path"/> is converted to a URL-decoded string and + '/' is trimmed from the end of the converted string if any. + </remarks> + <param name="path"> + A <see cref="T:System.String"/> that represents an absolute path to + the service to add. + </param> + <typeparam name="TBehaviorWithNew"> + <para> + The type of the behavior for the service. + </para> + <para> + It must inherit the <see cref="T:WebSocketSharp.Server.WebSocketBehavior"/> class and + have a public parameterless constructor. + </para> + </typeparam> + <exception cref="T:System.ArgumentNullException"> + <paramref name="path"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="path"/> is an empty string. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> is not an absolute path. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> includes either or both + query and fragment components. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> is already in use. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServer.AddWebSocketService``1(System.String,System.Action{``0})"> + <summary> + Adds a WebSocket service with the specified behavior, + <paramref name="path"/>, and <paramref name="initializer"/>. + </summary> + <remarks> + <paramref name="path"/> is converted to a URL-decoded string and + '/' is trimmed from the end of the converted string if any. + </remarks> + <param name="path"> + A <see cref="T:System.String"/> that represents an absolute path to + the service to add. + </param> + <param name="initializer"> + <para> + An <c>Action<TBehaviorWithNew></c> delegate or + <see langword="null"/> if not needed. + </para> + <para> + That delegate invokes the method called for initializing + a new session instance for the service. + </para> + </param> + <typeparam name="TBehaviorWithNew"> + <para> + The type of the behavior for the service. + </para> + <para> + It must inherit the <see cref="T:WebSocketSharp.Server.WebSocketBehavior"/> class and + have a public parameterless constructor. + </para> + </typeparam> + <exception cref="T:System.ArgumentNullException"> + <paramref name="path"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="path"/> is an empty string. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> is not an absolute path. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> includes either or both + query and fragment components. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> is already in use. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServer.RemoveWebSocketService(System.String)"> + <summary> + Removes a WebSocket service with the specified <paramref name="path"/>. + </summary> + <remarks> + <para> + <paramref name="path"/> is converted to a URL-decoded string and + '/' is trimmed from the end of the converted string if any. + </para> + <para> + The service is stopped with close status 1001 (going away) + if it has already started. + </para> + </remarks> + <returns> + <c>true</c> if the service is successfully found and removed; + otherwise, <c>false</c>. + </returns> + <param name="path"> + A <see cref="T:System.String"/> that represents an absolute path to + the service to remove. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="path"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="path"/> is an empty string. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> is not an absolute path. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> includes either or both + query and fragment components. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServer.Start"> + <summary> + Starts receiving incoming handshake requests. + </summary> + <remarks> + This method does nothing if the server has already started or + it is shutting down. + </remarks> + <exception cref="T:System.InvalidOperationException"> + <para> + There is no server certificate for secure connections. + </para> + <para> + -or- + </para> + <para> + The underlying <see cref="T:System.Net.Sockets.TcpListener"/> has failed to start. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServer.Stop"> + <summary> + Stops receiving incoming handshake requests and closes + each connection. + </summary> + <remarks> + This method does nothing if the server is not started, + it is shutting down, or it has already stopped. + </remarks> + <exception cref="T:System.InvalidOperationException"> + The underlying <see cref="T:System.Net.Sockets.TcpListener"/> has failed to stop. + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServer.Stop(System.UInt16,System.String)"> + <summary> + Stops receiving incoming handshake requests and closes each + connection with the specified <paramref name="code"/> and + <paramref name="reason"/>. + </summary> + <remarks> + This method does nothing if the server is not started, + it is shutting down, or it has already stopped. + </remarks> + <param name="code"> + <para> + A <see cref="T:System.UInt16"/> that represents the status code + indicating the reason for the close. + </para> + <para> + The status codes are defined in + <see href="http://tools.ietf.org/html/rfc6455#section-7.4"> + Section 7.4</see> of RFC 6455. + </para> + </param> + <param name="reason"> + <para> + A <see cref="T:System.String"/> that represents the reason for the close. + </para> + <para> + The size must be 123 bytes or less in UTF-8. + </para> + </param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <para> + <paramref name="code"/> is less than 1000 or greater than 4999. + </para> + <para> + -or- + </para> + <para> + The size of <paramref name="reason"/> is greater than 123 bytes. + </para> + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="code"/> is 1010 (mandatory extension). + </para> + <para> + -or- + </para> + <para> + <paramref name="code"/> is 1005 (no status) and + there is <paramref name="reason"/>. + </para> + <para> + -or- + </para> + <para> + <paramref name="reason"/> could not be UTF-8-encoded. + </para> + </exception> + <exception cref="T:System.InvalidOperationException"> + The underlying <see cref="T:System.Net.Sockets.TcpListener"/> has failed to stop. + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServer.Stop(WebSocketSharp.CloseStatusCode,System.String)"> + <summary> + Stops receiving incoming handshake requests and closes each + connection with the specified <paramref name="code"/> and + <paramref name="reason"/>. + </summary> + <remarks> + This method does nothing if the server is not started, + it is shutting down, or it has already stopped. + </remarks> + <param name="code"> + <para> + One of the <see cref="T:WebSocketSharp.CloseStatusCode"/> enum values. + </para> + <para> + It represents the status code indicating the reason for the close. + </para> + </param> + <param name="reason"> + <para> + A <see cref="T:System.String"/> that represents the reason for the close. + </para> + <para> + The size must be 123 bytes or less in UTF-8. + </para> + </param> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="code"/> is + <see cref="F:WebSocketSharp.CloseStatusCode.MandatoryExtension"/>. + </para> + <para> + -or- + </para> + <para> + <paramref name="code"/> is + <see cref="F:WebSocketSharp.CloseStatusCode.NoStatus"/> and + there is <paramref name="reason"/>. + </para> + <para> + -or- + </para> + <para> + <paramref name="reason"/> could not be UTF-8-encoded. + </para> + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + The size of <paramref name="reason"/> is greater than 123 bytes. + </exception> + <exception cref="T:System.InvalidOperationException"> + The underlying <see cref="T:System.Net.Sockets.TcpListener"/> has failed to stop. + </exception> + </member> + <member name="T:WebSocketSharp.Server.WebSocketServiceHost"> + <summary> + Exposes the methods and properties used to access the information in + a WebSocket service provided by the <see cref="T:WebSocketSharp.Server.WebSocketServer"/> or + <see cref="T:WebSocketSharp.Server.HttpServer"/>. + </summary> + <remarks> + This class is an abstract class. + </remarks> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServiceHost.#ctor(System.String,WebSocketSharp.Logger)"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.Server.WebSocketServiceHost"/> class + with the specified <paramref name="path"/> and <paramref name="log"/>. + </summary> + <param name="path"> + A <see cref="T:System.String"/> that represents the absolute path to the service. + </param> + <param name="log"> + A <see cref="T:WebSocketSharp.Logger"/> that represents the logging function for the service. + </param> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServiceHost.Log"> + <summary> + Gets the logging function for the service. + </summary> + <value> + A <see cref="T:WebSocketSharp.Logger"/> that provides the logging function. + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServiceHost.KeepClean"> + <summary> + Gets or sets a value indicating whether the service cleans up + the inactive sessions periodically. + </summary> + <remarks> + The set operation does nothing if the service has already started or + it is shutting down. + </remarks> + <value> + <c>true</c> if the service cleans up the inactive sessions every + 60 seconds; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServiceHost.Path"> + <summary> + Gets the path to the service. + </summary> + <value> + A <see cref="T:System.String"/> that represents the absolute path to + the service. + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServiceHost.Sessions"> + <summary> + Gets the management function for the sessions in the service. + </summary> + <value> + A <see cref="T:WebSocketSharp.Server.WebSocketSessionManager"/> that manages the sessions in + the service. + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServiceHost.BehaviorType"> + <summary> + Gets the <see cref="T:System.Type"/> of the behavior of the service. + </summary> + <value> + A <see cref="T:System.Type"/> that represents the type of the behavior of + the service. + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServiceHost.WaitTime"> + <summary> + Gets or sets the time to wait for the response to the WebSocket Ping or + Close. + </summary> + <remarks> + The set operation does nothing if the service has already started or + it is shutting down. + </remarks> + <value> + A <see cref="T:System.TimeSpan"/> to wait for the response. + </value> + <exception cref="T:System.ArgumentOutOfRangeException"> + The value specified for a set operation is zero or less. + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServiceHost.CreateSession"> + <summary> + Creates a new session for the service. + </summary> + <returns> + A <see cref="T:WebSocketSharp.Server.WebSocketBehavior"/> instance that represents + the new session. + </returns> + </member> + <member name="T:WebSocketSharp.Server.WebSocketServiceManager"> + <summary> + Provides the management function for the WebSocket services. + </summary> + <remarks> + This class manages the WebSocket services provided by + the <see cref="T:WebSocketSharp.Server.WebSocketServer"/> or <see cref="T:WebSocketSharp.Server.HttpServer"/>. + </remarks> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServiceManager.Count"> + <summary> + Gets the number of the WebSocket services. + </summary> + <value> + An <see cref="T:System.Int32"/> that represents the number of the services. + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServiceManager.Hosts"> + <summary> + Gets the host instances for the WebSocket services. + </summary> + <value> + <para> + An <c>IEnumerable<WebSocketServiceHost></c> instance. + </para> + <para> + It provides an enumerator which supports the iteration over + the collection of the host instances. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServiceManager.Item(System.String)"> + <summary> + Gets the host instance for a WebSocket service with + the specified <paramref name="path"/>. + </summary> + <remarks> + <paramref name="path"/> is converted to a URL-decoded string and + / is trimmed from the end of the converted string if any. + </remarks> + <value> + <para> + A <see cref="T:WebSocketSharp.Server.WebSocketServiceHost"/> instance or + <see langword="null"/> if not found. + </para> + <para> + That host instance provides the function to access + the information in the service. + </para> + </value> + <param name="path"> + A <see cref="T:System.String"/> that represents an absolute path to + the service to find. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="path"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="path"/> is empty. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> is not an absolute path. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> includes either or both + query and fragment components. + </para> + </exception> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServiceManager.KeepClean"> + <summary> + Gets or sets a value indicating whether the inactive sessions in + the WebSocket services are cleaned up periodically. + </summary> + <remarks> + The set operation does nothing if the server has already started or + it is shutting down. + </remarks> + <value> + <c>true</c> if the inactive sessions are cleaned up every 60 seconds; + otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServiceManager.Paths"> + <summary> + Gets the paths for the WebSocket services. + </summary> + <value> + <para> + An <c>IEnumerable<string></c> instance. + </para> + <para> + It provides an enumerator which supports the iteration over + the collection of the paths. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServiceManager.SessionCount"> + <summary> + Gets the total number of the sessions in the WebSocket services. + </summary> + <value> + An <see cref="T:System.Int32"/> that represents the total number of + the sessions in the services. + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketServiceManager.WaitTime"> + <summary> + Gets or sets the time to wait for the response to the WebSocket Ping or + Close. + </summary> + <remarks> + The set operation does nothing if the server has already started or + it is shutting down. + </remarks> + <value> + A <see cref="T:System.TimeSpan"/> to wait for the response. + </value> + <exception cref="T:System.ArgumentOutOfRangeException"> + The value specified for a set operation is zero or less. + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServiceManager.AddService``1(System.String,System.Action{``0})"> + <summary> + Adds a WebSocket service with the specified behavior, + <paramref name="path"/>, and <paramref name="initializer"/>. + </summary> + <remarks> + <paramref name="path"/> is converted to a URL-decoded string and + / is trimmed from the end of the converted string if any. + </remarks> + <param name="path"> + A <see cref="T:System.String"/> that represents an absolute path to + the service to add. + </param> + <param name="initializer"> + <para> + An <c>Action<TBehavior></c> delegate or + <see langword="null"/> if not needed. + </para> + <para> + That delegate invokes the method called for initializing + a new session instance for the service. + </para> + </param> + <typeparam name="TBehavior"> + The type of the behavior for the service. It must inherit + the <see cref="T:WebSocketSharp.Server.WebSocketBehavior"/> class and it must have + a public parameterless constructor. + </typeparam> + <exception cref="T:System.ArgumentNullException"> + <paramref name="path"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="path"/> is empty. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> is not an absolute path. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> includes either or both + query and fragment components. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> is already in use. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServiceManager.Broadcast(System.Byte[])"> + <summary> + Sends <paramref name="data"/> to every client in the WebSocket services. + </summary> + <param name="data"> + An array of <see cref="T:System.Byte"/> that represents the binary data to send. + </param> + <exception cref="T:System.InvalidOperationException"> + The current state of the manager is not Start. + </exception> + <exception cref="T:System.ArgumentNullException"> + <paramref name="data"/> is <see langword="null"/>. + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServiceManager.Broadcast(System.String)"> + <summary> + Sends <paramref name="data"/> to every client in the WebSocket services. + </summary> + <param name="data"> + A <see cref="T:System.String"/> that represents the text data to send. + </param> + <exception cref="T:System.InvalidOperationException"> + The current state of the manager is not Start. + </exception> + <exception cref="T:System.ArgumentNullException"> + <paramref name="data"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="data"/> could not be UTF-8-encoded. + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServiceManager.BroadcastAsync(System.Byte[],System.Action)"> + <summary> + Sends <paramref name="data"/> asynchronously to every client in + the WebSocket services. + </summary> + <remarks> + This method does not wait for the send to be complete. + </remarks> + <param name="data"> + An array of <see cref="T:System.Byte"/> that represents the binary data to send. + </param> + <param name="completed"> + <para> + An <see cref="T:System.Action"/> delegate or <see langword="null"/> + if not needed. + </para> + <para> + The delegate invokes the method called when the send is complete. + </para> + </param> + <exception cref="T:System.InvalidOperationException"> + The current state of the manager is not Start. + </exception> + <exception cref="T:System.ArgumentNullException"> + <paramref name="data"/> is <see langword="null"/>. + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServiceManager.BroadcastAsync(System.String,System.Action)"> + <summary> + Sends <paramref name="data"/> asynchronously to every client in + the WebSocket services. + </summary> + <remarks> + This method does not wait for the send to be complete. + </remarks> + <param name="data"> + A <see cref="T:System.String"/> that represents the text data to send. + </param> + <param name="completed"> + <para> + An <see cref="T:System.Action"/> delegate or <see langword="null"/> + if not needed. + </para> + <para> + The delegate invokes the method called when the send is complete. + </para> + </param> + <exception cref="T:System.InvalidOperationException"> + The current state of the manager is not Start. + </exception> + <exception cref="T:System.ArgumentNullException"> + <paramref name="data"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="data"/> could not be UTF-8-encoded. + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServiceManager.BroadcastAsync(System.IO.Stream,System.Int32,System.Action)"> + <summary> + Sends the data from <paramref name="stream"/> asynchronously to + every client in the WebSocket services. + </summary> + <remarks> + <para> + The data is sent as the binary data. + </para> + <para> + This method does not wait for the send to be complete. + </para> + </remarks> + <param name="stream"> + A <see cref="T:System.IO.Stream"/> instance from which to read the data to send. + </param> + <param name="length"> + An <see cref="T:System.Int32"/> that specifies the number of bytes to send. + </param> + <param name="completed"> + <para> + An <see cref="T:System.Action"/> delegate or <see langword="null"/> + if not needed. + </para> + <para> + The delegate invokes the method called when the send is complete. + </para> + </param> + <exception cref="T:System.InvalidOperationException"> + The current state of the manager is not Start. + </exception> + <exception cref="T:System.ArgumentNullException"> + <paramref name="stream"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="stream"/> cannot be read. + </para> + <para> + -or- + </para> + <para> + <paramref name="length"/> is less than 1. + </para> + <para> + -or- + </para> + <para> + No data could be read from <paramref name="stream"/>. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServiceManager.Broadping"> + <summary> + Sends a ping to every client in the WebSocket services. + </summary> + <returns> + <para> + A <c>Dictionary<string, Dictionary<string, bool>></c>. + </para> + <para> + It represents a collection of pairs of a service path and another + collection of pairs of a session ID and a value indicating whether + a pong has been received from the client within a time. + </para> + </returns> + <exception cref="T:System.InvalidOperationException"> + The current state of the manager is not Start. + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServiceManager.Broadping(System.String)"> + <summary> + Sends a ping with <paramref name="message"/> to every client in + the WebSocket services. + </summary> + <returns> + <para> + A <c>Dictionary<string, Dictionary<string, bool>></c>. + </para> + <para> + It represents a collection of pairs of a service path and another + collection of pairs of a session ID and a value indicating whether + a pong has been received from the client within a time. + </para> + </returns> + <param name="message"> + <para> + A <see cref="T:System.String"/> that represents the message to send. + </para> + <para> + The size must be 125 bytes or less in UTF-8. + </para> + </param> + <exception cref="T:System.InvalidOperationException"> + The current state of the manager is not Start. + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="message"/> could not be UTF-8-encoded. + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + The size of <paramref name="message"/> is greater than 125 bytes. + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServiceManager.Clear"> + <summary> + Removes all WebSocket services managed by the manager. + </summary> + <remarks> + A service is stopped with close status 1001 (going away) + if it has already started. + </remarks> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServiceManager.RemoveService(System.String)"> + <summary> + Removes a WebSocket service with the specified <paramref name="path"/>. + </summary> + <remarks> + <para> + <paramref name="path"/> is converted to a URL-decoded string and + / is trimmed from the end of the converted string if any. + </para> + <para> + The service is stopped with close status 1001 (going away) + if it has already started. + </para> + </remarks> + <returns> + <c>true</c> if the service is successfully found and removed; + otherwise, <c>false</c>. + </returns> + <param name="path"> + A <see cref="T:System.String"/> that represents an absolute path to + the service to remove. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="path"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="path"/> is empty. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> is not an absolute path. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> includes either or both + query and fragment components. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketServiceManager.TryGetServiceHost(System.String,WebSocketSharp.Server.WebSocketServiceHost@)"> + <summary> + Tries to get the host instance for a WebSocket service with + the specified <paramref name="path"/>. + </summary> + <remarks> + <paramref name="path"/> is converted to a URL-decoded string and + / is trimmed from the end of the converted string if any. + </remarks> + <returns> + <c>true</c> if the service is successfully found; + otherwise, <c>false</c>. + </returns> + <param name="path"> + A <see cref="T:System.String"/> that represents an absolute path to + the service to find. + </param> + <param name="host"> + <para> + When this method returns, a <see cref="T:WebSocketSharp.Server.WebSocketServiceHost"/> + instance or <see langword="null"/> if not found. + </para> + <para> + That host instance provides the function to access + the information in the service. + </para> + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="path"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="path"/> is empty. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> is not an absolute path. + </para> + <para> + -or- + </para> + <para> + <paramref name="path"/> includes either or both + query and fragment components. + </para> + </exception> + </member> + <member name="T:WebSocketSharp.Server.WebSocketSessionManager"> + <summary> + Provides the management function for the sessions in a WebSocket service. + </summary> + <remarks> + This class manages the sessions in a WebSocket service provided by + the <see cref="T:WebSocketSharp.Server.WebSocketServer"/> or <see cref="T:WebSocketSharp.Server.HttpServer"/>. + </remarks> + </member> + <member name="P:WebSocketSharp.Server.WebSocketSessionManager.ActiveIDs"> + <summary> + Gets the IDs for the active sessions in the WebSocket service. + </summary> + <value> + <para> + An <c>IEnumerable<string></c> instance. + </para> + <para> + It provides an enumerator which supports the iteration over + the collection of the IDs for the active sessions. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketSessionManager.Count"> + <summary> + Gets the number of the sessions in the WebSocket service. + </summary> + <value> + An <see cref="T:System.Int32"/> that represents the number of the sessions. + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketSessionManager.IDs"> + <summary> + Gets the IDs for the sessions in the WebSocket service. + </summary> + <value> + <para> + An <c>IEnumerable<string></c> instance. + </para> + <para> + It provides an enumerator which supports the iteration over + the collection of the IDs for the sessions. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketSessionManager.InactiveIDs"> + <summary> + Gets the IDs for the inactive sessions in the WebSocket service. + </summary> + <value> + <para> + An <c>IEnumerable<string></c> instance. + </para> + <para> + It provides an enumerator which supports the iteration over + the collection of the IDs for the inactive sessions. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketSessionManager.Item(System.String)"> + <summary> + Gets the session instance with <paramref name="id"/>. + </summary> + <value> + <para> + A <see cref="T:WebSocketSharp.Server.IWebSocketSession"/> instance or <see langword="null"/> + if not found. + </para> + <para> + The session instance provides the function to access the information + in the session. + </para> + </value> + <param name="id"> + A <see cref="T:System.String"/> that represents the ID of the session to find. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="id"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="id"/> is an empty string. + </exception> + </member> + <member name="P:WebSocketSharp.Server.WebSocketSessionManager.KeepClean"> + <summary> + Gets or sets a value indicating whether the inactive sessions in + the WebSocket service are cleaned up periodically. + </summary> + <remarks> + The set operation does nothing if the service has already started or + it is shutting down. + </remarks> + <value> + <c>true</c> if the inactive sessions are cleaned up every 60 seconds; + otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketSessionManager.Sessions"> + <summary> + Gets the session instances in the WebSocket service. + </summary> + <value> + <para> + An <c>IEnumerable<IWebSocketSession></c> instance. + </para> + <para> + It provides an enumerator which supports the iteration over + the collection of the session instances. + </para> + </value> + </member> + <member name="P:WebSocketSharp.Server.WebSocketSessionManager.WaitTime"> + <summary> + Gets or sets the time to wait for the response to the WebSocket Ping or + Close. + </summary> + <remarks> + The set operation does nothing if the service has already started or + it is shutting down. + </remarks> + <value> + A <see cref="T:System.TimeSpan"/> to wait for the response. + </value> + <exception cref="T:System.ArgumentOutOfRangeException"> + The value specified for a set operation is zero or less. + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketSessionManager.Broadcast(System.Byte[])"> + <summary> + Sends <paramref name="data"/> to every client in the WebSocket service. + </summary> + <param name="data"> + An array of <see cref="T:System.Byte"/> that represents the binary data to send. + </param> + <exception cref="T:System.InvalidOperationException"> + The current state of the manager is not Start. + </exception> + <exception cref="T:System.ArgumentNullException"> + <paramref name="data"/> is <see langword="null"/>. + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketSessionManager.Broadcast(System.String)"> + <summary> + Sends <paramref name="data"/> to every client in the WebSocket service. + </summary> + <param name="data"> + A <see cref="T:System.String"/> that represents the text data to send. + </param> + <exception cref="T:System.InvalidOperationException"> + The current state of the manager is not Start. + </exception> + <exception cref="T:System.ArgumentNullException"> + <paramref name="data"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="data"/> could not be UTF-8-encoded. + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketSessionManager.Broadcast(System.IO.Stream,System.Int32)"> + <summary> + Sends the data from <paramref name="stream"/> to every client in + the WebSocket service. + </summary> + <remarks> + The data is sent as the binary data. + </remarks> + <param name="stream"> + A <see cref="T:System.IO.Stream"/> instance from which to read the data to send. + </param> + <param name="length"> + An <see cref="T:System.Int32"/> that specifies the number of bytes to send. + </param> + <exception cref="T:System.InvalidOperationException"> + The current state of the manager is not Start. + </exception> + <exception cref="T:System.ArgumentNullException"> + <paramref name="stream"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="stream"/> cannot be read. + </para> + <para> + -or- + </para> + <para> + <paramref name="length"/> is less than 1. + </para> + <para> + -or- + </para> + <para> + No data could be read from <paramref name="stream"/>. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketSessionManager.BroadcastAsync(System.Byte[],System.Action)"> + <summary> + Sends <paramref name="data"/> asynchronously to every client in + the WebSocket service. + </summary> + <remarks> + This method does not wait for the send to be complete. + </remarks> + <param name="data"> + An array of <see cref="T:System.Byte"/> that represents the binary data to send. + </param> + <param name="completed"> + <para> + An <see cref="T:System.Action"/> delegate or <see langword="null"/> + if not needed. + </para> + <para> + The delegate invokes the method called when the send is complete. + </para> + </param> + <exception cref="T:System.InvalidOperationException"> + The current state of the manager is not Start. + </exception> + <exception cref="T:System.ArgumentNullException"> + <paramref name="data"/> is <see langword="null"/>. + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketSessionManager.BroadcastAsync(System.String,System.Action)"> + <summary> + Sends <paramref name="data"/> asynchronously to every client in + the WebSocket service. + </summary> + <remarks> + This method does not wait for the send to be complete. + </remarks> + <param name="data"> + A <see cref="T:System.String"/> that represents the text data to send. + </param> + <param name="completed"> + <para> + An <see cref="T:System.Action"/> delegate or <see langword="null"/> + if not needed. + </para> + <para> + The delegate invokes the method called when the send is complete. + </para> + </param> + <exception cref="T:System.InvalidOperationException"> + The current state of the manager is not Start. + </exception> + <exception cref="T:System.ArgumentNullException"> + <paramref name="data"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="data"/> could not be UTF-8-encoded. + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketSessionManager.BroadcastAsync(System.IO.Stream,System.Int32,System.Action)"> + <summary> + Sends the data from <paramref name="stream"/> asynchronously to + every client in the WebSocket service. + </summary> + <remarks> + <para> + The data is sent as the binary data. + </para> + <para> + This method does not wait for the send to be complete. + </para> + </remarks> + <param name="stream"> + A <see cref="T:System.IO.Stream"/> instance from which to read the data to send. + </param> + <param name="length"> + An <see cref="T:System.Int32"/> that specifies the number of bytes to send. + </param> + <param name="completed"> + <para> + An <see cref="T:System.Action"/> delegate or <see langword="null"/> + if not needed. + </para> + <para> + The delegate invokes the method called when the send is complete. + </para> + </param> + <exception cref="T:System.InvalidOperationException"> + The current state of the manager is not Start. + </exception> + <exception cref="T:System.ArgumentNullException"> + <paramref name="stream"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="stream"/> cannot be read. + </para> + <para> + -or- + </para> + <para> + <paramref name="length"/> is less than 1. + </para> + <para> + -or- + </para> + <para> + No data could be read from <paramref name="stream"/>. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketSessionManager.Broadping"> + <summary> + Sends a ping to every client in the WebSocket service. + </summary> + <returns> + <para> + A <c>Dictionary<string, bool></c>. + </para> + <para> + It represents a collection of pairs of a session ID and + a value indicating whether a pong has been received from + the client within a time. + </para> + </returns> + <exception cref="T:System.InvalidOperationException"> + The current state of the manager is not Start. + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketSessionManager.Broadping(System.String)"> + <summary> + Sends a ping with <paramref name="message"/> to every client in + the WebSocket service. + </summary> + <returns> + <para> + A <c>Dictionary<string, bool></c>. + </para> + <para> + It represents a collection of pairs of a session ID and + a value indicating whether a pong has been received from + the client within a time. + </para> + </returns> + <param name="message"> + <para> + A <see cref="T:System.String"/> that represents the message to send. + </para> + <para> + The size must be 125 bytes or less in UTF-8. + </para> + </param> + <exception cref="T:System.InvalidOperationException"> + The current state of the manager is not Start. + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="message"/> could not be UTF-8-encoded. + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + The size of <paramref name="message"/> is greater than 125 bytes. + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketSessionManager.CloseSession(System.String)"> + <summary> + Closes the specified session. + </summary> + <param name="id"> + A <see cref="T:System.String"/> that represents the ID of the session to close. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="id"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="id"/> is an empty string. + </exception> + <exception cref="T:System.InvalidOperationException"> + The session could not be found. + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketSessionManager.CloseSession(System.String,System.UInt16,System.String)"> + <summary> + Closes the specified session with <paramref name="code"/> and + <paramref name="reason"/>. + </summary> + <param name="id"> + A <see cref="T:System.String"/> that represents the ID of the session to close. + </param> + <param name="code"> + <para> + A <see cref="T:System.UInt16"/> that represents the status code indicating + the reason for the close. + </para> + <para> + The status codes are defined in + <see href="http://tools.ietf.org/html/rfc6455#section-7.4"> + Section 7.4</see> of RFC 6455. + </para> + </param> + <param name="reason"> + <para> + A <see cref="T:System.String"/> that represents the reason for the close. + </para> + <para> + The size must be 123 bytes or less in UTF-8. + </para> + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="id"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="id"/> is an empty string. + </para> + <para> + -or- + </para> + <para> + <paramref name="code"/> is 1010 (mandatory extension). + </para> + <para> + -or- + </para> + <para> + <paramref name="code"/> is 1005 (no status) and there is + <paramref name="reason"/>. + </para> + <para> + -or- + </para> + <para> + <paramref name="reason"/> could not be UTF-8-encoded. + </para> + </exception> + <exception cref="T:System.InvalidOperationException"> + The session could not be found. + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + <para> + <paramref name="code"/> is less than 1000 or greater than 4999. + </para> + <para> + -or- + </para> + <para> + The size of <paramref name="reason"/> is greater than 123 bytes. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketSessionManager.CloseSession(System.String,WebSocketSharp.CloseStatusCode,System.String)"> + <summary> + Closes the specified session with <paramref name="code"/> and + <paramref name="reason"/>. + </summary> + <param name="id"> + A <see cref="T:System.String"/> that represents the ID of the session to close. + </param> + <param name="code"> + <para> + One of the <see cref="T:WebSocketSharp.CloseStatusCode"/> enum values. + </para> + <para> + It represents the status code indicating the reason for the close. + </para> + </param> + <param name="reason"> + <para> + A <see cref="T:System.String"/> that represents the reason for the close. + </para> + <para> + The size must be 123 bytes or less in UTF-8. + </para> + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="id"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="id"/> is an empty string. + </para> + <para> + -or- + </para> + <para> + <paramref name="code"/> is + <see cref="F:WebSocketSharp.CloseStatusCode.MandatoryExtension"/>. + </para> + <para> + -or- + </para> + <para> + <paramref name="code"/> is + <see cref="F:WebSocketSharp.CloseStatusCode.NoStatus"/> and there is + <paramref name="reason"/>. + </para> + <para> + -or- + </para> + <para> + <paramref name="reason"/> could not be UTF-8-encoded. + </para> + </exception> + <exception cref="T:System.InvalidOperationException"> + The session could not be found. + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + The size of <paramref name="reason"/> is greater than 123 bytes. + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketSessionManager.PingTo(System.String)"> + <summary> + Sends a ping to the client using the specified session. + </summary> + <returns> + <c>true</c> if the send has done with no error and a pong has been + received from the client within a time; otherwise, <c>false</c>. + </returns> + <param name="id"> + A <see cref="T:System.String"/> that represents the ID of the session. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="id"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="id"/> is an empty string. + </exception> + <exception cref="T:System.InvalidOperationException"> + The session could not be found. + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketSessionManager.PingTo(System.String,System.String)"> + <summary> + Sends a ping with <paramref name="message"/> to the client using + the specified session. + </summary> + <returns> + <c>true</c> if the send has done with no error and a pong has been + received from the client within a time; otherwise, <c>false</c>. + </returns> + <param name="message"> + <para> + A <see cref="T:System.String"/> that represents the message to send. + </para> + <para> + The size must be 125 bytes or less in UTF-8. + </para> + </param> + <param name="id"> + A <see cref="T:System.String"/> that represents the ID of the session. + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="id"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="id"/> is an empty string. + </para> + <para> + -or- + </para> + <para> + <paramref name="message"/> could not be UTF-8-encoded. + </para> + </exception> + <exception cref="T:System.InvalidOperationException"> + The session could not be found. + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + The size of <paramref name="message"/> is greater than 125 bytes. + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketSessionManager.SendTo(System.Byte[],System.String)"> + <summary> + Sends <paramref name="data"/> to the client using the specified session. + </summary> + <param name="data"> + An array of <see cref="T:System.Byte"/> that represents the binary data to send. + </param> + <param name="id"> + A <see cref="T:System.String"/> that represents the ID of the session. + </param> + <exception cref="T:System.ArgumentNullException"> + <para> + <paramref name="id"/> is <see langword="null"/>. + </para> + <para> + -or- + </para> + <para> + <paramref name="data"/> is <see langword="null"/>. + </para> + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="id"/> is an empty string. + </exception> + <exception cref="T:System.InvalidOperationException"> + <para> + The session could not be found. + </para> + <para> + -or- + </para> + <para> + The current state of the WebSocket connection is not Open. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketSessionManager.SendTo(System.String,System.String)"> + <summary> + Sends <paramref name="data"/> to the client using the specified session. + </summary> + <param name="data"> + A <see cref="T:System.String"/> that represents the text data to send. + </param> + <param name="id"> + A <see cref="T:System.String"/> that represents the ID of the session. + </param> + <exception cref="T:System.ArgumentNullException"> + <para> + <paramref name="id"/> is <see langword="null"/>. + </para> + <para> + -or- + </para> + <para> + <paramref name="data"/> is <see langword="null"/>. + </para> + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="id"/> is an empty string. + </para> + <para> + -or- + </para> + <para> + <paramref name="data"/> could not be UTF-8-encoded. + </para> + </exception> + <exception cref="T:System.InvalidOperationException"> + <para> + The session could not be found. + </para> + <para> + -or- + </para> + <para> + The current state of the WebSocket connection is not Open. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketSessionManager.SendTo(System.IO.Stream,System.Int32,System.String)"> + <summary> + Sends the data from <paramref name="stream"/> to the client using + the specified session. + </summary> + <remarks> + The data is sent as the binary data. + </remarks> + <param name="stream"> + A <see cref="T:System.IO.Stream"/> instance from which to read the data to send. + </param> + <param name="length"> + An <see cref="T:System.Int32"/> that specifies the number of bytes to send. + </param> + <param name="id"> + A <see cref="T:System.String"/> that represents the ID of the session. + </param> + <exception cref="T:System.ArgumentNullException"> + <para> + <paramref name="id"/> is <see langword="null"/>. + </para> + <para> + -or- + </para> + <para> + <paramref name="stream"/> is <see langword="null"/>. + </para> + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="id"/> is an empty string. + </para> + <para> + -or- + </para> + <para> + <paramref name="stream"/> cannot be read. + </para> + <para> + -or- + </para> + <para> + <paramref name="length"/> is less than 1. + </para> + <para> + -or- + </para> + <para> + No data could be read from <paramref name="stream"/>. + </para> + </exception> + <exception cref="T:System.InvalidOperationException"> + <para> + The session could not be found. + </para> + <para> + -or- + </para> + <para> + The current state of the WebSocket connection is not Open. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketSessionManager.SendToAsync(System.Byte[],System.String,System.Action{System.Boolean})"> + <summary> + Sends <paramref name="data"/> asynchronously to the client using + the specified session. + </summary> + <remarks> + This method does not wait for the send to be complete. + </remarks> + <param name="data"> + An array of <see cref="T:System.Byte"/> that represents the binary data to send. + </param> + <param name="id"> + A <see cref="T:System.String"/> that represents the ID of the session. + </param> + <param name="completed"> + <para> + An <c>Action<bool></c> delegate or <see langword="null"/> + if not needed. + </para> + <para> + The delegate invokes the method called when the send is complete. + </para> + <para> + <c>true</c> is passed to the method if the send has done with + no error; otherwise, <c>false</c>. + </para> + </param> + <exception cref="T:System.ArgumentNullException"> + <para> + <paramref name="id"/> is <see langword="null"/>. + </para> + <para> + -or- + </para> + <para> + <paramref name="data"/> is <see langword="null"/>. + </para> + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="id"/> is an empty string. + </exception> + <exception cref="T:System.InvalidOperationException"> + <para> + The session could not be found. + </para> + <para> + -or- + </para> + <para> + The current state of the WebSocket connection is not Open. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketSessionManager.SendToAsync(System.String,System.String,System.Action{System.Boolean})"> + <summary> + Sends <paramref name="data"/> asynchronously to the client using + the specified session. + </summary> + <remarks> + This method does not wait for the send to be complete. + </remarks> + <param name="data"> + A <see cref="T:System.String"/> that represents the text data to send. + </param> + <param name="id"> + A <see cref="T:System.String"/> that represents the ID of the session. + </param> + <param name="completed"> + <para> + An <c>Action<bool></c> delegate or <see langword="null"/> + if not needed. + </para> + <para> + The delegate invokes the method called when the send is complete. + </para> + <para> + <c>true</c> is passed to the method if the send has done with + no error; otherwise, <c>false</c>. + </para> + </param> + <exception cref="T:System.ArgumentNullException"> + <para> + <paramref name="id"/> is <see langword="null"/>. + </para> + <para> + -or- + </para> + <para> + <paramref name="data"/> is <see langword="null"/>. + </para> + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="id"/> is an empty string. + </para> + <para> + -or- + </para> + <para> + <paramref name="data"/> could not be UTF-8-encoded. + </para> + </exception> + <exception cref="T:System.InvalidOperationException"> + <para> + The session could not be found. + </para> + <para> + -or- + </para> + <para> + The current state of the WebSocket connection is not Open. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketSessionManager.SendToAsync(System.IO.Stream,System.Int32,System.String,System.Action{System.Boolean})"> + <summary> + Sends the data from <paramref name="stream"/> asynchronously to + the client using the specified session. + </summary> + <remarks> + <para> + The data is sent as the binary data. + </para> + <para> + This method does not wait for the send to be complete. + </para> + </remarks> + <param name="stream"> + A <see cref="T:System.IO.Stream"/> instance from which to read the data to send. + </param> + <param name="length"> + An <see cref="T:System.Int32"/> that specifies the number of bytes to send. + </param> + <param name="id"> + A <see cref="T:System.String"/> that represents the ID of the session. + </param> + <param name="completed"> + <para> + An <c>Action<bool></c> delegate or <see langword="null"/> + if not needed. + </para> + <para> + The delegate invokes the method called when the send is complete. + </para> + <para> + <c>true</c> is passed to the method if the send has done with + no error; otherwise, <c>false</c>. + </para> + </param> + <exception cref="T:System.ArgumentNullException"> + <para> + <paramref name="id"/> is <see langword="null"/>. + </para> + <para> + -or- + </para> + <para> + <paramref name="stream"/> is <see langword="null"/>. + </para> + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="id"/> is an empty string. + </para> + <para> + -or- + </para> + <para> + <paramref name="stream"/> cannot be read. + </para> + <para> + -or- + </para> + <para> + <paramref name="length"/> is less than 1. + </para> + <para> + -or- + </para> + <para> + No data could be read from <paramref name="stream"/>. + </para> + </exception> + <exception cref="T:System.InvalidOperationException"> + <para> + The session could not be found. + </para> + <para> + -or- + </para> + <para> + The current state of the WebSocket connection is not Open. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.Server.WebSocketSessionManager.Sweep"> + <summary> + Cleans up the inactive sessions in the WebSocket service. + </summary> + </member> + <member name="M:WebSocketSharp.Server.WebSocketSessionManager.TryGetSession(System.String,WebSocketSharp.Server.IWebSocketSession@)"> + <summary> + Tries to get the session instance with <paramref name="id"/>. + </summary> + <returns> + <c>true</c> if the session is successfully found; otherwise, + <c>false</c>. + </returns> + <param name="id"> + A <see cref="T:System.String"/> that represents the ID of the session to find. + </param> + <param name="session"> + <para> + When this method returns, a <see cref="T:WebSocketSharp.Server.IWebSocketSession"/> + instance or <see langword="null"/> if not found. + </para> + <para> + The session instance provides the function to access + the information in the session. + </para> + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="id"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="id"/> is an empty string. + </exception> + </member> + <member name="T:WebSocketSharp.WebSocket"> + <summary> + Implements the WebSocket interface. + </summary> + <remarks> + The WebSocket class provides a set of methods and properties for two-way communication using + the WebSocket protocol (<see href="http://tools.ietf.org/html/rfc6455">RFC 6455</see>). + </remarks> + </member> + <member name="F:WebSocketSharp.WebSocket.EmptyBytes"> + <summary> + Represents the empty array of <see cref="T:System.Byte"/> used internally. + </summary> + </member> + <member name="F:WebSocketSharp.WebSocket.FragmentLength"> + <summary> + Represents the length used to determine whether the data should be fragmented in sending. + </summary> + <remarks> + <para> + The data will be fragmented if that length is greater than the value of this field. + </para> + <para> + If you would like to change the value, you must set it to a value between <c>125</c> and + <c>Int32.MaxValue - 14</c> inclusive. + </para> + </remarks> + </member> + <member name="F:WebSocketSharp.WebSocket.RandomNumber"> + <summary> + Represents the random number generator used internally. + </summary> + </member> + <member name="M:WebSocketSharp.WebSocket.#ctor(System.String,System.String[])"> + <summary> + Initializes a new instance of the <see cref="T:WebSocketSharp.WebSocket"/> class with + <paramref name="url"/> and <paramref name="protocols"/>. + </summary> + <param name="url"> + A <see cref="T:System.String"/> that specifies the URL of the WebSocket + server to connect. + </param> + <param name="protocols"> + <para> + An array of <see cref="T:System.String"/> that specifies the names of + the subprotocols if necessary. + </para> + <para> + Each value of the array must be a token defined in + <see href="http://tools.ietf.org/html/rfc2616#section-2.2"> + RFC 2616</see>. + </para> + </param> + <exception cref="T:System.ArgumentNullException"> + <paramref name="url"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="url"/> is an empty string. + </para> + <para> + -or- + </para> + <para> + <paramref name="url"/> is an invalid WebSocket URL string. + </para> + <para> + -or- + </para> + <para> + <paramref name="protocols"/> contains a value that is not a token. + </para> + <para> + -or- + </para> + <para> + <paramref name="protocols"/> contains a value twice. + </para> + </exception> + </member> + <member name="P:WebSocketSharp.WebSocket.Compression"> + <summary> + Gets or sets the compression method used to compress a message. + </summary> + <remarks> + The set operation does nothing if the connection has already been + established or it is closing. + </remarks> + <value> + <para> + One of the <see cref="T:WebSocketSharp.CompressionMethod"/> enum values. + </para> + <para> + It represents the compression method used to compress a message. + </para> + <para> + The default value is <see cref="F:WebSocketSharp.CompressionMethod.None"/>. + </para> + </value> + <exception cref="T:System.InvalidOperationException"> + The set operation cannot be used by servers. + </exception> + </member> + <member name="P:WebSocketSharp.WebSocket.Cookies"> + <summary> + Gets the HTTP cookies included in the WebSocket handshake request and response. + </summary> + <value> + An <see cref="T:System.Collections.Generic.IEnumerable{WebSocketSharp.Net.Cookie}"/> + instance that provides an enumerator which supports the iteration over the collection of + the cookies. + </value> + </member> + <member name="P:WebSocketSharp.WebSocket.Credentials"> + <summary> + Gets the credentials for the HTTP authentication (Basic/Digest). + </summary> + <value> + A <see cref="T:WebSocketSharp.Net.NetworkCredential"/> that represents the credentials for + the authentication. The default value is <see langword="null"/>. + </value> + </member> + <member name="P:WebSocketSharp.WebSocket.EmitOnPing"> + <summary> + Gets or sets a value indicating whether the <see cref="T:WebSocketSharp.WebSocket"/> emits + a <see cref="E:WebSocketSharp.WebSocket.OnMessage"/> event when receives a ping. + </summary> + <value> + <c>true</c> if the <see cref="T:WebSocketSharp.WebSocket"/> emits a <see cref="E:WebSocketSharp.WebSocket.OnMessage"/> event + when receives a ping; otherwise, <c>false</c>. The default value is <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.WebSocket.EnableRedirection"> + <summary> + Gets or sets a value indicating whether the URL redirection for + the handshake request is allowed. + </summary> + <remarks> + The set operation does nothing if the connection has already been + established or it is closing. + </remarks> + <value> + <para> + <c>true</c> if the URL redirection for the handshake request is + allowed; otherwise, <c>false</c>. + </para> + <para> + The default value is <c>false</c>. + </para> + </value> + <exception cref="T:System.InvalidOperationException"> + The set operation cannot be used by servers. + </exception> + </member> + <member name="P:WebSocketSharp.WebSocket.Extensions"> + <summary> + Gets the WebSocket extensions selected by the server. + </summary> + <value> + A <see cref="T:System.String"/> that represents the extensions if any. + The default value is <see cref="F:System.String.Empty"/>. + </value> + </member> + <member name="P:WebSocketSharp.WebSocket.IsAlive"> + <summary> + Gets a value indicating whether the WebSocket connection is alive. + </summary> + <value> + <c>true</c> if the connection is alive; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.WebSocket.IsSecure"> + <summary> + Gets a value indicating whether the WebSocket connection is secure. + </summary> + <value> + <c>true</c> if the connection is secure; otherwise, <c>false</c>. + </value> + </member> + <member name="P:WebSocketSharp.WebSocket.Log"> + <summary> + Gets the logging functions. + </summary> + <remarks> + The default logging level is <see cref="F:WebSocketSharp.LogLevel.Error"/>. If you would like to change it, + you should set this <c>Log.Level</c> property to any of the <see cref="T:WebSocketSharp.LogLevel"/> enum + values. + </remarks> + <value> + A <see cref="T:WebSocketSharp.Logger"/> that provides the logging functions. + </value> + </member> + <member name="P:WebSocketSharp.WebSocket.Origin"> + <summary> + Gets or sets the value of the HTTP Origin header to send with + the handshake request. + </summary> + <remarks> + <para> + The HTTP Origin header is defined in + <see href="http://tools.ietf.org/html/rfc6454#section-7"> + Section 7 of RFC 6454</see>. + </para> + <para> + This instance sends the Origin header if this property has any. + </para> + <para> + The set operation does nothing if the connection has already been + established or it is closing. + </para> + </remarks> + <value> + <para> + A <see cref="T:System.String"/> that represents the value of the Origin + header to send. + </para> + <para> + The syntax is <scheme>://<host>[:<port>]. + </para> + <para> + The default value is <see langword="null"/>. + </para> + </value> + <exception cref="T:System.InvalidOperationException"> + The set operation is not available if this instance is not a client. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + The value specified for a set operation is not an absolute URI string. + </para> + <para> + -or- + </para> + <para> + The value specified for a set operation includes the path segments. + </para> + </exception> + </member> + <member name="P:WebSocketSharp.WebSocket.Protocol"> + <summary> + Gets the WebSocket subprotocol selected by the server. + </summary> + <value> + A <see cref="T:System.String"/> that represents the subprotocol if any. + The default value is <see cref="F:System.String.Empty"/>. + </value> + </member> + <member name="P:WebSocketSharp.WebSocket.ReadyState"> + <summary> + Gets the state of the WebSocket connection. + </summary> + <value> + One of the <see cref="T:WebSocketSharp.WebSocketState"/> enum values that indicates + the current state of the connection. The default value is + <see cref="F:WebSocketSharp.WebSocketState.Connecting"/>. + </value> + </member> + <member name="P:WebSocketSharp.WebSocket.SslConfiguration"> + <summary> + Gets the configuration for secure connection. + </summary> + <remarks> + This configuration will be referenced when attempts to connect, + so it must be configured before any connect method is called. + </remarks> + <value> + A <see cref="T:WebSocketSharp.Net.ClientSslConfiguration"/> that represents + the configuration used to establish a secure connection. + </value> + <exception cref="T:System.InvalidOperationException"> + <para> + This instance is not a client. + </para> + <para> + This instance does not use a secure connection. + </para> + </exception> + </member> + <member name="P:WebSocketSharp.WebSocket.Url"> + <summary> + Gets the WebSocket URL used to connect, or accepted. + </summary> + <value> + A <see cref="T:System.Uri"/> that represents the URL used to connect, or accepted. + </value> + </member> + <member name="P:WebSocketSharp.WebSocket.WaitTime"> + <summary> + Gets or sets the time to wait for the response to the ping or close. + </summary> + <remarks> + The set operation does nothing if the connection has already been + established or it is closing. + </remarks> + <value> + <para> + A <see cref="T:System.TimeSpan"/> to wait for the response. + </para> + <para> + The default value is the same as 5 seconds if the instance is + a client. + </para> + </value> + <exception cref="T:System.ArgumentOutOfRangeException"> + The value specified for a set operation is zero or less. + </exception> + </member> + <member name="E:WebSocketSharp.WebSocket.OnClose"> + <summary> + Occurs when the WebSocket connection has been closed. + </summary> + </member> + <member name="E:WebSocketSharp.WebSocket.OnError"> + <summary> + Occurs when the <see cref="T:WebSocketSharp.WebSocket"/> gets an error. + </summary> + </member> + <member name="E:WebSocketSharp.WebSocket.OnMessage"> + <summary> + Occurs when the <see cref="T:WebSocketSharp.WebSocket"/> receives a message. + </summary> + </member> + <member name="E:WebSocketSharp.WebSocket.OnOpen"> + <summary> + Occurs when the WebSocket connection has been established. + </summary> + </member> + <member name="M:WebSocketSharp.WebSocket.Accept"> + <summary> + Accepts the WebSocket handshake request. + </summary> + <remarks> + This method is not available in a client. + </remarks> + </member> + <member name="M:WebSocketSharp.WebSocket.AcceptAsync"> + <summary> + Accepts the WebSocket handshake request asynchronously. + </summary> + <remarks> + <para> + This method does not wait for the accept to be complete. + </para> + <para> + This method is not available in a client. + </para> + </remarks> + </member> + <member name="M:WebSocketSharp.WebSocket.Close"> + <summary> + Closes the connection. + </summary> + <remarks> + This method does nothing if the current state of the connection is + Closing or Closed. + </remarks> + </member> + <member name="M:WebSocketSharp.WebSocket.Close(System.UInt16)"> + <summary> + Closes the connection with the specified <paramref name="code"/>. + </summary> + <remarks> + This method does nothing if the current state of the connection is + Closing or Closed. + </remarks> + <param name="code"> + <para> + A <see cref="T:System.UInt16"/> that represents the status code + indicating the reason for the close. + </para> + <para> + The status codes are defined in + <see href="http://tools.ietf.org/html/rfc6455#section-7.4"> + Section 7.4</see> of RFC 6455. + </para> + </param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="code"/> is less than 1000 or greater than 4999. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="code"/> is 1011 (server error). + It cannot be used by clients. + </para> + <para> + -or- + </para> + <para> + <paramref name="code"/> is 1010 (mandatory extension). + It cannot be used by servers. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.WebSocket.Close(WebSocketSharp.CloseStatusCode)"> + <summary> + Closes the connection with the specified <paramref name="code"/>. + </summary> + <remarks> + This method does nothing if the current state of the connection is + Closing or Closed. + </remarks> + <param name="code"> + <para> + One of the <see cref="T:WebSocketSharp.CloseStatusCode"/> enum values. + </para> + <para> + It represents the status code indicating the reason for the close. + </para> + </param> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="code"/> is + <see cref="F:WebSocketSharp.CloseStatusCode.ServerError"/>. + It cannot be used by clients. + </para> + <para> + -or- + </para> + <para> + <paramref name="code"/> is + <see cref="F:WebSocketSharp.CloseStatusCode.MandatoryExtension"/>. + It cannot be used by servers. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.WebSocket.Close(System.UInt16,System.String)"> + <summary> + Closes the connection with the specified <paramref name="code"/> and + <paramref name="reason"/>. + </summary> + <remarks> + This method does nothing if the current state of the connection is + Closing or Closed. + </remarks> + <param name="code"> + <para> + A <see cref="T:System.UInt16"/> that represents the status code + indicating the reason for the close. + </para> + <para> + The status codes are defined in + <see href="http://tools.ietf.org/html/rfc6455#section-7.4"> + Section 7.4</see> of RFC 6455. + </para> + </param> + <param name="reason"> + <para> + A <see cref="T:System.String"/> that represents the reason for the close. + </para> + <para> + The size must be 123 bytes or less in UTF-8. + </para> + </param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <para> + <paramref name="code"/> is less than 1000 or greater than 4999. + </para> + <para> + -or- + </para> + <para> + The size of <paramref name="reason"/> is greater than 123 bytes. + </para> + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="code"/> is 1011 (server error). + It cannot be used by clients. + </para> + <para> + -or- + </para> + <para> + <paramref name="code"/> is 1010 (mandatory extension). + It cannot be used by servers. + </para> + <para> + -or- + </para> + <para> + <paramref name="code"/> is 1005 (no status) and + there is <paramref name="reason"/>. + </para> + <para> + -or- + </para> + <para> + <paramref name="reason"/> could not be UTF-8-encoded. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.WebSocket.Close(WebSocketSharp.CloseStatusCode,System.String)"> + <summary> + Closes the connection with the specified <paramref name="code"/> and + <paramref name="reason"/>. + </summary> + <remarks> + This method does nothing if the current state of the connection is + Closing or Closed. + </remarks> + <param name="code"> + <para> + One of the <see cref="T:WebSocketSharp.CloseStatusCode"/> enum values. + </para> + <para> + It represents the status code indicating the reason for the close. + </para> + </param> + <param name="reason"> + <para> + A <see cref="T:System.String"/> that represents the reason for the close. + </para> + <para> + The size must be 123 bytes or less in UTF-8. + </para> + </param> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="code"/> is + <see cref="F:WebSocketSharp.CloseStatusCode.ServerError"/>. + It cannot be used by clients. + </para> + <para> + -or- + </para> + <para> + <paramref name="code"/> is + <see cref="F:WebSocketSharp.CloseStatusCode.MandatoryExtension"/>. + It cannot be used by servers. + </para> + <para> + -or- + </para> + <para> + <paramref name="code"/> is + <see cref="F:WebSocketSharp.CloseStatusCode.NoStatus"/> and + there is <paramref name="reason"/>. + </para> + <para> + -or- + </para> + <para> + <paramref name="reason"/> could not be UTF-8-encoded. + </para> + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + The size of <paramref name="reason"/> is greater than 123 bytes. + </exception> + </member> + <member name="M:WebSocketSharp.WebSocket.CloseAsync"> + <summary> + Closes the connection asynchronously. + </summary> + <remarks> + <para> + This method does not wait for the close to be complete. + </para> + <para> + And this method does nothing if the current state of + the connection is Closing or Closed. + </para> + </remarks> + </member> + <member name="M:WebSocketSharp.WebSocket.CloseAsync(System.UInt16)"> + <summary> + Closes the connection asynchronously with the specified + <paramref name="code"/>. + </summary> + <remarks> + <para> + This method does not wait for the close to be complete. + </para> + <para> + And this method does nothing if the current state of + the connection is Closing or Closed. + </para> + </remarks> + <param name="code"> + <para> + A <see cref="T:System.UInt16"/> that represents the status code + indicating the reason for the close. + </para> + <para> + The status codes are defined in + <see href="http://tools.ietf.org/html/rfc6455#section-7.4"> + Section 7.4</see> of RFC 6455. + </para> + </param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="code"/> is less than 1000 or greater than 4999. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="code"/> is 1011 (server error). + It cannot be used by clients. + </para> + <para> + -or- + </para> + <para> + <paramref name="code"/> is 1010 (mandatory extension). + It cannot be used by servers. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.WebSocket.CloseAsync(WebSocketSharp.CloseStatusCode)"> + <summary> + Closes the connection asynchronously with the specified + <paramref name="code"/>. + </summary> + <remarks> + <para> + This method does not wait for the close to be complete. + </para> + <para> + And this method does nothing if the current state of + the connection is Closing or Closed. + </para> + </remarks> + <param name="code"> + <para> + One of the <see cref="T:WebSocketSharp.CloseStatusCode"/> enum values. + </para> + <para> + It represents the status code indicating the reason for the close. + </para> + </param> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="code"/> is + <see cref="F:WebSocketSharp.CloseStatusCode.ServerError"/>. + It cannot be used by clients. + </para> + <para> + -or- + </para> + <para> + <paramref name="code"/> is + <see cref="F:WebSocketSharp.CloseStatusCode.MandatoryExtension"/>. + It cannot be used by servers. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.WebSocket.CloseAsync(System.UInt16,System.String)"> + <summary> + Closes the connection asynchronously with the specified + <paramref name="code"/> and <paramref name="reason"/>. + </summary> + <remarks> + <para> + This method does not wait for the close to be complete. + </para> + <para> + And this method does nothing if the current state of + the connection is Closing or Closed. + </para> + </remarks> + <param name="code"> + <para> + A <see cref="T:System.UInt16"/> that represents the status code + indicating the reason for the close. + </para> + <para> + The status codes are defined in + <see href="http://tools.ietf.org/html/rfc6455#section-7.4"> + Section 7.4</see> of RFC 6455. + </para> + </param> + <param name="reason"> + <para> + A <see cref="T:System.String"/> that represents the reason for the close. + </para> + <para> + The size must be 123 bytes or less in UTF-8. + </para> + </param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <para> + <paramref name="code"/> is less than 1000 or greater than 4999. + </para> + <para> + -or- + </para> + <para> + The size of <paramref name="reason"/> is greater than 123 bytes. + </para> + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="code"/> is 1011 (server error). + It cannot be used by clients. + </para> + <para> + -or- + </para> + <para> + <paramref name="code"/> is 1010 (mandatory extension). + It cannot be used by servers. + </para> + <para> + -or- + </para> + <para> + <paramref name="code"/> is 1005 (no status) and + there is <paramref name="reason"/>. + </para> + <para> + -or- + </para> + <para> + <paramref name="reason"/> could not be UTF-8-encoded. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.WebSocket.CloseAsync(WebSocketSharp.CloseStatusCode,System.String)"> + <summary> + Closes the connection asynchronously with the specified + <paramref name="code"/> and <paramref name="reason"/>. + </summary> + <remarks> + <para> + This method does not wait for the close to be complete. + </para> + <para> + And this method does nothing if the current state of + the connection is Closing or Closed. + </para> + </remarks> + <param name="code"> + <para> + One of the <see cref="T:WebSocketSharp.CloseStatusCode"/> enum values. + </para> + <para> + It represents the status code indicating the reason for the close. + </para> + </param> + <param name="reason"> + <para> + A <see cref="T:System.String"/> that represents the reason for the close. + </para> + <para> + The size must be 123 bytes or less in UTF-8. + </para> + </param> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="code"/> is + <see cref="F:WebSocketSharp.CloseStatusCode.ServerError"/>. + It cannot be used by clients. + </para> + <para> + -or- + </para> + <para> + <paramref name="code"/> is + <see cref="F:WebSocketSharp.CloseStatusCode.MandatoryExtension"/>. + It cannot be used by servers. + </para> + <para> + -or- + </para> + <para> + <paramref name="code"/> is + <see cref="F:WebSocketSharp.CloseStatusCode.NoStatus"/> and + there is <paramref name="reason"/>. + </para> + <para> + -or- + </para> + <para> + <paramref name="reason"/> could not be UTF-8-encoded. + </para> + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + The size of <paramref name="reason"/> is greater than 123 bytes. + </exception> + </member> + <member name="M:WebSocketSharp.WebSocket.Connect"> + <summary> + Establishes a WebSocket connection. + </summary> + <remarks> + This method is not available in a server. + </remarks> + </member> + <member name="M:WebSocketSharp.WebSocket.ConnectAsync"> + <summary> + Establishes a WebSocket connection asynchronously. + </summary> + <remarks> + <para> + This method does not wait for the connect to be complete. + </para> + <para> + This method is not available in a server. + </para> + </remarks> + </member> + <member name="M:WebSocketSharp.WebSocket.Ping"> + <summary> + Sends a ping using the WebSocket connection. + </summary> + <returns> + <c>true</c> if the send has done with no error and a pong has been + received within a time; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:WebSocketSharp.WebSocket.Ping(System.String)"> + <summary> + Sends a ping with <paramref name="message"/> using the WebSocket + connection. + </summary> + <returns> + <c>true</c> if the send has done with no error and a pong has been + received within a time; otherwise, <c>false</c>. + </returns> + <param name="message"> + <para> + A <see cref="T:System.String"/> that represents the message to send. + </para> + <para> + The size must be 125 bytes or less in UTF-8. + </para> + </param> + <exception cref="T:System.ArgumentException"> + <paramref name="message"/> could not be UTF-8-encoded. + </exception> + <exception cref="T:System.ArgumentOutOfRangeException"> + The size of <paramref name="message"/> is greater than 125 bytes. + </exception> + </member> + <member name="M:WebSocketSharp.WebSocket.Send(System.Byte[])"> + <summary> + Sends <paramref name="data"/> using the WebSocket connection. + </summary> + <param name="data"> + An array of <see cref="T:System.Byte"/> that represents the binary data to send. + </param> + <exception cref="T:System.InvalidOperationException"> + The current state of the connection is not Open. + </exception> + <exception cref="T:System.ArgumentNullException"> + <paramref name="data"/> is <see langword="null"/>. + </exception> + </member> + <member name="M:WebSocketSharp.WebSocket.Send(System.IO.FileInfo)"> + <summary> + Sends the specified file using the WebSocket connection. + </summary> + <remarks> + The file is sent as the binary data. + </remarks> + <param name="fileInfo"> + A <see cref="T:System.IO.FileInfo"/> that specifies the file to send. + </param> + <exception cref="T:System.InvalidOperationException"> + The current state of the connection is not Open. + </exception> + <exception cref="T:System.ArgumentNullException"> + <paramref name="fileInfo"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + The file does not exist. + </para> + <para> + -or- + </para> + <para> + The file could not be opened. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.WebSocket.Send(System.String)"> + <summary> + Sends <paramref name="data"/> using the WebSocket connection. + </summary> + <param name="data"> + A <see cref="T:System.String"/> that represents the text data to send. + </param> + <exception cref="T:System.InvalidOperationException"> + The current state of the connection is not Open. + </exception> + <exception cref="T:System.ArgumentNullException"> + <paramref name="data"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="data"/> could not be UTF-8-encoded. + </exception> + </member> + <member name="M:WebSocketSharp.WebSocket.Send(System.IO.Stream,System.Int32)"> + <summary> + Sends the data from <paramref name="stream"/> using the WebSocket + connection. + </summary> + <remarks> + The data is sent as the binary data. + </remarks> + <param name="stream"> + A <see cref="T:System.IO.Stream"/> instance from which to read the data to send. + </param> + <param name="length"> + An <see cref="T:System.Int32"/> that specifies the number of bytes to send. + </param> + <exception cref="T:System.InvalidOperationException"> + The current state of the connection is not Open. + </exception> + <exception cref="T:System.ArgumentNullException"> + <paramref name="stream"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="stream"/> cannot be read. + </para> + <para> + -or- + </para> + <para> + <paramref name="length"/> is less than 1. + </para> + <para> + -or- + </para> + <para> + No data could be read from <paramref name="stream"/>. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.WebSocket.SendAsync(System.Byte[],System.Action{System.Boolean})"> + <summary> + Sends <paramref name="data"/> asynchronously using the WebSocket + connection. + </summary> + <remarks> + This method does not wait for the send to be complete. + </remarks> + <param name="data"> + An array of <see cref="T:System.Byte"/> that represents the binary data to send. + </param> + <param name="completed"> + <para> + An <c>Action<bool></c> delegate or <see langword="null"/> + if not needed. + </para> + <para> + The delegate invokes the method called when the send is complete. + </para> + <para> + <c>true</c> is passed to the method if the send has done with + no error; otherwise, <c>false</c>. + </para> + </param> + <exception cref="T:System.InvalidOperationException"> + The current state of the connection is not Open. + </exception> + <exception cref="T:System.ArgumentNullException"> + <paramref name="data"/> is <see langword="null"/>. + </exception> + </member> + <member name="M:WebSocketSharp.WebSocket.SendAsync(System.IO.FileInfo,System.Action{System.Boolean})"> + <summary> + Sends the specified file asynchronously using the WebSocket connection. + </summary> + <remarks> + <para> + The file is sent as the binary data. + </para> + <para> + This method does not wait for the send to be complete. + </para> + </remarks> + <param name="fileInfo"> + A <see cref="T:System.IO.FileInfo"/> that specifies the file to send. + </param> + <param name="completed"> + <para> + An <c>Action<bool></c> delegate or <see langword="null"/> + if not needed. + </para> + <para> + The delegate invokes the method called when the send is complete. + </para> + <para> + <c>true</c> is passed to the method if the send has done with + no error; otherwise, <c>false</c>. + </para> + </param> + <exception cref="T:System.InvalidOperationException"> + The current state of the connection is not Open. + </exception> + <exception cref="T:System.ArgumentNullException"> + <paramref name="fileInfo"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + The file does not exist. + </para> + <para> + -or- + </para> + <para> + The file could not be opened. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.WebSocket.SendAsync(System.String,System.Action{System.Boolean})"> + <summary> + Sends <paramref name="data"/> asynchronously using the WebSocket + connection. + </summary> + <remarks> + This method does not wait for the send to be complete. + </remarks> + <param name="data"> + A <see cref="T:System.String"/> that represents the text data to send. + </param> + <param name="completed"> + <para> + An <c>Action<bool></c> delegate or <see langword="null"/> + if not needed. + </para> + <para> + The delegate invokes the method called when the send is complete. + </para> + <para> + <c>true</c> is passed to the method if the send has done with + no error; otherwise, <c>false</c>. + </para> + </param> + <exception cref="T:System.InvalidOperationException"> + The current state of the connection is not Open. + </exception> + <exception cref="T:System.ArgumentNullException"> + <paramref name="data"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <paramref name="data"/> could not be UTF-8-encoded. + </exception> + </member> + <member name="M:WebSocketSharp.WebSocket.SendAsync(System.IO.Stream,System.Int32,System.Action{System.Boolean})"> + <summary> + Sends the data from <paramref name="stream"/> asynchronously using + the WebSocket connection. + </summary> + <remarks> + <para> + The data is sent as the binary data. + </para> + <para> + This method does not wait for the send to be complete. + </para> + </remarks> + <param name="stream"> + A <see cref="T:System.IO.Stream"/> instance from which to read the data to send. + </param> + <param name="length"> + An <see cref="T:System.Int32"/> that specifies the number of bytes to send. + </param> + <param name="completed"> + <para> + An <c>Action<bool></c> delegate or <see langword="null"/> + if not needed. + </para> + <para> + The delegate invokes the method called when the send is complete. + </para> + <para> + <c>true</c> is passed to the method if the send has done with + no error; otherwise, <c>false</c>. + </para> + </param> + <exception cref="T:System.InvalidOperationException"> + The current state of the connection is not Open. + </exception> + <exception cref="T:System.ArgumentNullException"> + <paramref name="stream"/> is <see langword="null"/>. + </exception> + <exception cref="T:System.ArgumentException"> + <para> + <paramref name="stream"/> cannot be read. + </para> + <para> + -or- + </para> + <para> + <paramref name="length"/> is less than 1. + </para> + <para> + -or- + </para> + <para> + No data could be read from <paramref name="stream"/>. + </para> + </exception> + </member> + <member name="M:WebSocketSharp.WebSocket.SetCookie(WebSocketSharp.Net.Cookie)"> + <summary> + Sets an HTTP <paramref name="cookie"/> to send with + the WebSocket handshake request to the server. + </summary> + <remarks> + This method is not available in a server. + </remarks> + <param name="cookie"> + A <see cref="T:WebSocketSharp.Net.Cookie"/> that represents a cookie to send. + </param> + </member> + <member name="M:WebSocketSharp.WebSocket.SetCredentials(System.String,System.String,System.Boolean)"> + <summary> + Sets a pair of <paramref name="username"/> and <paramref name="password"/> for + the HTTP authentication (Basic/Digest). + </summary> + <remarks> + This method is not available in a server. + </remarks> + <param name="username"> + <para> + A <see cref="T:System.String"/> that represents the user name used to authenticate. + </para> + <para> + If <paramref name="username"/> is <see langword="null"/> or empty, + the credentials will be initialized and not be sent. + </para> + </param> + <param name="password"> + A <see cref="T:System.String"/> that represents the password for + <paramref name="username"/> used to authenticate. + </param> + <param name="preAuth"> + <c>true</c> if the <see cref="T:WebSocketSharp.WebSocket"/> sends the credentials for + the Basic authentication with the first handshake request to the server; + otherwise, <c>false</c>. + </param> + </member> + <member name="M:WebSocketSharp.WebSocket.SetProxy(System.String,System.String,System.String)"> + <summary> + Sets the HTTP proxy server URL to connect through, and if necessary, + a pair of <paramref name="username"/> and <paramref name="password"/> for + the proxy server authentication (Basic/Digest). + </summary> + <remarks> + This method is not available in a server. + </remarks> + <param name="url"> + <para> + A <see cref="T:System.String"/> that represents the HTTP proxy server URL to + connect through. The syntax must be http://<host>[:<port>]. + </para> + <para> + If <paramref name="url"/> is <see langword="null"/> or empty, + the url and credentials for the proxy will be initialized, + and the <see cref="T:WebSocketSharp.WebSocket"/> will not use the proxy to + connect through. + </para> + </param> + <param name="username"> + <para> + A <see cref="T:System.String"/> that represents the user name used to authenticate. + </para> + <para> + If <paramref name="username"/> is <see langword="null"/> or empty, + the credentials for the proxy will be initialized and not be sent. + </para> + </param> + <param name="password"> + A <see cref="T:System.String"/> that represents the password for + <paramref name="username"/> used to authenticate. + </param> + </member> + <member name="M:WebSocketSharp.WebSocket.System#IDisposable#Dispose"> + <summary> + Closes the connection and releases all associated resources. + </summary> + <remarks> + <para> + This method closes the connection with close status 1001 (going away). + </para> + <para> + And this method does nothing if the current state of the connection is + Closing or Closed. + </para> + </remarks> + </member> + <member name="T:WebSocketSharp.WebSocketException"> + <summary> + The exception that is thrown when a fatal error occurs in + the WebSocket communication. + </summary> + </member> + <member name="P:WebSocketSharp.WebSocketException.Code"> + <summary> + Gets the status code indicating the cause of the exception. + </summary> + <value> + One of the <see cref="T:WebSocketSharp.CloseStatusCode"/> enum values that represents + the status code indicating the cause of the exception. + </value> + </member> + <member name="F:WebSocketSharp.WebSocketFrame.EmptyPingBytes"> + <summary> + Represents the ping frame without the payload data as an array of <see cref="T:System.Byte"/>. + </summary> + <remarks> + The value of this field is created from a non masked frame, so it can only be used to + send a ping from a server. + </remarks> + </member> + <member name="T:WebSocketSharp.WebSocketState"> + <summary> + Indicates the state of a WebSocket connection. + </summary> + <remarks> + The values of this enumeration are defined in + <see href="http://www.w3.org/TR/websockets/#dom-websocket-readystate"> + The WebSocket API</see>. + </remarks> + </member> + <member name="F:WebSocketSharp.WebSocketState.Connecting"> + <summary> + Equivalent to numeric value 0. Indicates that the connection has not + yet been established. + </summary> + </member> + <member name="F:WebSocketSharp.WebSocketState.Open"> + <summary> + Equivalent to numeric value 1. Indicates that the connection has + been established, and the communication is possible. + </summary> + </member> + <member name="F:WebSocketSharp.WebSocketState.Closing"> + <summary> + Equivalent to numeric value 2. Indicates that the connection is + going through the closing handshake, or the close method has + been invoked. + </summary> + </member> + <member name="F:WebSocketSharp.WebSocketState.Closed"> + <summary> + Equivalent to numeric value 3. Indicates that the connection has + been closed or could not be established. + </summary> + </member> + </members> +</doc> diff --git a/Assets/Packages/WebSocketSharp-netstandard.1.0.1/lib/netstandard2.0/websocket-sharp.xml.meta b/Assets/Packages/WebSocketSharp-netstandard.1.0.1/lib/netstandard2.0/websocket-sharp.xml.meta new file mode 100644 index 0000000..f6c9543 --- /dev/null +++ b/Assets/Packages/WebSocketSharp-netstandard.1.0.1/lib/netstandard2.0/websocket-sharp.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cf0f4143cd53f4c9683577a5bfbc0649 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/MainScene.unity b/Assets/Scenes/MainScene.unity index c84b8bf..1a95a7c 100644 --- a/Assets/Scenes/MainScene.unity +++ b/Assets/Scenes/MainScene.unity @@ -10812,6 +10812,52 @@ Transform: - {fileID: 1342061459} m_Father: {fileID: 1617586590} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &979159584 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 979159585} + - component: {fileID: 979159586} + m_Layer: 0 + m_Name: GameManager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &979159585 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 979159584} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -1.1969378, y: 1.3545454, z: -0.41485047} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &979159586 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 979159584} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0ecd28734b48f4313bff134f6df55396, type: 3} + m_Name: + m_EditorClassIdentifier: + esp32IPAddress: 10.204.0.249 + esp32WebsocketPort: 81 --- !u!1001 &980743549 PrefabInstance: m_ObjectHideFlags: 0 @@ -19343,7 +19389,7 @@ PrefabInstance: - target: {fileID: 1446526844107249175, guid: 8c24f4efc20ae488386410c07ba7ec0c, type: 3} propertyPath: m_LocalPosition.x - value: -0.313 + value: 0.2 objectReference: {fileID: 0} - target: {fileID: 1446526844107249175, guid: 8c24f4efc20ae488386410c07ba7ec0c, type: 3} @@ -23867,3 +23913,4 @@ SceneRoots: - {fileID: 977726988} - {fileID: 1117825302} - {fileID: 350103768} + - {fileID: 979159585} diff --git a/Assets/packages.config b/Assets/packages.config new file mode 100644 index 0000000..c3e3167 --- /dev/null +++ b/Assets/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="WebSocketSharp-netstandard" version="1.0.1" manuallyInstalled="true" /> +</packages> \ No newline at end of file diff --git a/Assets/packages.config.meta b/Assets/packages.config.meta new file mode 100644 index 0000000..e46acc5 --- /dev/null +++ b/Assets/packages.config.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 19514aafa78aa4bee841c36d9526ca93 +labels: +- NuGetForUnity +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/manifest.json b/Packages/manifest.json index 4eecedb..9f1ede9 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -1,5 +1,6 @@ { "dependencies": { + "com.github-glitchenzo.nugetforunity": "https://github.com/GlitchEnzo/NuGetForUnity.git?path=/src/NuGetForUnity", "com.meta.xr.sdk.all": "60.0.0", "com.meta.xr.sdk.interaction.ovr.samples": "62.0.0", "com.unity.collab-proxy": "2.2.0", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index 2edf150..86e344b 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -1,5 +1,12 @@ { "dependencies": { + "com.github-glitchenzo.nugetforunity": { + "version": "https://github.com/GlitchEnzo/NuGetForUnity.git?path=/src/NuGetForUnity", + "depth": 0, + "source": "git", + "dependencies": {}, + "hash": "75f68222d0a4bd2b468dbf3e6a17a191d28041ab" + }, "com.meta.xr.mrutilitykit": { "version": "60.0.0", "depth": 1,