Package org.darkhelm.dragonchess.server.channel

Source Code of org.darkhelm.dragonchess.server.channel.ChannelServer

/**
* Copyright (c) 2010, Eirik Brandtzæg
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*  *  Redistributions of source code must retain the above copyright
*     notice, this list of conditions and the following disclaimer.
*  *  Redistributions in binary form must reproduce the above copyright
*     notice, this list of conditions and the following disclaimer in the
*     documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL EIRIK BRANDTZÆG BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.darkhelm.dragonchess.server.channel;

import java.lang.reflect.Method;

import org.darkhelm.dragonchess.shared.channel.ChannelService;
import org.darkhelm.dragonchess.shared.channel.Message;

import com.google.appengine.api.channel.ChannelMessage;
import com.google.appengine.api.channel.ChannelServiceFactory;
import com.google.gwt.user.client.rpc.SerializationException;
import com.google.gwt.user.server.rpc.RPC;
import com.google.gwt.user.server.rpc.SerializationPolicy;

/**
*
* @author Eirik Brandtzæg <eirikb@eirikb.no>
*
*/
public class ChannelServer {

  private ChannelServer() {
  }

  /**
   * Send event to all clients on a given channel. Channel is channel name
   * here, not channel key
   *
   * @param channel
   * @param message
   *            Any class implementing (or interface extending)
   *            no.eirikb.gwtchannelapi.client.Message
   */
  public static void send(String channel, Message message) {
    try {
      Method serviceMethod = ChannelService.class.getMethod("getMessage",
          Message.class);
      // Yes, the SerializationPolicy is hack
      String serialized = RPC.encodeResponseForSuccess(serviceMethod,
          message, new SerializationPolicy() {

            @Override
            public void validateSerialize(Class<?> clazz)
                throws SerializationException {
            }

            @Override
            public void validateDeserialize(Class<?> clazz)
                throws SerializationException {
            }

            @Override
            public boolean shouldSerializeFields(Class<?> clazz) {
              return false;
            }

            @Override
            public boolean shouldDeserializeFields(Class<?> clazz) {
              return false;
            }
          });

      ChannelServiceFactory.getChannelService().sendMessage(
          new ChannelMessage(channel, serialized));
    } catch (SecurityException e) {
      e.printStackTrace();
    } catch (NoSuchMethodException e) {
      e.printStackTrace();
    } catch (SerializationException e) {
      e.printStackTrace();
    }
  }
}
TOP

Related Classes of org.darkhelm.dragonchess.server.channel.ChannelServer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.