예제 #1
0
 public ZipcodeController(ZipcodeRepository zipcodeRepository)
 {
     ZipcodeRepository = zipcodeRepository;
 }
예제 #2
0
        static void Main(string[] args)
        {
            const int    PORT    = 8080;
            const string HOST    = "127.0.0.1";
            const int    BACKLOG = 10;

            // получаем адреса для запуска сокета
            var ipPoint = new IPEndPoint(IPAddress.Parse(HOST), PORT);

            // создаем сокет
            var listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            try
            {
                // связываем сокет с локальной точкой, по которой будем принимать данные
                listenSocket.Bind(ipPoint);

                // начинаем прослушивание
                listenSocket.Listen(BACKLOG);

                Console.WriteLine("Сервер запущен. Ожидание подключений...");

                while (true)
                {
                    var handler = listenSocket.Accept();

                    // получаем сообщение
                    var    builder = new StringBuilder();
                    int    bytes   = 0;             // количество полученных байтов
                    byte[] data    = new byte[256]; // буфер для получаемых данных

                    do
                    {
                        bytes = handler.Receive(data);
                        builder.Append(Encoding.UTF8.GetString(data, 0, bytes));
                    }while (handler.Available > 0);

                    Console.WriteLine(DateTime.Now.ToShortTimeString() + ": " + builder.ToString());

                    // отправляем ответ
                    //string message = "ваше сообщение доставлено";
                    //data = Encoding.UTF8.GetBytes(message);

                    var packet   = JsonConvert.DeserializeObject <PacketInfo>(builder.ToString());
                    var response = "";

                    if (packet != null)
                    {
                        switch (packet.Type)
                        {
                        case "GET_ZIPCODE":
                        {
                            var getZipcodePacket = JsonConvert.DeserializeObject <GetZipcodePacketInfo>(builder.ToString());
                            if (getZipcodePacket != null)
                            {
                                var zipcode = ZipcodeRepository.GetRepository().Find(p => { return(p.zipcode == getZipcodePacket.zipcode); });
                                if (zipcode != null)
                                {
                                    var zipcodePacket = new ZipcodePacketInfo()
                                    {
                                        Zipcode = zipcode
                                    };
                                    response = JsonConvert.SerializeObject(zipcodePacket);
                                }
                                else
                                {
                                    var errorPacket = new ErrorPacketInfo()
                                    {
                                        Message = "Can't find zipcode."
                                    };
                                    response = JsonConvert.SerializeObject(errorPacket);
                                }
                            }
                            else
                            {
                                var errorPacket = new ErrorPacketInfo()
                                {
                                    Message = "Incorrect packet data."
                                };
                                response = JsonConvert.SerializeObject(errorPacket);
                            }
                        }
                        break;

                        default:
                        {
                            var errorPacket = new ErrorPacketInfo()
                            {
                                Message = "Unknow packet type."
                            };
                            response = JsonConvert.SerializeObject(errorPacket);
                        }
                        break;
                        }
                    }
                    else
                    {
                        var errorPacket = new ErrorPacketInfo()
                        {
                            Message = "Incorrect packet type."
                        };
                        response = JsonConvert.SerializeObject(errorPacket);
                    }

                    handler.Send(Encoding.UTF8.GetBytes(response));

                    // закрываем сокет
                    handler.Shutdown(SocketShutdown.Both);
                    handler.Close();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }