예제 #1
0
파일: Program.cs 프로젝트: Feng2012/Kev.IM
        static void Main(string[] args)
        {
            UDPServerRouteHelper.GetInstanse().SetDelegate(new LoginSocketDelegate());
            UDPServerRouteHelper.GetInstanse().SetDelegate(new GetUserInfoSocketDelegate());
            UDPServerRouteHelper.GetInstanse().SetDelegate(new GetUserFriendListSocketDelegate());
            UDPServerRouteHelper.GetInstanse().SetDelegate(new ChatTextMessageSocketDelegate());

            UDPServer udpServer = new UDPServer();

            udpServer.BindIPPoint = new IPEndPoint(IPAddress.Any, 7788);

            KevRegister.Add(UDPPrimaryKey.UDPServer, udpServer);

            udpServer.Start();

            while (true)
            {
                Console.WriteLine("Command:");
                bool isContinue = true;
                switch (Console.ReadLine().ToUpper())
                {
                case "EXIT":
                    isContinue = false;
                    break;

                default:
                    break;
                }
                if (!isContinue)
                {
                    break;
                }
            }
        }
예제 #2
0
        /// <summary>
        /// 获取单例
        /// </summary>
        /// <returns></returns>
        public static UDPServerRouteHelper GetInstanse()
        {
            if (_helper == null)
            {
                _helper = new UDPServerRouteHelper();
            }

            return(_helper);
        }
예제 #3
0
        /// <summary>
        /// 处理消息
        /// </summary>
        /// <param name="state"></param>
        private void HandleMessage(object state)
        {
            UDPModel uModel = state as UDPModel;

            if (uModel == null)
            {
                return;
            }

            do
            {
                string message = Encoding.UTF8.GetString(uModel.Body, 0, uModel.Length);

                Socket socket = SocketRegister.Get(UDPPrimaryKey.UDPServerSocket);
                if (socket == null)
                {
                    break;
                }

                if (string.IsNullOrEmpty(message))
                {
                    break;
                }

                //三次握手

                if (message == Handshake1)
                {
                    UDPSocketServer.SendMessage(socket, Handshake2, uModel.IPPoint);
                    break;
                }

                if (message == Handshake3)
                {
                    break;
                }

                KevSocketModel ksModel = JsonHelper.ParseFromJson <KevSocketModel>(message);
                if (ksModel == null)
                {
                    break;
                }

                int responseCode = UDPServerRouteHelper.GetInstanse().HandleMessage(ksModel, uModel);
                if (ksModel.NetworkType == NetworkType.Request && responseCode != ResponseCode.NoResponse)
                {
                    ksModel.NetworkType  = NetworkType.Response;
                    ksModel.ResponseCode = responseCode;

                    //做出响应
                    UDPSocketServer.SendMessage(socket, ksModel, uModel.IPPoint);
                }
            } while (false);
        }