From 97c51bcc8fc16b9d6554d7d13dddb61d09f9a70f Mon Sep 17 00:00:00 2001 From: sta Date: Mon, 18 Oct 2010 22:28:56 +0900 Subject: [PATCH] first commit --- websocket-sharp.userprefs | 12 + websocket-sharp/AssemblyInfo.cs | 27 ++ websocket-sharp/Ext.cs | 51 ++ websocket-sharp/IWsStream.cs | 41 ++ websocket-sharp/WebSocket.cs | 450 ++++++++++++++++++ websocket-sharp/WsState.cs | 40 ++ websocket-sharp/WsStream.cs | 90 ++++ websocket-sharp/bin/Debug/websocket-sharp.dll | Bin 0 -> 10752 bytes .../bin/Debug/websocket-sharp.dll.mdb | Bin 0 -> 2469 bytes .../bin/Debug_Ubuntu/websocket-sharp.dll | Bin 0 -> 12800 bytes .../bin/Debug_Ubuntu/websocket-sharp.dll.mdb | Bin 0 -> 3387 bytes .../bin/Release/websocket-sharp.dll | Bin 0 -> 9728 bytes .../bin/Release_Ubuntu/websocket-sharp.dll | Bin 0 -> 9728 bytes websocket-sharp/websocket-sharp.csproj | 67 +++ websocket-sharp/websocket-sharp.pidb | Bin 0 -> 10167 bytes wsclient/AssemblyInfo.cs | 27 ++ wsclient/bin/Debug/websocket-sharp.dll | Bin 0 -> 10752 bytes wsclient/bin/Debug/websocket-sharp.dll.mdb | Bin 0 -> 2469 bytes wsclient/bin/Debug/wsclient.exe | Bin 0 -> 4608 bytes wsclient/bin/Debug/wsclient.exe.mdb | Bin 0 -> 807 bytes wsclient/bin/Debug_Ubuntu/websocket-sharp.dll | Bin 0 -> 12800 bytes .../bin/Debug_Ubuntu/websocket-sharp.dll.mdb | Bin 0 -> 3387 bytes wsclient/bin/Debug_Ubuntu/wsclient.exe | Bin 0 -> 5120 bytes wsclient/bin/Debug_Ubuntu/wsclient.exe.mdb | Bin 0 -> 879 bytes wsclient/bin/Release/websocket-sharp.dll | Bin 0 -> 9728 bytes wsclient/bin/Release/wsclient.exe | Bin 0 -> 4608 bytes .../bin/Release_Ubuntu/websocket-sharp.dll | Bin 0 -> 9728 bytes wsclient/bin/Release_Ubuntu/wsclient.exe | Bin 0 -> 5120 bytes wsclient/wsclient.cs | 77 +++ wsclient/wsclient.csproj | 1 + wsclient/wsclient.pidb | Bin 0 -> 3211 bytes 31 files changed, 883 insertions(+) create mode 100644 websocket-sharp.userprefs create mode 100644 websocket-sharp/AssemblyInfo.cs create mode 100644 websocket-sharp/Ext.cs create mode 100644 websocket-sharp/IWsStream.cs create mode 100644 websocket-sharp/WebSocket.cs create mode 100644 websocket-sharp/WsState.cs create mode 100644 websocket-sharp/WsStream.cs create mode 100755 websocket-sharp/bin/Debug/websocket-sharp.dll create mode 100644 websocket-sharp/bin/Debug/websocket-sharp.dll.mdb create mode 100755 websocket-sharp/bin/Debug_Ubuntu/websocket-sharp.dll create mode 100644 websocket-sharp/bin/Debug_Ubuntu/websocket-sharp.dll.mdb create mode 100755 websocket-sharp/bin/Release/websocket-sharp.dll create mode 100755 websocket-sharp/bin/Release_Ubuntu/websocket-sharp.dll create mode 100644 websocket-sharp/websocket-sharp.csproj create mode 100644 websocket-sharp/websocket-sharp.pidb create mode 100644 wsclient/AssemblyInfo.cs create mode 100755 wsclient/bin/Debug/websocket-sharp.dll create mode 100644 wsclient/bin/Debug/websocket-sharp.dll.mdb create mode 100755 wsclient/bin/Debug/wsclient.exe create mode 100644 wsclient/bin/Debug/wsclient.exe.mdb create mode 100755 wsclient/bin/Debug_Ubuntu/websocket-sharp.dll create mode 100644 wsclient/bin/Debug_Ubuntu/websocket-sharp.dll.mdb create mode 100755 wsclient/bin/Debug_Ubuntu/wsclient.exe create mode 100644 wsclient/bin/Debug_Ubuntu/wsclient.exe.mdb create mode 100755 wsclient/bin/Release/websocket-sharp.dll create mode 100755 wsclient/bin/Release/wsclient.exe create mode 100755 wsclient/bin/Release_Ubuntu/websocket-sharp.dll create mode 100755 wsclient/bin/Release_Ubuntu/wsclient.exe create mode 100644 wsclient/wsclient.cs create mode 100644 wsclient/wsclient.csproj create mode 100644 wsclient/wsclient.pidb diff --git a/websocket-sharp.userprefs b/websocket-sharp.userprefs new file mode 100644 index 00000000..beeb6c0a --- /dev/null +++ b/websocket-sharp.userprefs @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/websocket-sharp/AssemblyInfo.cs b/websocket-sharp/AssemblyInfo.cs new file mode 100644 index 00000000..89a8f31a --- /dev/null +++ b/websocket-sharp/AssemblyInfo.cs @@ -0,0 +1,27 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following attributes. +// Change them to the values specific to your project. + +[assembly: AssemblyTitle("websocket-sharp")] +[assembly: AssemblyDescription("A C# implementation of a WebSocket protocol client")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("websocket-sharp.dll")] +[assembly: AssemblyCopyright("sta.blockhead")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". +// The form "{Major}.{Minor}.*" will automatically update the build and revision, +// and "{Major}.{Minor}.{Build}.*" will update just the revision. + +[assembly: AssemblyVersion("1.0.0.*")] + +// The following attributes are used to specify the signing key for the assembly, +// if desired. See the Mono documentation for more information about signing. + +//[assembly: AssemblyDelaySign(false)] +//[assembly: AssemblyKeyFile("")] + diff --git a/websocket-sharp/Ext.cs b/websocket-sharp/Ext.cs new file mode 100644 index 00000000..901ccaeb --- /dev/null +++ b/websocket-sharp/Ext.cs @@ -0,0 +1,51 @@ +#region MIT License +/** + * Ext.cs + * + * The MIT License + * + * Copyright (c) 2010 sta.blockhead + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#endregion + +using System; +using System.Collections.Generic; + +namespace WebSocketSharp +{ + public static class Ext + { + public static bool EqualsWithSaveTo(this int asbyte, char c, List dist) + { + byte b = (byte)asbyte; + dist.Add(b); + return b == Convert.ToByte(c); + } + + public static void NotEqualsDo(this string a, string b, Action action) + { + if (a != b) + { + action(a); + } + } + } +} diff --git a/websocket-sharp/IWsStream.cs b/websocket-sharp/IWsStream.cs new file mode 100644 index 00000000..43b17b1b --- /dev/null +++ b/websocket-sharp/IWsStream.cs @@ -0,0 +1,41 @@ +#region MIT License +/** + * IWsStream.cs + * + * The MIT License + * + * Copyright (c) 2010 sta.blockhead + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#endregion + +using System; + +namespace WebSocketSharp +{ + public interface IWsStream : IDisposable + { + void Close(); + int Read(byte[] buffer, int offset, int size); + int ReadByte(); + void Write(byte[] buffer, int offset, int count); + void WriteByte(byte value); + } +} diff --git a/websocket-sharp/WebSocket.cs b/websocket-sharp/WebSocket.cs new file mode 100644 index 00000000..af88a1b2 --- /dev/null +++ b/websocket-sharp/WebSocket.cs @@ -0,0 +1,450 @@ +#region MIT License +/** + * WebSocket.cs + * + * A C# implementation of a WebSocket protocol client. + * This code derived from WebSocket.java (http://github.com/adamac/Java-WebSocket-client). + * + * The MIT License + * + * Copyright (c) 2009 Adam MacBeth + * Copyright (c) 2010 sta.blockhead + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#endregion + +#if NOTIFY +using Notifications; +#endif +using System; +using System.Collections.Generic; +using System.IO; +using System.Net; +using System.Net.Security; +using System.Net.Sockets; +using System.Text; +using System.Threading; + +namespace WebSocketSharp +{ + public delegate void MessageEventHandler(object sender, string eventdata); + + public class WebSocket : IDisposable + { + private Uri uri; + public string Url + { + get + { + return uri.ToString(); + } + } + + private volatile WsState readyState; + public WsState ReadyState + { + get + { + return readyState; + } + + private set + { + switch (value) + { + case WsState.OPEN: + if (OnOpen != null) + { + OnOpen(this, EventArgs.Empty); + } + goto default; + case WsState.CLOSING: + case WsState.CLOSED: + close(value); + break; + default: + readyState = value; + break; + } + } + } + + private StringBuilder unTransmittedBuffer; + public String UnTransmittedBuffer + { + get { return unTransmittedBuffer.ToString(); } + } + + private long bufferedAmount; + public long BufferedAmount + { + get { return bufferedAmount; } + } + + private string protocol; + public string Protocol + { + get { return protocol; } + } + + private TcpClient tcpClient; + private NetworkStream netStream; + private SslStream sslStream; + private IWsStream wsStream; + private Thread msgThread; +#if NOTIFY + private Notification msgNf; + public Notification MsgNf + { + get { return msgNf; } + } +#endif + public event EventHandler OnOpen; + public event MessageEventHandler OnMessage; + public event MessageEventHandler OnError; + public event EventHandler OnClose; + + public WebSocket(string url) + : this(url, String.Empty) + { + } + + public WebSocket(string url, string protocol) + { + this.uri = new Uri(url); + string scheme = uri.Scheme; + + if (scheme != "ws" && scheme != "wss") + { + throw new ArgumentException("Unsupported scheme: " + scheme); + } + + this.readyState = WsState.CONNECTING; + this.unTransmittedBuffer = new StringBuilder(); + this.bufferedAmount = 0; + this.protocol = protocol; + } + + public void Connect() + { + createConnection(); + doHandshake(); + + this.msgThread = new Thread(new ThreadStart(message)); + msgThread.IsBackground = true; + msgThread.Start(); + } + + public void Send(string data) + { + if (readyState == WsState.CONNECTING) + { + throw new InvalidOperationException("Handshake not complete."); + } + + byte[] dataBuffer = Encoding.UTF8.GetBytes(data); + + try + { + wsStream.WriteByte(0x00); + wsStream.Write(dataBuffer, 0, dataBuffer.Length); + wsStream.WriteByte(0xff); + } + catch (Exception e) + { + unTransmittedBuffer.Append(data); + bufferedAmount += dataBuffer.Length; + + if (OnError != null) + { + OnError(this, e.Message); + } +#if DEBUG + Console.WriteLine("WS: Error @Send: {0}", e.Message); +#endif + } + } + + public void Close() + { + ReadyState = WsState.CLOSING; + } + + public void Dispose() + { + Close(); + } + + private void close(WsState state) + { +#if DEBUG + Console.WriteLine("WS: Info @close: Current thread IsBackground: {0}", Thread.CurrentThread.IsBackground); +#endif + if (readyState == WsState.CLOSING || + readyState == WsState.CLOSED) + { + return; + } + + readyState = state; + + if (OnClose != null) + { + OnClose(this, EventArgs.Empty); + } + + if (wsStream != null && tcpClient.Connected) + { + try + { + wsStream.WriteByte(0xff); + wsStream.WriteByte(0x00); + } + catch (Exception e) + { +#if DEBUG + Console.WriteLine("WS: Error @close: {0}", e.Message); +#endif + } + } + + if (!(Thread.CurrentThread.IsBackground) && + msgThread != null && msgThread.IsAlive) + { + msgThread.Join(); + } + + if (wsStream != null) + { + wsStream.Dispose(); + wsStream = null; + } + + if (tcpClient != null) + { + tcpClient.Close(); + tcpClient = null; + } + } + + private void createConnection() + { + string scheme = uri.Scheme; + string host = uri.DnsSafeHost; + int port = uri.Port; + + if (port <= 0) + { + if (scheme == "wss") + { + port = 443; + } + else + { + port = 80; + } + } + + this.tcpClient = new TcpClient(host, port); + this.netStream = tcpClient.GetStream(); + + if (scheme == "wss") + { + this.sslStream = new SslStream(netStream); + sslStream.AuthenticateAsClient(host); + this.wsStream = new WsStream(sslStream); + } + else + { + this.wsStream = new WsStream(netStream); + } + } + + private void doHandshake() + { + string path = uri.PathAndQuery; + string host = uri.DnsSafeHost; + string origin = "http://" + host; + + int port = ((IPEndPoint)tcpClient.Client.RemoteEndPoint).Port; + if (port != 80) + { + host += ":" + port; + } + + string subprotocol = protocol != String.Empty + ? String.Format("Sec-WebSocket-Protocol: {0}\r\n", protocol) + : protocol; + + string request = "GET " + path + " HTTP/1.1\r\n" + + "Upgrade: WebSocket\r\n" + + "Connection: Upgrade\r\n" + + subprotocol + + "Host: " + host + "\r\n" + + "Origin: " + origin + "\r\n" + + "\r\n"; +#if DEBUG + Console.WriteLine("WS: Info @doHandshake: Handshake from client: \n{0}", request); +#endif + byte[] sendBuffer = Encoding.UTF8.GetBytes(request); + wsStream.Write(sendBuffer, 0, sendBuffer.Length); + + string[] response; + List rawdata = new List(); + + while (true) + { + if (wsStream.ReadByte().EqualsWithSaveTo('\r', rawdata) && + wsStream.ReadByte().EqualsWithSaveTo('\n', rawdata) && + wsStream.ReadByte().EqualsWithSaveTo('\r', rawdata) && + wsStream.ReadByte().EqualsWithSaveTo('\n', rawdata)) + { + break; + } + } + + response = Encoding.UTF8.GetString(rawdata.ToArray()) + .Replace("\r\n", "\n").Replace("\n\n", "\n") + .Split('\n'); +#if DEBUG + Console.WriteLine("WS: Info @doHandshake: Handshake from server:"); + foreach (string s in response) + { + Console.WriteLine("{0}", s); + } +#endif + Action action = s => { throw new IOException("Invalid handshake response: " + s); }; + response[0].NotEqualsDo("HTTP/1.1 101 Web Socket Protocol Handshake", action); + response[1].NotEqualsDo("Upgrade: WebSocket", action); + response[2].NotEqualsDo("Connection: Upgrade", action); + + for (int i = 3; i < response.Length; i++) + { + if (response[i].Contains("WebSocket-Protocol:")) +// if (response[i].Contains("Sec-WebSocket-Protocol:")) + { + int j = response[i].IndexOf(":"); + protocol = response[i].Substring(j + 1).Trim(); + } + } +#if DEBUG + Console.WriteLine("WS: Info @doHandshake: Sub protocol: {0}", protocol); +#endif + + ReadyState = WsState.OPEN; + } + + private void message() + { +#if DEBUG + Console.WriteLine("WS: Info @message: Current thread IsBackground: {0}", Thread.CurrentThread.IsBackground); +#endif + string data; +#if NOTIFY + this.msgNf = new Notification(); + msgNf.AddHint("append", "allowed"); +#endif + while (readyState == WsState.OPEN) + { + while (readyState == WsState.OPEN && netStream.DataAvailable) + { + data = receive(); + + if (OnMessage != null && data != null) + { + OnMessage(this, data); + } + } + } +#if DEBUG + Console.WriteLine("WS: Info @message: Exit message method."); +#endif + } + + private string receive() + { + try + { + byte frame_type = (byte)wsStream.ReadByte(); + byte b; + + if ((frame_type & 0x80) == 0x80) + { + // Skip data frame + int len = 0; + int b_v; + + do + { + b = (byte)wsStream.ReadByte(); + b_v = b & 0x7f; + len = len * 128 + b_v; + } + while ((b & 0x80) == 0x80); + + for (int i = 0; i < len; i++) + { + wsStream.ReadByte(); + } + + if (frame_type == 0xff && len == 0) + { + ReadyState = WsState.CLOSED; +#if DEBUG + Console.WriteLine("WS: Info @receive: Server start closing handshake."); +#endif + } + } + else if (frame_type == 0x00) + { + List raw_data = new List(); + + while (true) + { + b = (byte)wsStream.ReadByte(); + + if (b == 0xff) + { + break; + } + + raw_data.Add(b); + } + + return Encoding.UTF8.GetString(raw_data.ToArray()); + } + } + catch (Exception e) + { + if (OnError != null) + { + OnError(this, e.Message); + } + + ReadyState = WsState.CLOSED; +#if DEBUG + Console.WriteLine("WS: Error @receive: {0}", e.Message); +#endif + } + + return null; + } + } +} diff --git a/websocket-sharp/WsState.cs b/websocket-sharp/WsState.cs new file mode 100644 index 00000000..0de3717e --- /dev/null +++ b/websocket-sharp/WsState.cs @@ -0,0 +1,40 @@ +#region MIT License +/** + * WsState.cs + * + * The MIT License + * + * Copyright (c) 2010 sta.blockhead + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#endregion + +using System; + +namespace WebSocketSharp +{ + public enum WsState + { + CONNECTING, + OPEN, + CLOSING, + CLOSED + } +} diff --git a/websocket-sharp/WsStream.cs b/websocket-sharp/WsStream.cs new file mode 100644 index 00000000..112c6ac9 --- /dev/null +++ b/websocket-sharp/WsStream.cs @@ -0,0 +1,90 @@ +#region MIT License +/** + * WsStream.cs + * + * The MIT License + * + * Copyright (c) 2010 sta.blockhead + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#endregion + +using System; +using System.Collections.Generic; +using System.IO; +using System.Net.Security; +using System.Net.Sockets; +using System.Reflection; + +namespace WebSocketSharp +{ + public class WsStream : IWsStream + where T : Stream + { + private T innerStream; + + public WsStream(T innerStream) + { + if (innerStream == null) + { + throw new ArgumentNullException("innerStream"); + } + + Type streamType = innerStream.GetType(); + if (streamType != typeof(NetworkStream) && + streamType != typeof(SslStream)) + { + throw new ArgumentException("Unsupported Stream type: " + streamType.ToString()); + } + + this.innerStream = innerStream; + } + + public void Close() + { + innerStream.Close(); + } + + public void Dispose() + { + innerStream.Dispose(); + } + + public int Read(byte[] buffer, int offset, int size) + { + return innerStream.Read(buffer, offset, size); + } + + public int ReadByte() + { + return innerStream.ReadByte(); + } + + public void Write(byte[] buffer, int offset, int count) + { + innerStream.Write(buffer, offset, count); + } + + public void WriteByte(byte value) + { + innerStream.WriteByte(value); + } + } +} diff --git a/websocket-sharp/bin/Debug/websocket-sharp.dll b/websocket-sharp/bin/Debug/websocket-sharp.dll new file mode 100755 index 0000000000000000000000000000000000000000..ed2265f030ffc7545938683ba00683e41da91d84 GIT binary patch literal 10752 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 A{{R30 literal 0 HcmV?d00001 diff --git a/websocket-sharp/bin/Debug/websocket-sharp.dll.mdb b/websocket-sharp/bin/Debug/websocket-sharp.dll.mdb new file mode 100644 index 0000000000000000000000000000000000000000..cf42014ab83e969f90bd4e847c8f55b26a38a69f GIT binary patch literal 2469 zcmbVOYiv|S6rMA8cJA$+ZHrX!QN;&J1hoi)jkcoOZf#LiOf5vK;&wZwb+@~9?*)n& z@c|@K5s_9*q$;8!zG5Qa3ke8D5u;Ivh(?VizOV>te4^ktd)GDAA12)PoA0}49_P%N z$KE3!pZn+V5ntDgWx;b`RaNITL)JtWbaxGHjP7{wu>!_AP_@-&On~R({Y0?QI;W3; zKG$LF41&l#rk{BZ;XxJ4y|UWTt?70>+Vf+Xr1reglQZcXblmqw&(cj^I-bz}nOR6o?AI#^ZNZ`&p+>c2s#}-*Ydfu1}shYHQ?=+s|Kl!CB8UtQyB3F)r(8d%kWzHlVWV zbTWyxX-lWPvRa+enYMUQKKgpIN}QO5t`@WZziUBm)QOk7Idz%#2md3>f~ z8hjq&eW7pBfSB~+t-4(^&a*9<40=qsoC(WHaEU%ir&RUS$1g!o>vk#blD!f`!>46w za*cJp6tBt+1Fi2%v0d)STU&y*UrX_g+%wR6P>MtHR-Ch7-04BvZd>%&_YJf@X^W@q zr}NgIPz=hlxiz3*_uJZFVD+1VsqLGBI4yvY%-Ih*t5spM7}^M{Vu<$RPk--L{I zS8h(kP2E06?03FL9VgNjbDLv+tZGI}i_Wl65Jch80iQBC;D&~Pr>r0nbC-|_aRHI? zly;L!CAt=kDN$Z`T=lLs4!R0NZ^4$}0z%72(X!gu`wPV0g75P7)v#9>`#e|7cNe(X zeWgPMfv@rB1blI0z%!pg%bEA0SVqfG-cL{DHrh_=%c;F|D5nuBA=lHX=GA>=l@CvJ#QfI37p?ZHAefiv5l+09qs*SJ zANV5{iTTzN99_#g7zDZd64mQiHZLW2&T>_wcyp1ujz@|bU3aCj4x01J!?etGO1ir4 z$}ZmTO1vLF5H^b>vawph@WWb&hSw3Vs58T_;S_doD~wasOO zlCr5#Y%Tn#kTF|O8~Qa(o5{JA)F~cvkc?@@gH6;#%x%fU+VwPlc84ZO+6@P8*%w4K zYzgj_6Dx^dnkLZ@BYrEvLdyx2_DXt_$a#e}=C;Hh+LKfLCPV5MTA1A;??5XxV`=z! zrM$DhbWc9}p9Hvbm#XN33M9yntMN158B?m_>apmCQZt9eMPg&oqGFuK+_>xr7X9~i zU6y|>Yfjh2QqB0OP3Y4`-jcg!BiX%B>G>I4wG&PYcqH=i6essy<79iW*irmR@u$Ve zJCi#(W7`1y%U@CS0~YjH6vF`A&9V-B0f3uUUI%UfaPvtYoB(hE$%WwC09*p{Vem2l z=Tfc%KLg+>$hX0p0qk7a2i^r>`Q>lmeE=3umc!x6KoRt1;3$BENDXcT20`Bj&HzV1 z_kmvr21EZ2-UpOG4@R&ya3u6nZ~_2h4Yo`G`V#*e(F!vU6dCJN6LR)LW=D^)kpIi-1l2Ch%XaE{($g literal 0 HcmV?d00001 diff --git a/websocket-sharp/bin/Debug_Ubuntu/websocket-sharp.dll b/websocket-sharp/bin/Debug_Ubuntu/websocket-sharp.dll new file mode 100755 index 0000000000000000000000000000000000000000..136168f1606d61f0d958fe9812d32e5d1c19edfe GIT binary patch literal 12800 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 literal 0 HcmV?d00001 diff --git a/websocket-sharp/bin/Debug_Ubuntu/websocket-sharp.dll.mdb b/websocket-sharp/bin/Debug_Ubuntu/websocket-sharp.dll.mdb new file mode 100644 index 0000000000000000000000000000000000000000..1e0f632616c57092248b564e2829545c8869b77d GIT binary patch literal 3387 zcmbtXdr(x@89(2>hs)i2c0s^3KG3mBh?WVcQ9D+uA|Mi{;uO(|Cbi3Qk(Gs|dl!^C zt*_KfB}o%OF^QV^%GjuAO*=lQ*81q!iSd!iq`{a>gHe%MCu)s}iu8B(-fUa?M;p8F z-QVy2?sw03zVEztd%wA)YiN2${wQXDQd@6te|+bW{H^;>X003hg*o2CSPdSv8jNW` zf%_3a$v<-2JPkZUFt&$4oR54@e!B6|fv)HsV+C0ip(-=Wiul4o)3UN=ghLBVf5ggK zXqH+bf2A3D+^X<}YyRUt$Fj_-(qMgIb$KY$Z*@I4r!{-a^1?NH#w}&l+dsWtNF7CU z&L(`8I&N^{<}VA_goh23zbJzCH*UL@eRcNg!o3r!_8sY)ai=Zk{jNQO29L?Ob#L$a zr8O$cd)W48o2A9kL=ojV$`v)!bDl{%^l1OO_IEaw4t)0X!)H=B8$rUR zuL@E0cN)WQ)96X7(((_k4!1Up8u``UmJ9hsmwvVONOEA~w^{E0lZg}L{Z98Z$oBoC>X>v3xukz z%mTC838}k3 zBK67tszs-OB^+s{xhT@>YhHnL%L3K&d-Ra2j58J|*Pa5 zxT^kCag)Gv^>dxy(C^|oG0pNEd6x?)Fq)H25!#m$2{2Y*lrU?Yq_B z+l)7Rss|0;YWyyy*4w^k4Svpeucvz1;8%=}m^v2u$PV8(c$e`YCQl?$EagVQo5ULI zu8iA-7?4er{vDfVPqlICEZM_65|<3WXc}YWjy8%%%eUVWe1|wG-;U-mmy88c?hyQ{ z=#0reGA2v8TkxgsW!Tki@A;0r*3FyU>teFy$h+LU#l1Twzf2^?XCJHd%a)G2`3d(Q z@k}8yRc4g=BEHGB<>h9W#o1l<^tCZ}b78h1+X-zm33Hd`orrKRrv`{!OKTsX( zJFoFYDwuBfwBRWlf393tNVzJn(WQP^y{-~Jr+%#3_lI~>9BC)`ia3gI!&TOBof1vz z;xw^AZ&3V^&(#=WeMVkN>0LD!`LF!2Xb%0p3!XRDGd$J8$+HDJ4K^K@E#enrYEO?GApBxm-r)fibHbvwDY~Sj^4|>_Ew~+ z*(4gJyveI=_HK#EIgY&Fs~zwjjLB0-ye+-Yc(t?Mb1``uiPxlj*{fagcEscvBz8!- z%d0)`cE{ur$GfSIwx-Y8K5`;4EgvWFIG6%n4x9s1!B+wo!|<;i#bqZFz~it-z^?!=!1{t$AfZXHe&DBoyJ7voKSXlR!Ulk+Be^c{RPavl-LQe+MMyLc zHWa)WxEz)S-U8eTdldWxQ2zW#2fqN62kK+sw}4k+!@v!BmcfRDe+&2sO#T{?KV2|Z vtPO^7V&fp9?Cf4S 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 b#OD-Zz*k1#|1kig@zVJW literal 0 HcmV?d00001 diff --git a/websocket-sharp/bin/Release_Ubuntu/websocket-sharp.dll b/websocket-sharp/bin/Release_Ubuntu/websocket-sharp.dll new file mode 100755 index 0000000000000000000000000000000000000000..0d8c2695566e094cf54b455006be4c565e2c73d8 GIT binary patch literal 9728 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 literal 0 HcmV?d00001 diff --git a/websocket-sharp/websocket-sharp.csproj b/websocket-sharp/websocket-sharp.csproj new file mode 100644 index 00000000..5d91eaf0 --- /dev/null +++ b/websocket-sharp/websocket-sharp.csproj @@ -0,0 +1,67 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {B357BAC7-529E-4D81-A0D2-71041B19C8DE} + Library + WebSocketSharp + websocket-sharp + v3.5 + + + true + full + false + bin\Debug + DEBUG + prompt + 4 + false + + + none + false + bin\Release + prompt + 4 + false + + + true + full + false + bin\Debug_Ubuntu + DEBUG,NOTIFY + prompt + 4 + false + + + none + false + bin\Release_Ubuntu + prompt + 4 + false + NOTIFY + + + + + + notify-sharp + + + + + + + + + + + + \ No newline at end of file diff --git a/websocket-sharp/websocket-sharp.pidb b/websocket-sharp/websocket-sharp.pidb new file mode 100644 index 0000000000000000000000000000000000000000..143f590245b0f71cd47940c80da99af5ec265a06 GIT binary patch literal 10167 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 Y$0b98O^z6H7LkKbnPbh!+nwwBFFR^r?EnA( literal 0 HcmV?d00001 diff --git a/wsclient/AssemblyInfo.cs b/wsclient/AssemblyInfo.cs new file mode 100644 index 00000000..ade05a55 --- /dev/null +++ b/wsclient/AssemblyInfo.cs @@ -0,0 +1,27 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following attributes. +// Change them to the values specific to your project. + +[assembly: AssemblyTitle("wsclient")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". +// The form "{Major}.{Minor}.*" will automatically update the build and revision, +// and "{Major}.{Minor}.{Build}.*" will update just the revision. + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes are used to specify the signing key for the assembly, +// if desired. See the Mono documentation for more information about signing. + +//[assembly: AssemblyDelaySign(false)] +//[assembly: AssemblyKeyFile("")] + diff --git a/wsclient/bin/Debug/websocket-sharp.dll b/wsclient/bin/Debug/websocket-sharp.dll new file mode 100755 index 0000000000000000000000000000000000000000..ed2265f030ffc7545938683ba00683e41da91d84 GIT binary patch literal 10752 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 A{{R30 literal 0 HcmV?d00001 diff --git a/wsclient/bin/Debug/websocket-sharp.dll.mdb b/wsclient/bin/Debug/websocket-sharp.dll.mdb new file mode 100644 index 0000000000000000000000000000000000000000..cf42014ab83e969f90bd4e847c8f55b26a38a69f GIT binary patch literal 2469 zcmbVOYiv|S6rMA8cJA$+ZHrX!QN;&J1hoi)jkcoOZf#LiOf5vK;&wZwb+@~9?*)n& z@c|@K5s_9*q$;8!zG5Qa3ke8D5u;Ivh(?VizOV>te4^ktd)GDAA12)PoA0}49_P%N z$KE3!pZn+V5ntDgWx;b`RaNITL)JtWbaxGHjP7{wu>!_AP_@-&On~R({Y0?QI;W3; zKG$LF41&l#rk{BZ;XxJ4y|UWTt?70>+Vf+Xr1reglQZcXblmqw&(cj^I-bz}nOR6o?AI#^ZNZ`&p+>c2s#}-*Ydfu1}shYHQ?=+s|Kl!CB8UtQyB3F)r(8d%kWzHlVWV zbTWyxX-lWPvRa+enYMUQKKgpIN}QO5t`@WZziUBm)QOk7Idz%#2md3>f~ z8hjq&eW7pBfSB~+t-4(^&a*9<40=qsoC(WHaEU%ir&RUS$1g!o>vk#blD!f`!>46w za*cJp6tBt+1Fi2%v0d)STU&y*UrX_g+%wR6P>MtHR-Ch7-04BvZd>%&_YJf@X^W@q zr}NgIPz=hlxiz3*_uJZFVD+1VsqLGBI4yvY%-Ih*t5spM7}^M{Vu<$RPk--L{I zS8h(kP2E06?03FL9VgNjbDLv+tZGI}i_Wl65Jch80iQBC;D&~Pr>r0nbC-|_aRHI? zly;L!CAt=kDN$Z`T=lLs4!R0NZ^4$}0z%72(X!gu`wPV0g75P7)v#9>`#e|7cNe(X zeWgPMfv@rB1blI0z%!pg%bEA0SVqfG-cL{DHrh_=%c;F|D5nuBA=lHX=GA>=l@CvJ#QfI37p?ZHAefiv5l+09qs*SJ zANV5{iTTzN99_#g7zDZd64mQiHZLW2&T>_wcyp1ujz@|bU3aCj4x01J!?etGO1ir4 z$}ZmTO1vLF5H^b>vawph@WWb&hSw3Vs58T_;S_doD~wasOO zlCr5#Y%Tn#kTF|O8~Qa(o5{JA)F~cvkc?@@gH6;#%x%fU+VwPlc84ZO+6@P8*%w4K zYzgj_6Dx^dnkLZ@BYrEvLdyx2_DXt_$a#e}=C;Hh+LKfLCPV5MTA1A;??5XxV`=z! zrM$DhbWc9}p9Hvbm#XN33M9yntMN158B?m_>apmCQZt9eMPg&oqGFuK+_>xr7X9~i zU6y|>Yfjh2QqB0OP3Y4`-jcg!BiX%B>G>I4wG&PYcqH=i6essy<79iW*irmR@u$Ve zJCi#(W7`1y%U@CS0~YjH6vF`A&9V-B0f3uUUI%UfaPvtYoB(hE$%WwC09*p{Vem2l z=Tfc%KLg+>$hX0p0qk7a2i^r>`Q>lmeE=3umc!x6KoRt1;3$BENDXcT20`Bj&HzV1 z_kmvr21EZ2-UpOG4@R&ya3u6nZ~_2h4Yo`G`V#*e(F!vU6dCJN6LR)LW=D^)kpIi-1l2Ch%XaE{($g literal 0 HcmV?d00001 diff --git a/wsclient/bin/Debug/wsclient.exe b/wsclient/bin/Debug/wsclient.exe new file mode 100755 index 0000000000000000000000000000000000000000..d942ac3b2e0a38a07192235757057fe5090f8c7d GIT binary patch literal 4608 zcmeHKO>7)j9sj-c?mFJ!wH=^Mg-OT6RBmXtYu8bo$fTQiw}~q!4p}!L1+imPh&f^y&Z%*A(D{oG%ZMc!u z3WN2~Zdwi7_k-A~Yb$K~mg`&P)vDDD99@BDyMw&iud+an z5*e5jt5ZvCWpoysRA1dS!*(Jkn!JE<^Ve@XtQfEyw18D1O28vB5xdJ(;3Kyx4nb^Po;-aGweEdo+6(Gz=Q&2%c8AYAy?>y-P@O(B4bOP z><6nqYWd=kqRdm3=IwQ{Vs7$aHus}RR%;M|#7V#Czv-qvS+Xk%;$ggsY2wcezCmghf51^%{)xWFafg;-^B7KM*~ z!f)_AXZfqV9}D;ShMs+KSbrXd~9E7;3>rv3SuH&Q8h8?zWS=XzE z?^9KyIH#k?Ue}cy+K6)3_YEv0icg4uy;KF>G>d5VUHQXWO>t##^Xr-@$U(jaoru*Xf*)8aJbc=W=jZ zJQp}^PoL~b3VKtcvS~M4G{2C1U$J=dTCHX`ryF)-Ll^I5XJPJRJLHL76!K)VRx2Wa z?z6Kv6-ByP_qNvD*wd$Cp744**4T4cnzzzJKVOd9w&~1sVZ{Cfl=Hh)2&@Lq}Z5L~us?ni*)P?+QG86A@0}QT{y6VFNbX4N?(e$`?>Hzejie%PZ2kHZevmwF(7s&1^M7-PEvxAt_))pg!~1pCqyG<$b#DU%ddR#(gX8% zzLU0;%4e*Unmm{xd0;dRrS=Kr`L)VtkV@qRReo|Pdtj8uN_{e)8BQG-G1AHWsKUP9 zHbX{94~OKITT9({Ika2n1HZD_&}N0X*MpmpN*kk>N8Y}4;4P>8VkQ03KkoZU_cJ5@ zAC?cy49M4xZ(@G(?@cLrEfn{Vi``k)&zFGP16TU()I6n^P(_Vc!9`Nb{F0m}zf62G zd3ED=>9^la?tO*1*PJn-rG0|lQsjF%5Z1`#U7;A&<~ezi=gZ@%T858nJULRPjn^8r zHl-2uHcy{Rt#9;v)uiVcRB=o(tz632_lPuZY?8ArIFCA!Z&-}c_X0fwIB4@eh&dWf zKI-){%dcgT^)Y^l=M6Pax`<=EEu>5{D}^OSX!5p@ac*%|Y;xM@t)9)j{p_}xF>zMt zwN7u(L~JpZWVOyaO8&=?Sc`laDl<#58L4lq`_bfvYtY}N)~8p2?Ix>~MZVfpZ+^;@ zimmj}qGf+xcgGOl$$>m2H;FBeNQ<>(=CQkiyJrx5&%FN}mQ7Bpom^!VWd^$OgiB^~ r_qYagdt}%ACA-GqNSpKzaovnI883(Y!7Ens)=tUB{;>St&A`6_RvRE| literal 0 HcmV?d00001 diff --git a/wsclient/bin/Debug/wsclient.exe.mdb b/wsclient/bin/Debug/wsclient.exe.mdb new file mode 100644 index 0000000000000000000000000000000000000000..168fde3d692c357204aa30a655c2de5a269c318f GIT binary patch literal 807 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 literal 0 HcmV?d00001 diff --git a/wsclient/bin/Debug_Ubuntu/websocket-sharp.dll.mdb b/wsclient/bin/Debug_Ubuntu/websocket-sharp.dll.mdb new file mode 100644 index 0000000000000000000000000000000000000000..1e0f632616c57092248b564e2829545c8869b77d GIT binary patch literal 3387 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 literal 0 HcmV?d00001 diff --git a/wsclient/bin/Debug_Ubuntu/wsclient.exe.mdb b/wsclient/bin/Debug_Ubuntu/wsclient.exe.mdb new file mode 100644 index 0000000000000000000000000000000000000000..5682925e494c5b0a7f97b4e86b408c75802d0a57 GIT binary patch literal 879 zcmcIjNoW&M7=HhoC28846f0d+5QN%7opC`t7{nscsKhOXf>Cjjyd7 z&)dib30cqvJ#QD8&RxSPFwXUzj(v!wU9Oi|ireYK%w5j&hEvkZJY6uE<>~{Rvtp`H z*P-tMLkVSus=x zZBO1|M#i*q^9ETe?$s3+W%(k*MzK_26#W1d%?T2f$W-!C6$k+RO6fOx3Y&)!GKOnN z%A6H=*6LFvV{i@d9y$m>I8X~o^Jxe8r4S83CV8NFUvgcwd5wQWcpjDL zRcX@mOsy7yBaxZIE$QP6t$RPTD{zLF#Y8Iz9WBDpv7=(Mvg^>a5z!J$`qK> zYp28z`E$*Ub& zYv*fHfQGzwpH^s9xu9HD#9-C4xQ%!dCh9xHd&t-@^&r0X1Tto+9zz^L#z(LIMErn^ ZX5LSNB6%b#L0*BI&{qouXqn?84S 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 b#OD-Zz*k1#|1kig@zVJW literal 0 HcmV?d00001 diff --git a/wsclient/bin/Release/wsclient.exe b/wsclient/bin/Release/wsclient.exe new file mode 100755 index 0000000000000000000000000000000000000000..67dc78c6f7676f674a0c46fbb034db1022b741be GIT binary patch literal 4608 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 literal 0 HcmV?d00001 diff --git a/wsclient/bin/Release_Ubuntu/wsclient.exe b/wsclient/bin/Release_Ubuntu/wsclient.exe new file mode 100755 index 0000000000000000000000000000000000000000..d4156b851478362c2b2085724f3d7ef11396f2ff GIT binary patch literal 5120 zcmeHLU2Ggz75?sey|Fj-#&*);3X_bJAlx+GxWQH9DhhUNH*v9@;C18v0Grv_>-E&T zGuxSQ>}_e~ic+Z(AS$(}2vi~ZP*ABR{9VL>OG^^f6I7)UFhs373VTQF>PBiNRI?cb$vCfJCTaN{t6Ji87DuvkI zF2-qW7r!6hX#s6bMn&>xoA_*`S0nOg(*)|wTDhL)W&szoK^Qm`n%qW6$U-yhO>KnP zX9HdKX(%PbMRxJk&EC{TfYVK^AvZqSX;FTyjaV^xZ+#SQhP13_=awJygNao=ZMz;S zq2mWyXN%=B8lK{HC(w$|9Rz;93s7{#^ir$juRXV&o&QIr`xE^Poj&s6!A|^=p2>8D zOdz#;S3tTNGO6^#gygP=3|>vOQX6txqnb5AtO?h#o#W&PX->2xZ{i(ohDVLHNzE|PyBdeW8-%p zx+Wc_Y2Co@p#HZ<$dC5MkN*bJ&$0i2U8YFeJD5ZdN3O3ca2c#6_!2SXmST8+4~HX- zI_+hh8iz7rD&q4nr32Qk>NB%+lQ8LXvo#BXe~8uIt-{#9NrZ4Zcjswkc0;^xFCEVg zW^Wz5?f7kC(TXbZ876w@5uPR1dR^#T6u4d~6pOc6qN6PDp}TU}#}a>=vO}lKeu3kw z7`t~2_f zS#>w(?K>!3Y?(x_;XaR-RLPu9g|E@S!gq)Xys(9C=U!5b+QaqTNZd>MK2lw94K7pL zho^A>H*qH(CcbF!Wm31`bqvt*P0k(0IxR=(;p4hS*svp_~PL4?pehs(_wfZtV_KPtw>G6lfuH^H#z=y=5DY-$6hM}$$%C$K+ zD(lgR_flaw(v3>a>V-1vE30c5j_c3~+^Wbn%^ONqdciF%2c{r9sVi06tG!#nMHQEw z=-rAjzgi32(&7%Pxxg-J)^lld*6gwuxfMO;Gfdqc3za=E>7I=JLI zI^;Hq1!uIUxdL6>oGSbLrWJ&^9mn`rW)U6O92ZH2h$ugSLGyPE7)WCdHQxLh77h|u zd6Pt>ETT_rNV2?d(Rzv!v^QipbRXtvQ9#Z_St1?bGqjmNz(1cIV;;wdUKiLU6QO;0 zyo)?zzhdl`$QP*zX(L+EIkeT3;$!a>XPWwue>O^_aO}NfRkm0TFjB?b2xzgO+Fp6^ z(-&?WT7M#GDV1rp5~{bSm1K8E5=ylRWcV`5@X}9YGAXM?WipwzfxmuZ?)MW{VdfGy%m;RL#`h*x z9c^|jZw7xQR7qn5{PeXyey{V{FMjfwFMs#%zaC1;C&mZuzrF(UZNc9}z}nWO#9wKH zJIKXOe%IVR0=#9uR74{55b**}VxBmGSyGeyr8Pr-l6Xh_s|&9suUw7amkL*&FY@~{ z9zS8c#P7@|w?-=8bBbPVp65Gwa>_hQlRTjdJgL$So9~u6YHdnG>NiihF~Cd7Av#se zDWa82tI`ghI*mC5jy;@vo-=*k2FvDNxWF6&#)|I}@arZ^+bq9lhB;5D zAsi?{-FKeRp4Kca*mGx literal 0 HcmV?d00001 diff --git a/wsclient/wsclient.cs b/wsclient/wsclient.cs new file mode 100644 index 00000000..5f00a7bb --- /dev/null +++ b/wsclient/wsclient.cs @@ -0,0 +1,77 @@ +using Notifications; +using System; +using System.Threading; +using WebSocketSharp; + +namespace Example +{ + public class Program + { + public static void Main(string[] args) + { + //using (WebSocket ws = new WebSocket("ws://localhost:8000/")) + using (WebSocket ws = new WebSocket("ws://localhost:8000/", "chat")) + { + /*ws.OnOpen += (o, e) => + { + //Do something. + }; + */ + ws.OnMessage += (o, e) => + { +#if LINUX + #if NOTIFY + ws.MsgNf.Summary = "[WebSocket] Message"; + ws.MsgNf.Body = e; + ws.MsgNf.IconName = "notification-message-im"; + ws.MsgNf.Show(); + #else + Notification nf = new Notification("[WebSocket] Message", + e, + "notification-message-im"); + nf.Show(); + #endif +#else + Console.WriteLine(e); +#endif + }; + + ws.OnError += (o, e) => + { +#if LINUX + Notification nf = new Notification("[WebSocket] Error", + e, + "notification-network-disconnected"); + nf.Show(); +#else + Console.WriteLine("Error: ", e); +#endif + }; + /*ws.OnClose += (o, e) => + { + //Do something. + }; + */ + ws.Connect(); + + Thread.Sleep(500); + Console.WriteLine("\nType \"exit\" to exit.\n"); + + string data; + while (true) + { + Thread.Sleep(500); + + Console.Write("> "); + data = Console.ReadLine(); + if (data == "exit") + { + break; + } + + ws.Send(data); + } + } + } + } +} diff --git a/wsclient/wsclient.csproj b/wsclient/wsclient.csproj new file mode 100644 index 00000000..bb8f71af --- /dev/null +++ b/wsclient/wsclient.csproj @@ -0,0 +1 @@ + Debug AnyCPU 9.0.21022 2.0 {52805AEC-EFB1-4F42-BB8E-3ED4E692C568} Exe WsClient wsclient v3.5 true full false bin\Debug DEBUG prompt 4 true none false bin\Release prompt 4 true true full false bin\Debug_Ubuntu DEBUG,LINUX,NOTIFY prompt 4 true none false bin\Release_Ubuntu LINUX,NOTIFY prompt 4 true notify-sharp {B357BAC7-529E-4D81-A0D2-71041B19C8DE} websocket-sharp \ No newline at end of file diff --git a/wsclient/wsclient.pidb b/wsclient/wsclient.pidb new file mode 100644 index 0000000000000000000000000000000000000000..8270c3e4188be4fd31bf82552af72a095f8c373c GIT binary patch literal 3211 zcmcguTXWk)6qXW6mYlRz%cWdGa0{hCQ^^Sh2Dcd+oP=g_oyN^Dlj(%DvUb$yVs_;O z_ld_0{4E}M;omSkQqH%wOx%f02n=Utk9OB*&;4Re*EH<~0lokOo2l)N%y{fo(-eB zO!_g`!No)M#G=jg^2#^sOO?6%wavxN%Iy6|3)NNnJlR;>+*qoVZF`-FCcXeY!5uOj zwl`=MwnW+#EdGNWL;7hN5P0_i7uRX6(Sim|S`Yk#H0Hj{n25NPJ~4Sl-jn_@ugf$z zjSZ84Ztxj+auR(YpaB+v$ zDlK@R3wR8D6})&xAFCT*{BWp_nFte@kV9WMIKGqL4tzm!I&oZFAX0yY&{0QdXu!#5 zWz~WZtb=I6yXKyxw6XR=$~|fC9d#3nOtfvq2_`|xBvQ~_Pm^?!AMq${QKAZNg2kt& zZ}R|ni)rj_a}iSdJZDH}Z-d2LwphTIl1y~)(hkxjqo7C&S)61>LL}pcewNn#TDX`v zsE_3!D#fA!<3@@B@qb-%O13IF2dW^@MP0>;cBo0{iG4<`l1ctVggSy}p;wf1?JHnan)5#MKCk#~ zDf}p``!U`5b6(l+_1^s`(&1mow%#B#cfRMb3{pW1JupCQ6oWTuv(u}G%DLVCa^D&} zQvh1j;&jAb33-b)Uyam~`ktSpS=i`wTjAZZcW>YVTD!;>xY2r>P~H?>BoJ<$DMBW~ zRUR6W!D3$yqi&reCG7^Cwpe!HP@PL&3uAs&?UsZ{#bZvbkju#+jbmy8m^HExM2zxI zlJN1dOZHFt8PoA=o=|@YycP7aZ)bORhpJX%&6(2aU(vf}O1&vMKj+=^%3gV0woqIU`D@FlvRQvy;uINbn;A4eJbKidh-dV`@mCHmum+RgN7cMddta`vwB zk!?FSh(!)MJOCS=oB0)eO}J!sD6_$&sv;@W^gvIuTd52&Stc{o(t` zd2Q~F$YrRE%)2@Co$^kNj2KOpo2aNoB;+(JU!L) z5}|x7qmsH~`9s<{AK_TIL0D;uuQ4?|5UdHC3aV-#4Dk2#E<}Oc`j}82Cl|7Dt6I^- EpE+bWhX4Qo literal 0 HcmV?d00001