Fixed WebSocketService

master
sta 14 years ago
parent 42461dfc52
commit 64d12eb5cf

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -8,7 +8,7 @@ namespace Example2
{
protected override void onMessage(object sender, MessageEventArgs e)
{
Server.Send(e.Data);
Publish(e.Data);
}
}
}

Binary file not shown.

@ -1,5 +1,4 @@
using System;
using System.Threading;
using WebSocketSharp.Server;
namespace Example2
@ -13,7 +12,8 @@ namespace Example2
wssv.Start();
Console.WriteLine(
"WebSocket Server ({0}) listening on address: {1} port: {2}\n", wssv.Url, wssv.Address, wssv.Port);
"WebSocket Server (url: {0})\n listening on address: {1} port: {2}\n",
wssv.Url, wssv.Address, wssv.Port);
Console.WriteLine("Press any key to stop server...");
Console.ReadLine();

Binary file not shown.

Binary file not shown.

@ -17,7 +17,7 @@ Required namespaces.
#### Step 2 ####
Creating instance of `WebSocket` class.
Creating a instance of `WebSocket` class.
using (WebSocket ws = new WebSocket("ws://example.com"))
{
@ -126,14 +126,15 @@ Required namespace.
using WebSocketSharp.Server;
`WebSocketServer<T>` class exists in `WebSocketSharp.Server` namespace.
`WebSocketServer<T>` class and `WebSocketService` class exist in `WebSocketSharp.Server` namespace.
#### Step 2 ####
Creating a class that inherits `WebSocketService`.
Creating a class that inherits `WebSocketService` class.
For example, if you want to provide the echo service,
```cs
using System;
using WebSocketSharp;
using WebSocketSharp.Server;
@ -145,9 +146,11 @@ For example, if you want to provide the echo service,
Send(e.Data);
}
}
```
For example, if you want to provide the chat service,
```cs
using System;
using WebSocketSharp;
using WebSocketSharp.Server;
@ -156,19 +159,20 @@ For example, if you want to provide the chat service,
{
protected override void onMessage(object sender, MessageEventArgs e)
{
Server.Send(e.Data);
Publish(e.Data);
}
}
```
#### Step 3 ####
Creating instance of `WebSocketServer<T>` class.
Creating a instance of `WebSocketServer<T>` class.
var wssv = new WebSocketServer<Echo>("ws://example.com:4649");
Type of `T` inherits `WebSocketService` class, so you can use a class that was created in **Step 2**.
If you set WebSocket url without port number, `WebSocketServer<T>` set 80 or 443 to port number automatically.
If you set WebSocket url without port number, `WebSocketServer<T>` set **80** or **443** to port number automatically.
So it is necessary to run with root permission.
$ sudo mono example2.exe

@ -1,5 +1,5 @@
<Properties>
<MonoDevelop.Ide.Workspace ActiveConfiguration="Release_Ubuntu" />
<MonoDevelop.Ide.Workspace ActiveConfiguration="Debug" />
<MonoDevelop.Ide.Workbench />
<MonoDevelop.Ide.DebuggingService.Breakpoints>
<BreakpointStore />

@ -34,12 +34,11 @@ namespace WebSocketSharp.Server
public interface IWebSocketServer
{
void AddService(WebSocketService service);
void CloseService();
void CloseService(CloseStatusCode code, string reason);
void CloseServices(CloseStatusCode code, string reason);
void Ping(string data);
void Publish(byte[] data);
void Publish(string data);
void RemoveService(WebSocketService service);
void Send(byte[] data);
void Send(string data);
void Start();
void Stop();
}

@ -173,12 +173,12 @@ namespace WebSocketSharp.Server
_services.Add(service);
}
public void CloseService()
public void CloseServices()
{
CloseService(CloseStatusCode.NORMAL, String.Empty);
CloseServices(CloseStatusCode.NORMAL, String.Empty);
}
public void CloseService(CloseStatusCode code, string reason)
public void CloseServices(CloseStatusCode code, string reason)
{
lock (_services.SyncRoot)
{
@ -189,6 +189,11 @@ namespace WebSocketSharp.Server
}
}
public void Ping()
{
Ping(String.Empty);
}
public void Ping(string data)
{
WaitCallback broadcast = (state) =>
@ -204,12 +209,7 @@ namespace WebSocketSharp.Server
ThreadPool.QueueUserWorkItem(broadcast);
}
public void RemoveService(WebSocketService service)
{
_services.Remove(service);
}
public void Send(byte[] data)
public void Publish(byte[] data)
{
WaitCallback broadcast = (state) =>
{
@ -224,7 +224,7 @@ namespace WebSocketSharp.Server
ThreadPool.QueueUserWorkItem(broadcast);
}
public void Send(string data)
public void Publish(string data)
{
WaitCallback broadcast = (state) =>
{
@ -239,6 +239,11 @@ namespace WebSocketSharp.Server
ThreadPool.QueueUserWorkItem(broadcast);
}
public void RemoveService(WebSocketService service)
{
_services.Remove(service);
}
public void Start()
{
_tcpListener.Start();
@ -248,7 +253,7 @@ namespace WebSocketSharp.Server
public void Stop()
{
_tcpListener.Stop();
CloseService();
CloseServices();
}
#endregion

@ -33,10 +33,16 @@ namespace WebSocketSharp.Server
{
public abstract class WebSocketService
{
#region Properties
#region Private Fields
public IWebSocketServer Server { get; private set; }
public WebSocket Socket { get; private set; }
private IWebSocketServer _server;
private WebSocket _socket;
#endregion
#region Property
public bool IsBinded { get; private set; }
#endregion
@ -44,6 +50,7 @@ namespace WebSocketSharp.Server
public WebSocketService()
{
IsBinded = false;
}
#endregion
@ -52,9 +59,14 @@ namespace WebSocketSharp.Server
private void defaultBind()
{
Socket.OnOpen += (sender, e) =>
_socket.OnOpen += (sender, e) =>
{
_server.AddService(this);
};
_socket.OnClose += (sender, e) =>
{
Server.AddService(this);
_server.RemoveService(this);
};
}
@ -76,7 +88,6 @@ namespace WebSocketSharp.Server
protected virtual void onClose(object sender, CloseEventArgs e)
{
Server.RemoveService(this);
}
#endregion
@ -85,44 +96,71 @@ namespace WebSocketSharp.Server
public void Bind(IWebSocketServer server, WebSocket socket)
{
Server = server;
Socket = socket;
_server = server;
_socket = socket;
defaultBind();
Socket.OnOpen += onOpen;
Socket.OnMessage += onMessage;
Socket.OnError += onError;
Socket.OnClose += onClose;
_socket.OnOpen += onOpen;
_socket.OnMessage += onMessage;
_socket.OnError += onError;
_socket.OnClose += onClose;
IsBinded = true;
}
public void BPing()
{
BPing(String.Empty);
}
public void BPing(string data)
{
if (IsBinded) _server.Ping(data);
}
public void Close()
{
Socket.Close();
if (IsBinded) _socket.Close();
}
public void Close(CloseStatusCode code, string reason)
{
Socket.Close(code, reason);
if (IsBinded) _socket.Close(code, reason);
}
public void Open()
{
Socket.Connect();
if (IsBinded) _socket.Connect();
}
public void Ping()
{
if (IsBinded) _socket.Ping();
}
public void Ping(string data)
{
Socket.Ping(data);
if (IsBinded) _socket.Ping(data);
}
public void Publish(byte[] data)
{
if (IsBinded) _server.Publish(data);
}
public void Publish(string data)
{
if (IsBinded) _server.Publish(data);
}
public void Send(byte[] data)
{
Socket.Send(data);
if (IsBinded) _socket.Send(data);
}
public void Send(string data)
{
Socket.Send(data);
if (IsBinded) _socket.Send(data);
}
#endregion

Loading…
Cancel
Save