public Task <bool> OnHandle(MessageContext context, UnreliableRelay1Message message) { var session = context.Session; foreach (var destination in message.Destination.Where(id => id != session.HostId)) { if (destination == Constants.HostIdServerHack) { var decodedMessage = CoreMessageDecoder.Decode(_serializer, Unpooled.WrappedBuffer(message.Data)); context.ChannelHandlerContext.Handler.ChannelRead(context.ChannelHandlerContext, new MessageContext { ChannelHandlerContext = context.ChannelHandlerContext, Session = context.Session, Message = decodedMessage, UdpEndPoint = context.UdpEndPoint }); continue; } var target = session.P2PGroup?.GetMemberInternal(destination); target?.Send(new UnreliableRelay2Message(session.HostId, message.Data), true); } return(Task.FromResult(true)); }
public void UnreliableRelayHandler(ProudSession session, UnreliableRelay1Message message, MessageReceivedEventArgs e) { foreach (var destination in message.Destination.Where(id => id != session.HostId)) { if (session.P2PGroup == null) { Logger.Debug() .Message("Client {0} in not a p2pgroup", session.HostId) .Write(); return; } if (!session.P2PGroup.Members.ContainsKey(destination)) { Logger.Debug() .Message("Client {0} trying to relay to non existant {1}", session.HostId, destination) .Write(); return; } if (destination == 2) { #region Hardcoded ServerMember ProudCoreOpCode opCode; byte[] data; using (var r = message.Data.ToBinaryReader()) { opCode = r.ReadEnum <ProudCoreOpCode>(); data = r.ReadToEnd(); } if (opCode == ProudCoreOpCode.Rmi) { var core = new RmiMessage(data) { IsRelayed = true, SenderHostId = session.HostId, TargetHostId = destination }; e.Message = core; _filter.OnMessageReceived(e); } else { throw new ProudException($"Invalid opCode {opCode}"); } #endregion } else { var target = _filter.SessionLookupByHostId.GetValueOrDefault(destination); target?.Send(new UnreliableRelay2Message(session.HostId, message.Data)); } } }
public void UnreliableRelayHandler(ProudSession session, UnreliableRelay1Message message) { foreach (var destination in message.Destination.Where(id => id != session.HostId)) { if (session.P2PGroup == null) { continue; } if (!session.P2PGroup.Members.ContainsKey(destination)) { continue; } var target = _server.Sessions.GetValueOrDefault(destination); target?.SendUdpIfAvailableAsync(new UnreliableRelay2Message(session.HostId, message.Data)); } }
public void UnreliableRelayHandler(IChannel channel, ProudSession session, UnreliableRelay1Message message) { foreach (var destination in message.Destination.Where(id => id != session.HostId)) { if (session.P2PGroup == null) { //Logger<>.Debug($"Client {session.HostId} in not a p2pgroup"); return; } if (!session.P2PGroup.Members.ContainsKey(destination)) { //Logger<>.Debug($"Client {session.HostId} trying to relay to non existant {destination}"); return; } var target = _server.Sessions.GetValueOrDefault(destination); target?.SendUdpIfAvailableAsync(new UnreliableRelay2Message(session.HostId, message.Data)); } }