とりあえず、サーバ側の実装してみた。
requestSendMessage時に発行するmethodはmessages.modifyにした。
で対応するサービスは、MessageServiceのcreateMessage。
messages.modifyがクライアントから飛んでくると、必ずcreateMessageが呼ばれる、
のではなく、msgCollIdなるパラメータに何かしらの値が入っているとき、
のみらしい。
msgCollIdというのは、どうもMessageを束ねるもののIDらしい。よくわかんないけど。
とりあえず使わないので考えない。
クライアントからはダミーのmsgCollIdを送付するようにして、messages.modifyのときは
必ずcreateMessageが呼ばれるようにした。
で、以下createMessageの実装。
- public Future<Void> createMessage(UserId userId, String appId, String msgCollId, Message message,
- SecurityToken token) throws ProtocolException {
- logic.createMessage(userId, appId, msgCollId, message, token);
- return ImmediateFuture.newInstance(null);
- }
こんだけ。
何も考えずにlogicへパス。
でlogic。
- public void createMessage(UserId userId, String appId, String msgCollId, Message message,
- SecurityToken token) throws ProtocolException {
- logger.info("メッセージ生成開始:");
- String viewerId = token.getViewerId();
- String ownerId = token.getOwnerId();
- GmsPerson viewer = null;
- try {
- if (StringUtils.hasText(viewerId)) {
- viewer = gmsPersonDao.selectByLoginId(viewerId);
- }
- }
- catch (ObjectRetrievalFailureException ex) {
- }
- if (viewer == null) {
- if (logger.isDebugEnabled()) {
- logger.debug("Guestは送信できない:");
- }
- throw new ProtocolException(HttpServletResponse.SC_FORBIDDEN,
- "Guestのため、送信できない");
- }
- if (! isInstalledGadget(viewer, token.getModuleId())) {
- if (logger.isDebugEnabled()) {
- logger.debug("ガジェット未インストール:"
- + "viewerId:[" + viewer.getLoginId() + "]:"
- + "ガジェットID:[" + token.getModuleId() + "]"
- );
- }
- throw new ProtocolException(HttpServletResponse.SC_FORBIDDEN,
- "未インストールのため、送信できない:loginid:[" + viewer.getLoginId() + "]");
- }
- GmsPerson owner = gmsPersonDao.selectByLoginId(ownerId);
- String fromLoginId = userId.getUserId(token);
- GmsPerson fromUser = gmsPersonDao.selectByLoginId(fromLoginId);
- for (String recip: message.getRecipients()) {
- GmsMessage gmsMessage = new GmsMessage();
- gmsMessage.setId(UuidGenerator.compress(UuidGenerator.generate()));
- gmsMessage.setFromPersonId(fromUser.getId());
- UserId toUserId = new UserId(UserId.Type.jsonValueOf(recip), recip);
- String recipLoginId = toUserId.getUserId(token);
- GmsPerson recipPerson = gmsPersonDao.selectByLoginId(recipLoginId);
- gmsMessage.setToPersonId(recipPerson.getId());
- if (StringUtils.hasText(message.getBody())) {
- gmsMessage.setBody(message.getBody());
- }
- else {
- gmsMessage.setBody("");
- }
- gmsMessage.setBodyId("");
- if (StringUtils.hasText(message.getTitle())) {
- gmsMessage.setTitle(message.getTitle());
- }
- else {
- gmsMessage.setTitle("");
- }
- gmsMessage.setTitleId("");
- gmsMessage.setType(message.getType().toString());
- gmsMessage.setCreatedAt(new Timestamp(System.currentTimeMillis()));
- gmsMessageDao.insert(gmsMessage);
- }
- logger.info("メッセージ生成終了:");
- }
へっぽこだけどまぁいいや。
ただ単にmessageテーブルにinsert。
チェックとは考えてない。
lockedDomain機能を有効にしてガジェット毎に別ドメインにしているので、
認証済みクッキーは飛んでこない。なので、securityTokenのみでチェックしている。
で、実行と。
ちゃんとDBに保存された。
.
0 コメント:
コメントを投稿