/// <summary> /// Format the reply if the operation failed. /// </summary> protected virtual void FormatFailureReply(AnpMsg m) { m.Type = (UInt32)EAnpRes.Failure; EAnpException castedEx = EAnpException.FromException(ErrorEx); castedEx.Serialize(m); }
/// <summary> /// Post a LocalVncSession event. /// </summary> private void PostLocalVncSessionEvent(bool startFlag, EAnpException ex) { AnpMsg m = Kws.MakeTransientEAnpEvent(EAnpEvt.LocalVncSession); m.AddBin(SessionUuid); m.AddUInt64(SessionID); m.AddUInt32(Convert.ToUInt32(ServerSessionFlag)); m.AddUInt32(Convert.ToUInt32(startFlag)); m.AddUInt32(Convert.ToUInt32(ex != null)); if (ex != null) { ex.Serialize(m); } Kws.PostTransientEAnpEvent(m); }
/// <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); } }