-
Notifications
You must be signed in to change notification settings - Fork 0
/
IpGeoServer.cs
50 lines (43 loc) · 1.38 KB
/
IpGeoServer.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using Grpc.Core;
using GrpcGeo.Domain;
using IpGeo;
using System;
using System.Net;
using System.Threading.Tasks;
namespace GrpcEvents.Server
{
internal class IpGeoServer : IpLocator.IpLocatorBase
{
private Grpc.Core.Server _server;
public IpGeoServer()
{
_server = new Grpc.Core.Server
{
Services = { IpLocator.BindService(this) },
Ports = { new ServerPort("localhost", Constants.Port, ServerCredentials.Insecure) }
};
}
public void Start()
{
_server.Start();
}
public void Shutdown()
{
_server.ShutdownAsync().Wait();
}
public override Task<LocationDetails> Find(LocationRequest request, ServerCallContext context)
{
Console.WriteLine($"Request from '{request.App}' for IP: {request.Ip}");
var jsonString = new WebClient().DownloadString($"https://freegeoip.app/json/" + request.Ip);
var data = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(jsonString);
var location = new LocationDetails
{
Country = data.country_name,
City = data.city,
Longitude = data.longitude,
Latitude = data.latitude
};
return Task.FromResult(location);
}
}
}