Beispiel #1
0
        public void HandleIncomingQuery(Object sender, EAnpIncomingQueryEventArgs args)
        {
            Tell("Incoming query received");
            EAnpIncomingQuery q = args.Query;
            if (!q.IsPending()) return;
            q.OnCancellation += new EventHandler(OnQueryCancellation);

            AnpMsg m = new AnpMsg();
            m.Type = (uint)EAnpRes.OK;
            q.Reply(m);
        }
Beispiel #2
0
        /// <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);
            }
        }