public void Run()
        {
            //websocket init
            Console.WriteLine("tetris server is starting... port:{0}", Port_WebSocket);
            var listener = new WebSocketServer();
            listener.NewMessageReceived += listener_NewMessageReceived;
            listener.NewSessionConnected += listener_NewSessionConnected;

            if (!listener.Setup(Port_WebSocket))
            {
                Console.WriteLine("failed to initialize.");
                return;
            }

            if (!listener.Start())
            {
                Console.WriteLine("failed to start.");
                return;
            }

            //transceiver init
            Console.WriteLine("transceiver is starting... port:{0}", Port_Transceiver);
            var tr = new Transceiver(null, 2013);

            isRunning = true;
            Thread th = new Thread(() =>
            {
                Packet p = new Packet();
                while (isRunning)
                {
                    p.Clear();
                    tr.Receive(ref p);

                    Console.WriteLine("received a packet: {0}", p.Peek());

                    if (conn != null)
                    {
                        try
                        {
                            conn.Send((string)p.Pop());
                        }
            #pragma warning disable 0168
                        catch (Exception ex)
                        {
                            //conn = null;
                        }
            #pragma warning restore 0168
                    }
                }
                tr.Dispose();
            });
            th.Start();

            Console.WriteLine("press enter to terminate server.");
            Console.ReadLine();

            isRunning = false;
            listener.Stop();
            Console.WriteLine("terminating server...");
        }
        static void TestTransceiver()
        {
            Thread t = new Thread(() =>
            {
                using (var listener = new Transceiver(null, ServerPort))
                {
                    var p = new Packet();
                    listener.Receive(ref p);
                    Console.WriteLine("received: {0}",p.Pop());
                }
            });
            t.Start();

            using (var sender = new Transceiver(new IPEndPoint(GetLocalIP(), ServerPort), 0))
            {
                Thread.Sleep(500);
                var p = new Packet();
                p.Push("transceiver test");
                sender.Send(p);
            }

            Console.WriteLine("press enter to finish.");
            Console.ReadLine();
        }