public void Register(PeripheralDevice device) { m_registeredDevices.Add(device); int i = 0; foreach (PeripheralConnectedDevice d in m_connectedDevices) { // ちょっと非効率. TryMatching(d, i); i++; } }
private int GetDeviceIndex(PeripheralDevice dev) { int ret = 0; for (int i = 0; i < m_registeredDevices.Count; i++) { if (m_registeredDevices[i] == dev) { ret = i; break; } } return(ret); }
// アビリティを加味してPeripheralDeviceとPeripheralConnectedDeviceのマッチングをとる public bool TryMatching(PeripheralConnectedDevice connectedDevice, int regDeviceIdx, int cnctDeviceIdx) { bool ret = false; if (regDeviceIdx >= 0 && regDeviceIdx < m_registeredDevices.Count) { PeripheralDevice registeredDevice = m_registeredDevices[regDeviceIdx]; if (!registeredDevice.IsAlreadyConnected(connectedDevice, cnctDeviceIdx)) // 同じコネクションを2つ張らない { if (!connectedDevice.IsMatched && registeredDevice.IsAcceptable(connectedDevice)) { connectedDevice.Match(registeredDevice, cnctDeviceIdx); registeredDevice.Match(connectedDevice); ret = true; } } } else { foreach (PeripheralDevice r in m_registeredDevices) { if (!r.IsAlreadyConnected(connectedDevice, cnctDeviceIdx)) // 同じコネクションを2つ張らない { if (!connectedDevice.IsMatched && r.IsAcceptable(connectedDevice)) { connectedDevice.Match(r, cnctDeviceIdx); r.Match(connectedDevice); ret = true; break; } } } } return(ret); }
public void UnRegister(PeripheralDevice device) { m_registeredDevices.Remove(device); }
public void UnMatch() { m_target = null; }
public void Match(PeripheralDevice target, int deviceIdx) { m_target = target; m_devidx = deviceIdx; m_latestAliveReceive = Time.time; }