websocket-server – Rev 1

Subversion Repositories:
Rev:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using WebSockets.Server;
using System.Diagnostics;
using WebSocketsCmd.Client;
using WebSocketsCmd.Properties;
using WebSockets.Client;
using System.Threading.Tasks;
using WebSockets.Common;
using System.Threading;
using WebSockets;
using WebSockets.Events;
using WebSocketsCmd.Server;
using System.IO;

namespace WebSocketsCmd
{
    public class Program
    {
        private static void TestClient(object state)
        {
            var logger = (IWebSocketLogger) state;
            using (var client = new ChatWebSocketClient(true, logger))
            {
                Uri uri = new Uri("ws://localhost/chat");
                client.TextFrame += Client_TextFrame;
                client.ConnectionOpened += Client_ConnectionOpened;

                // test the open handshake
                client.OpenBlocking(uri);
            }

            Trace.TraceInformation("Client finished, press any key");
            Console.ReadKey();
        }

        private static void Client_ConnectionOpened(object sender, EventArgs e)
        {
            Trace.TraceInformation("Client: Connection Opened");
            var client = (ChatWebSocketClient) sender;

            // test sending a message to the server
            client.Send("Hi");
        }

        private static void Client_TextFrame(object sender, TextFrameEventArgs e)
        {
            Trace.TraceInformation("Client: {0}", e.Text);
            var client = (ChatWebSocketClient) sender;

            // lets test the close handshake
            client.Dispose();
        }

        private static void Main(string[] args)
        {
            IWebSocketLogger logger = new WebSocketLogger();

            try
            {
                int port = Settings.Default.Port;
                string webRoot = Settings.Default.WebRoot;
                if (!Directory.Exists(webRoot))
                {
                    string baseFolder = AppDomain.CurrentDomain.BaseDirectory;
                    logger.Warning(typeof(Program), "Webroot folder {0} not found. Using application base directory: {1}", webRoot, baseFolder);
                    webRoot = baseFolder;
                }

                // used to decide what to do with incoming connections
                ServiceFactory serviceFactory = new ServiceFactory(webRoot, logger);

                using (WebServer server = new WebServer(serviceFactory, logger))
                {
                    server.Listen(port);
                    Thread clientThread = new Thread(new ParameterizedThreadStart(TestClient));
                    clientThread.IsBackground = false;
                    clientThread.Start(logger);
                    Console.ReadKey();
                }
            }
            catch (Exception ex)
            {
                logger.Error(typeof(Program), ex);
                Console.ReadKey();
            }
        }
    }
}