public override Task <AckMessage> RegisterNode(ServerAddressMessage request, ServerCallContext context) { ServerAddress newAdress = new ServerAddress() { Ip = request.Ip , Port = request.Port }; if (!serverAddressRepository.HasServerAddress(newAdress) && newAdress.FullAddress != selfAddress.FullAddress && newAdress.FullAddress != ServerAddress.EmptyAddress.FullAddress) { serverAddressRepository.AddServerAddress(newAdress); //Node an alle KnownNodes propagieren foreach (var address in serverAddressRepository.GetServerAddresses().Where(a => a.FullAddress != newAdress.FullAddress)) { new PublisherClient(address, selfAddress).RegisterNode(newAdress); } return(Task.FromResult(new AckMessage { Status = AckMessage.Types.Status.Ok })); } return(Task.FromResult(new AckMessage { Status = AckMessage.Types.Status.Nok })); }
public override Task <ChainMessage> RequestFullChain(ServerAddressMessage request, ServerCallContext context) { RegisterNode(request, context); return(Task.FromResult(new ChainMessage { Xml = chainManipulator.GetChain().AsXML() })); }
public override Task <PhysicianMessageList> RequestPendingPhysicians(ServerAddressMessage request, ServerCallContext context) { var physicians = chainManipulator.GetPendingPhysicians(); PhysicianMessageList ret = new PhysicianMessageList(); foreach (var p in physicians) { ret.PhysicianList.Add(new PhysicianMessage() { Xml = p.AsXML() }); } return(Task.FromResult(ret)); }
public override Task <ServerAddressMessageList> RequestNodes(ServerAddressMessage request, ServerCallContext context) { RegisterNode(request, context); ServerAddressMessageList nodes = new ServerAddressMessageList(); foreach (var n in serverAddressRepository.GetServerAddresses()) { nodes.AddressList.Add(new ServerAddressMessage() { Ip = n.Ip , Port = n.Port }); } return(Task.FromResult(nodes)); }
public Chain RequestFullChain() { var channel = OpenConnection(); var client = new PublisherServer.PublisherServerClient(channel); var senderAddress = new ServerAddressMessage() { Ip = ServerAddress.EmptyAddress.Ip , Port = ServerAddress.EmptyAddress.Port }; var response = client.RequestFullChain(senderAddress); channel.ShutdownAsync().Wait(); return(new Chain(response.Xml)); }
private async void RunUdpClientService(object?state) { var udpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); const int port = 12300; EndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, port); udpSocket.Bind(ipEndPoint); while (true) { var fullData = new List <byte>(128); EndPoint clientIpEndPoint = new IPEndPoint(IPAddress.None, 0); do { var buffer = new byte[128]; var bytesAmount = udpSocket.ReceiveFrom(buffer, SocketFlags.None, ref clientIpEndPoint); var receivedBytes = buffer.Take(bytesAmount); fullData.AddRange(receivedBytes); } while (udpSocket.Available > 0); var receivedMessage = HandleDataMessage(fullData.ToArray()); if (receivedMessage != null) { switch (receivedMessage) { case WhoIsServerMessage _: var serverAddressMessage = new ServerAddressMessage { IP = TcpIp, Port = TcpPort }; var packedMessage = MessageConverter.PackMessage(serverAddressMessage); await udpSocket.SendToAsync(packedMessage, SocketFlags.None, clientIpEndPoint); break; } } } // ReSharper disable once FunctionNeverReturns }
public AckMessage SendTransaction(ITransaction transaction) { var channel = OpenConnection(); var client = new PublisherServer.PublisherServerClient(channel); var senderAddress = new ServerAddressMessage() { Ip = ServerAddress.EmptyAddress.Ip , Port = ServerAddress.EmptyAddress.Port }; var response = client.ReceiveTransaction(new TransactionMessage() { SenderAddress = senderAddress , Xml = new TransactionWrapper(transaction).AsXML() });; channel.ShutdownAsync().Wait(); return(response); }
public Chain RequestDeltaChain(long currentIndex) { var channel = OpenConnection(); var client = new PublisherServer.PublisherServerClient(channel); var senderAddress = new ServerAddressMessage() { Ip = ServerAddress.EmptyAddress.Ip , Port = ServerAddress.EmptyAddress.Port }; var response = client.RequestDeltaChain(new DeltaRequest { SenderAddress = senderAddress , CurrentIndex = currentIndex }); channel.ShutdownAsync().Wait(); return(new Chain(response.Xml)); }