Fix due to the renamed WebSocketServer<T> to WebSocketServiceHost<T>
parent
c55b5d6479
commit
2ae1d35d03
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,88 @@
|
||||
#region MIT License
|
||||
/**
|
||||
* ServiceManager.cs
|
||||
*
|
||||
* The MIT License
|
||||
*
|
||||
* Copyright (c) 2012 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.Server {
|
||||
|
||||
public class ServiceManager {
|
||||
|
||||
#region Field
|
||||
|
||||
private Dictionary<string, IServiceHost> _services;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
|
||||
public ServiceManager()
|
||||
{
|
||||
_services = new Dictionary<string, IServiceHost>();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Property
|
||||
|
||||
public int Count {
|
||||
get {
|
||||
return _services.Count;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Public Methods
|
||||
|
||||
public void Add(string absPath, IServiceHost svcHost)
|
||||
{
|
||||
_services.Add(absPath.UrlDecode(), svcHost);
|
||||
}
|
||||
|
||||
public void Broadcast(string data)
|
||||
{
|
||||
foreach (var svcHost in _services.Values)
|
||||
svcHost.Broadcast(data);
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
foreach (var svcHost in _services.Values)
|
||||
svcHost.Stop();
|
||||
_services.Clear();
|
||||
}
|
||||
|
||||
public bool TryGetServiceHost(string absPath, out IServiceHost svcHost)
|
||||
{
|
||||
return _services.TryGetValue(absPath, out svcHost);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,149 @@
|
||||
#region MIT License
|
||||
/**
|
||||
* WebSocketServiceHost.cs
|
||||
*
|
||||
* A C# implementation of the WebSocket protocol server.
|
||||
*
|
||||
* The MIT License
|
||||
*
|
||||
* Copyright (c) 2012 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.Net.Sockets;
|
||||
using WebSocketSharp.Net;
|
||||
|
||||
namespace WebSocketSharp.Server {
|
||||
|
||||
public class WebSocketServiceHost<T> : WebSocketServerBase, IServiceHost
|
||||
where T : WebSocketService, new()
|
||||
{
|
||||
#region Field
|
||||
|
||||
private SessionManager _sessions;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Internal Constructor
|
||||
|
||||
internal WebSocketServiceHost()
|
||||
{
|
||||
init();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Public Constructors
|
||||
|
||||
public WebSocketServiceHost(int port)
|
||||
: this(port, "/")
|
||||
{
|
||||
}
|
||||
|
||||
public WebSocketServiceHost(string url)
|
||||
: base(url)
|
||||
{
|
||||
init();
|
||||
}
|
||||
|
||||
public WebSocketServiceHost(int port, string absPath)
|
||||
: this(System.Net.IPAddress.Any, port, absPath)
|
||||
{
|
||||
}
|
||||
|
||||
public WebSocketServiceHost(System.Net.IPAddress address, int port, string absPath)
|
||||
: base(address, port, absPath)
|
||||
{
|
||||
init();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Property
|
||||
|
||||
public Uri Uri {
|
||||
get {
|
||||
return BaseUri;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Private Method
|
||||
|
||||
private void init()
|
||||
{
|
||||
_sessions = new SessionManager();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Protected Method
|
||||
|
||||
protected override void AcceptWebSocket(TcpClient client)
|
||||
{
|
||||
var context = client.AcceptWebSocket();
|
||||
var socket = context.WebSocket;
|
||||
var path = context.Path.UrlDecode();
|
||||
if (path != Uri.GetAbsolutePath().UrlDecode())
|
||||
{
|
||||
socket.Close(HttpStatusCode.NotImplemented);
|
||||
return;
|
||||
}
|
||||
|
||||
if (Uri.IsAbsoluteUri)
|
||||
socket.Url = new Uri(Uri, path);
|
||||
|
||||
BindWebSocket(socket);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Public Methods
|
||||
|
||||
public void BindWebSocket(WebSocket socket)
|
||||
{
|
||||
T service = new T();
|
||||
service.Bind(socket, _sessions);
|
||||
service.Start();
|
||||
}
|
||||
|
||||
public void Broadcast(string data)
|
||||
{
|
||||
_sessions.Broadcast(data);
|
||||
}
|
||||
|
||||
public Dictionary<string, bool> Broadping(string message)
|
||||
{
|
||||
return _sessions.Broadping(message);
|
||||
}
|
||||
|
||||
public override void Stop()
|
||||
{
|
||||
base.Stop();
|
||||
_sessions.Stop();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue