/// <summary> /// Called when an incoming query is received. /// </summary> public void HandleIncomingQuery(Object sender, EAnpIncomingQueryEventArgs args) { // Get the query. EAnpIncomingQuery query = args.Query; if (!query.IsPending()) return; // Create the result message. AnpMsg res = new AnpMsg(); res.Type = (uint)EAnpRes.OK; // Dispatch. WmCoreOp coreOp = null; try { AnpMsg cmd = query.Cmd; EAnpCmd t = (EAnpCmd)cmd.Type; // Commands with core operations. if (t == EAnpCmd.RegisterKps) coreOp = MakeCoreOpFromCmd(new WmCoreOpRegisterKps(), cmd); else if (t == EAnpCmd.SetKwsTask) coreOp = MakeCoreOpFromCmd(new KwsCoreOpSetKwsTask(), cmd); else if (t == EAnpCmd.SetLoginPwd) coreOp = MakeCoreOpFromCmd(new KwsCoreOpSetLoginPwd(), cmd); else if (t == EAnpCmd.CreateKws) coreOp = MakeCoreOpFromCmd(new KwsCoreOpCreateKws(), cmd); else if (t == EAnpCmd.InviteKws) coreOp = MakeCoreOpFromCmd(new KwsCoreOpInviteKws(), cmd); else if (t == EAnpCmd.LookupRecAddr) coreOp = MakeCoreOpFromCmd(new WmCoreOpLookupRecAddr(), cmd); else if (t == EAnpCmd.ChatPostMsg) coreOp = MakeCoreOpFromCmd(new KwsCoreOpChatPostMsg(), cmd); else if (t == EAnpCmd.PbAcceptChat) coreOp = MakeCoreOpFromCmd(new KwsCoreOpPbAcceptChat(), cmd); // Commands without core operations. else if (t == EAnpCmd.ExportKws) HandleExportKws(cmd, res); else if (t == EAnpCmd.ImportKws) HandleImportKws(cmd, res); else if (t == EAnpCmd.VncCreateSession) HandleVncCreateSession(cmd, res); else if (t == EAnpCmd.VncJoinSession) HandleVncJoinSession(cmd, res); else if (t == EAnpCmd.CheckEventUuid) HandleCheckEventUuid(cmd, res); else if (t == EAnpCmd.FetchEvent) HandleFetchEvent(cmd, res); else if (t == EAnpCmd.FetchState) HandleFetchState(cmd, res); // Eeep! else { res.Type = (UInt32)EAnpRes.Failure; (new EAnpExGeneric("invalid EAnp command type")).Serialize(res); } } catch (Exception ex) { res.Type = (UInt32)EAnpRes.Failure; res.ClearPayload(); EAnpException castedEx = EAnpException.FromException(ex); castedEx.Serialize(res); } if (!query.IsPending()) return; // We got a core operation. Start it. if (coreOp != null) { try { WmEAnpQueryCoreOp qco = new WmEAnpQueryCoreOp(query, coreOp, res); qco.Start(); } catch (Exception ex) { KBase.HandleException(ex, true); } } // Reply to the query right away. else { query.Reply(res); } }