public RemotePacket Invoke() { var length = _socket.StrictField.Default.ReceiveFrom(_buffer.Value, out var address); var stream = new MemoryStream(_buffer.Value, 0, length, false); var sender = stream.ReadEnd(); if (sender == (_name.Field?.Field ?? "")) { return(null); } // 尝试打开数据到来的网络 _monitor.Field?.OpenWhere(pair => Match(pair.Value, address)); // 更新成员IP地址 _addresses.Field?.Update(sender, address); // 解包 var packet = new RemotePacket(sender, (byte)stream.ReadByte(), stream.ReadRest()); // Console.WriteLine($"{packet} from {address}"); foreach ( var listener in from item in _listeners where !item.Interest.Any() || item.Interest.Contains(packet.Command) select item ) { listener.Process(packet); } return(packet); }
public void Process(RemotePacket remotePacket) { var(sender, _, payload) = remotePacket; if (!string.IsNullOrWhiteSpace(remotePacket.Sender)) { _addresses .StrictField .Update(sender, (payload[0] << 8) | payload[1]); } }
public void Process(RemotePacket remotePacket) { if (remotePacket.Payload.Length == 0 || remotePacket.Payload.GetString() != _name.StrictField.Field) { return; } var port = _servers.StrictField .Default .LocalEndpoint .Let(it => (IPEndPoint)it) .Port .Let(it => new[] { (byte)(it >> 8), (byte)it }); _broadcaster.StrictField.Broadcast((byte)UdpCmd.AddressAck, port); }
void DataReceived(byte[] data) { RemotePacket packet = Deserialize <RemotePacket>(data); if (packet != null) { switch (packet.Action) { case RemoteServerAction.GetScreen: if (packet.DataType == typeof(Bitmap) && DesktopReceived != null) { DesktopReceived(this, this.Deserialize <Bitmap>(packet.Data)); } break; } } }
public void Process(RemotePacket remotePacket) { var(name, cmd, _) = remotePacket; if (!string.IsNullOrWhiteSpace(name)) // 非匿名则保存名字 { if (!_group.StrictField .Update(name, DateTime.Now, out var previous) || DateTime.Now - previous > _timeout) { _detected?.Invoke(name); } } if (cmd == (byte)UdpCmd.YellAsk) // 回应询问 { _broadcaster.Field?.Broadcast((byte)UdpCmd.YellAck); } }
public void Process(RemotePacket remotePacket) { var(sender, _, payload) = remotePacket; var stream = new MemoryStream(payload); var topic = stream.ReadEnd(); var type = (GraphType)stream.ReadByte(); Ports.GetOrAdd(new TopicConfig(sender, topic, type), new Port(null)) ?.Also(port => { var rest = stream.Length - stream.Position; var data = new NetworkDataReader(stream); var frame = new List <Vector3>(); switch (type) { case GraphType.OneDimension: switch (rest) { case sizeof(float): frame.Add(new Vector3((float)((DateTime.Now - Origin).Ticks / 1E7), data.ReadFloat(), float.NaN)); break; case sizeof(double): frame.Add(new Vector3((float)((DateTime.Now - Origin).Ticks / 1E7), (float)data.ReadDouble(), float.NaN)); break; } break; case GraphType.TwoDimension: switch (rest) { case 2 * sizeof(float): frame.Add(new Vector3(data.ReadFloat(), data.ReadFloat(), float.NaN)); break; case 2 * sizeof(double): frame.Add(new Vector3((float)data.ReadDouble(), (float)data.ReadDouble(), float.NaN)); break; } break; case GraphType.Pose: switch (rest) { case 3 * sizeof(float): frame.Add(new Vector3(data.ReadFloat(), data.ReadFloat(), data.ReadFloat())); break; case 3 * sizeof(double): frame.Add(new Vector3((float)data.ReadDouble(), (float)data.ReadDouble(), (float)data.ReadDouble())); break; } break; case GraphType.Frame: var length = rest - 1; switch ((FrameType)stream.ReadByte()) { case FrameType.OneFloat: length /= sizeof(float); while (length-- > 0) { frame.Add(new Vector3((float)((DateTime.Now - Origin).Ticks / 1E7), data.ReadFloat(), float.NaN)); } break; case FrameType.OneDouble: length /= sizeof(double); while (length-- > 0) { frame.Add(new Vector3((float)((DateTime.Now - Origin).Ticks / 1E7), (float)data.ReadDouble(), float.NaN)); } break; case FrameType.TwoFloat: length /= 2 * sizeof(float); while (length-- > 0) { frame.Add(new Vector3(data.ReadFloat(), data.ReadFloat(), float.NaN)); } break; case FrameType.TwoDouble: length /= 2 * sizeof(double); while (length-- > 0) { frame.Add(new Vector3((float)data.ReadDouble(), (float)data.ReadDouble(), float.NaN)); } break; case FrameType.ThreeFloat: length /= 3 * sizeof(float); while (length-- > 0) { frame.Add(new Vector3(data.ReadFloat(), data.ReadFloat(), data.ReadFloat())); } break; case FrameType.ThreeDouble: length /= 3 * sizeof(double); while (length-- > 0) { frame.Add(new Vector3((float)data.ReadDouble(), (float)data.ReadDouble(), (float)data.ReadDouble())); } break; default: throw new ArgumentOutOfRangeException(); } break; default: throw new ArgumentOutOfRangeException(); } if (type == GraphType.Frame || frame.Any()) { port.Post(frame); } }); }
public void Process(RemotePacket remotePacket) => _callback(remotePacket);