//Callback handler for battery information. private void ReceiveStatus(string status) { if (string.IsNullOrEmpty(status)) { return; } if (OnStatusChanged != null) { OnStatusChanged.Invoke(status); } }
/// <summary> /// 네트워크에서 발생하는 모든 이벤트를 클라이언트에게 알려주는 역할을 Update에서 진행한다. /// FreeNet엔진의 메시지 송수신 처리는 워커스레드에서 수행되지만 유니티의 로직 처리는 메인 스레드에서 수행되므로 /// 큐잉처리를 통하여 메인 스레드에서 모든 로직 처리가 이루어지도록 구성하였다. /// </summary> void Update() { // 수신된 메시지에 대한 콜백. if (this.event_manager.has_message()) { CPacket msg = this.event_manager.dequeue_network_message(); appcallback_on_message?.Invoke(msg); } // 네트워크 발생 이벤트에 대한 콜백. if (this.event_manager.has_event()) { NETWORK_EVENT status = this.event_manager.dequeue_network_event(); appcallback_on_status_changed?.Invoke(status); } }
private static void RaiseStatusChanged(IntPtr cPtr, IntPtr sender, IntPtr e) { try { if (Noesis.Extend.Initialized) { long ptr = cPtr.ToInt64(); if (sender == IntPtr.Zero && e == IntPtr.Zero) { _StatusChanged.Remove(ptr); return; } StatusChangedHandler handler = null; if (!_StatusChanged.TryGetValue(ptr, out handler)) { throw new System.InvalidOperationException("Delegate not registered for StatusChanged event"); } handler?.Invoke(Noesis.Extend.GetProxy(sender, false), new EventArgs(e, false)); } } catch (Exception exception) { Noesis.Error.UnhandledException(exception); } }