コード例 #1
0
        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...");
        }
コード例 #2
0
        public EndPoint Receive(ref Packet p)
        {
            if(recvport == 0)
                throw new InvalidOperationException();

            EndPoint host = new IPEndPoint(IPAddress.Any, recvport);
            int len = conn.ReceiveFrom(recvbuf, ref host);
            var xmlstr = Encoding.UTF8.GetString(recvbuf, 0, len);
            //Console.WriteLine(xmlstr);
            p.FromXml(xmlstr);
            return host;
        }
コード例 #3
0
        public bool Send(Packet p)
        {
            if (dest == null)
                throw new InvalidOperationException();

            try
            {
                var data = Encoding.UTF8.GetBytes(p.ToXml());
                conn.SendTo(data, dest);
                return true;
            }
            #pragma warning disable 0168
            catch (Exception ex)
            {
                return false;
            }
            #pragma warning restore 0168
        }
コード例 #4
0
        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();
        }