当前位置: 首页>>代码示例>>Java>>正文


Java HostedConnection.getAttribute方法代码示例

本文整理汇总了Java中com.jme3.network.HostedConnection.getAttribute方法的典型用法代码示例。如果您正苦于以下问题:Java HostedConnection.getAttribute方法的具体用法?Java HostedConnection.getAttribute怎么用?Java HostedConnection.getAttribute使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在com.jme3.network.HostedConnection的用法示例。


在下文中一共展示了HostedConnection.getAttribute方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: getSource

import com.jme3.network.HostedConnection; //导入方法依赖的package包/类
public static HostedConnection getSource(int playerId) {
    Collection<HostedConnection> connections = Globals.app.getStateManager()
            .getState(ServerSender.class).getServer().getConnections();

    for (HostedConnection hostedConnection : connections) {
        // FIXME: NullPointerException may happen here when player joins!
        if (hostedConnection.getAttribute(
                ServerClientDataStrings.PLAYER_ID) == null) {
            logger.log(Level.WARNING, "PlayerId of connection {0} is null!", 
                    hostedConnection.getId());
            continue;
        }
        if (hostedConnection.getAttribute(ServerClientDataStrings.PLAYER_ID)
                .equals(playerId)) {
            return hostedConnection;
        }
    }

    return null;
}
 
开发者ID:TripleSnail,项目名称:Arkhados,代码行数:21,代码来源:ConnectionHelper.java

示例2: onClientRemoved

import com.jme3.network.HostedConnection; //导入方法依赖的package包/类
@Override
protected void onClientRemoved(GameServer gameServer, HostedConnection conn) {
    super.onClientRemoved(gameServer, conn); 
    ConnData cd = conn.getAttribute(ConnData.CONN_ATTRIBUTE_KEY);
    if (cd == null)
        return;

    Entity clientPlayer = playService.getEntity(cd.getEntityId());
    if (clientPlayer == null)
        return;
    
    // 1.将客户端角色的所有宠物移除出场景,注意是宠物,不要把非生命的(如防御塔)也一起移除
    List<Entity> actors = playService.getEntities(Entity.class, null);
    if (actors != null && !actors.isEmpty()) {
        for (Entity actor : actors) {
            if (gameService.getOwner(actor) == clientPlayer.getData().getUniqueId() && gameService.isBiology(actor)) {
                playNetwork.removeEntity(actor);
            }
        }
    }

    // 2.将客户端角色移除出场景
    playNetwork.removeEntity(clientPlayer);

    // 3.通知所有客户端(不含主机)
    String message = ResManager.get(ResConstants.LAN_CLIENT_EXISTS, new Object[] {gameService.getName(clientPlayer)});
    MessageMess notice = new MessageMess();
    notice.setMessage(message);
    notice.setType(MessageType.notice);
    gameServer.broadcast(notice);

    // 4.通知主机
    addMessage(message, MessageType.notice);
}
 
开发者ID:huliqing,项目名称:LuoYing,代码行数:35,代码来源:ServerNetworkRpgGame.java

示例3: kickClient

import com.jme3.network.HostedConnection; //导入方法依赖的package包/类
@Override
public void kickClient(int connId) {
    // 踢出之前先把玩家的资料保存起来
    HostedConnection conn = gameServer.getServer().getConnection(connId);
    if (conn != null) {
        ConnData cd = conn.getAttribute(ConnData.CONN_ATTRIBUTE_KEY);
        if (cd != null && cd.getClientId() != null && cd.getEntityId() > 0) {
            storeClient(saveStory, scene.getEntities(Actor.class, null), cd.getClientId(), cd.getEntityId(), data.getId());
            SaveHelper.saveStoryLast(saveStory);
        }
    }
    super.kickClient(connId);
}
 
开发者ID:huliqing,项目名称:LuoYing,代码行数:14,代码来源:StoryServerNetworkRpgGame.java

示例4: saveStory

import com.jme3.network.HostedConnection; //导入方法依赖的package包/类
/**
 * 保存整个存档,当故事模式在退出时要保存整个存档,包含主角,其它客户端玩家资料,及所有玩家的宠物等。
 */
private void saveStory() {
    String gameId = data.getId();
    List<Actor> actors = scene.getEntities(Actor.class, null);
    
    // 保存所有故事模式下的主角
    Entity savePlayer = getPlayer();
    savePlayer.updateDatas();
    storeClient(saveStory, actors, configService.getClientId(), savePlayer.getEntityId(), gameId);
    
    // 保存当前所有客户端的资料
    Collection<HostedConnection> conns = gameServer.getServer().getConnections();
    if (conns != null && conns.size() > 0) {
        for (HostedConnection hc : conns) {
            ConnData cd = hc.getAttribute(ConnData.CONN_ATTRIBUTE_KEY);
            // 如果客户端刚刚连接或还没有选角色
            if (cd.getClientId() == null || cd.getEntityId() <= 0)
                continue;
            storeClient(saveStory, actors, cd.getClientId(), cd.getEntityId(), gameId);
        }
    }
    
    // 单独保存主角,这是为了兼容v2.4及之前的版本,后续可能会取消这个特殊的保存方式.
    saveStory.setPlayer(savePlayer.getData());
    
    // 保存快捷方式
    saveStory.setShortcuts(ShortcutManager.getShortcutSaves());
    
    // 存档到系统文件 
    SaveHelper.saveStoryLast(saveStory);

    // 保存全局配置
    gameService.saveConfig(LyConfig.getConfigData());
}
 
开发者ID:huliqing,项目名称:LuoYing,代码行数:37,代码来源:StoryServerNetworkRpgGame.java

示例5: onReceiveMessClient

import com.jme3.network.HostedConnection; //导入方法依赖的package包/类
/**
 * 当前客户端获得标识时,这一步发生在 {@link #onClientAdd }之后, 主要更
 * 新客户端的标识,并刷新客户端列表。
 * @param gameServer
 * @param conn
 * @param m 
 */
protected void onReceiveMessClient(GameServer gameServer, HostedConnection conn, ClientMess m) {
    // 登记、更新客户端资料
    ConnData cd = conn.getAttribute(ConnData.CONN_ATTRIBUTE_KEY);
    cd.setClientId(m.getClientId());
    cd.setClientName(m.getClientName());
    // 更新客户端列表
    onClientsUpdated(gameServer);
}
 
开发者ID:huliqing,项目名称:LuoYing,代码行数:16,代码来源:AbstractServerListener.java

示例6: onClientAdded

import com.jme3.network.HostedConnection; //导入方法依赖的package包/类
/**
 * 当一个新的客户端连接到服务端时该方法被自动调用,默认情况下,
 * 该方法将立即向客户端发送游戏数据{@link GameData}作为响应.
 * 注:默认情况下,服务端只向客户端发送游戏的基本数据,不包含场景数据及游戏逻辑。
 * @param gameServer
 * @param conn 
 * @see #onSendGameData(GameServer, HostedConnection) 
 */
protected void onClientAdded(GameServer gameServer, HostedConnection conn) {
    // 初始化一个用于存放数据的容器,选择在这里初始化以便后续使用的时候不再需要判断null
    ConnData cd = conn.getAttribute(ConnData.CONN_ATTRIBUTE_KEY);
    if (cd == null) {
        cd = new ConnData();
        cd.setConnId(conn.getId());
        cd.setAddress(conn.getAddress());
        conn.setAttribute(ConnData.CONN_ATTRIBUTE_KEY, cd);
    }
    // 当客户端连接时向客户端发送游戏数据
    onSendGameData(gameServer, conn);
    // 更新客户端列表
    onClientsUpdated(gameServer);
}
 
开发者ID:huliqing,项目名称:LuoYing,代码行数:23,代码来源:AbstractServerListener.java

示例7: getClients

import com.jme3.network.HostedConnection; //导入方法依赖的package包/类
/**
 * xxx 这个方法要移动到其它地方:AbstractServerListener。
 * 获取当前已经连接的所有客户端,其中包含主机
 * @return 
 */
public List<ConnData> getClients() {
    // 需要判断游戏是否在运行,在游戏运行时可以获取到玩家角色名字
    boolean gameInPlay = playService.getGame() != null;
    
    // 向客户端广播,告诉所有客户端有新的客户端连接进来,并把客户端列表
    // 发送给所有已经连接的客户端
    Collection<HostedConnection> hcs = server.getConnections();
    List<ConnData> clients = new ArrayList<ConnData>();
    
    for (HostedConnection hc : hcs) {
        ConnData cd = hc.getAttribute(ConnData.CONN_ATTRIBUTE_KEY);
        clients.add(cd);
    }
    
    // 添加主机信息到客户端列表中,注:在没有网络的情况下getLocalHostIPv4可能会返回null,这时需要判断处理
    InetAddress inetAddress = envService.getLocalHostIPv4();
    String serverAddress = inetAddress != null ? inetAddress.getHostAddress() : "0.0.0.0";
    String serverMachineName = envService.getMachineName();
    ConnData serverConnData = new ConnData();
    serverConnData.setClientId(configService.getClientId());
    serverConnData.setClientName(serverMachineName);
    serverConnData.setConnId(-1);
    serverConnData.setAddress(serverAddress);
    if (gameInPlay) {
        // xxx 重构
        serverConnData.setEntityId(-1);
        serverConnData.setEntityName("--");
    }
    clients.add(0, serverConnData);
    return clients;
}
 
开发者ID:huliqing,项目名称:LuoYing,代码行数:37,代码来源:GameServer.java

示例8: applyOnServer

import com.jme3.network.HostedConnection; //导入方法依赖的package包/类
@Override
    public void applyOnServer(GameServer gameServer, HostedConnection source) {
        // remove20161102,暂不进行安全判断
//        PlayService playService = Factory.get(PlayService.class);
//        ActorService actorService = Factory.get(ActorService.class);
//        SkinNetwork skinNetwork = Factory.get(SkinNetwork.class);
//        Entity actor = playService.getEntity(actorId);
//        if (actor == null) {
//            return; // 找不到指定的角色
//        }
//        ConnData cd = source.getAttribute(ConnData.CONN_ATTRIBUTE_KEY);
//        long clientActorId = cd != null ? cd.getEntityId() : -1;
//        // 使用物品的必须是客户端角色自身或者客户端角色的宠物
//        if (actor.getData().getUniqueId() == clientActorId
//                || actorService.getOwner(actor) == clientActorId) {
//            if (takeOn) {
//                skinNetwork.takeOnWeapon(actor);
//            } else {
//                skinNetwork.takeOffWeapon(actor);
//            }
//        }

        Entity actor = Factory.get(PlayService.class).getEntity(actorId);
        if (actor == null) {
            return; // 找不到指定的角色
        }
        ConnData cd = source.getAttribute(ConnData.CONN_ATTRIBUTE_KEY);
//        long clientActorId = cd != null ? cd.getEntityId() : -1;
        if (takeOn) {
            Factory.get(SkinNetwork.class).takeOnWeapon(actor);
        } else {
            Factory.get(SkinNetwork.class).takeOffWeapon(actor);
        }
    }
 
开发者ID:huliqing,项目名称:LuoYing,代码行数:35,代码来源:SkinWeaponTakeOnMess.java

示例9: applyOnServer

import com.jme3.network.HostedConnection; //导入方法依赖的package包/类
@Override
public void applyOnServer(GameServer gameServer, HostedConnection source) {
    super.applyOnServer(gameServer, source);
    PlayService playService = Factory.get(PlayService.class);
    PlayNetwork playNetwork = Factory.get(PlayNetwork.class);
    
    ConnData cd = source.getAttribute(ConnData.CONN_ATTRIBUTE_KEY);
    Long actorId = cd != null ? cd.getEntityId() : null;
    
    Entity actor = playService.getEntity(actorId);
    Entity target = playService.getEntity(targetId);
    playNetwork.attack(actor, target);
}
 
开发者ID:huliqing,项目名称:LuoYing,代码行数:14,代码来源:ActorFightMess.java

示例10: serverReadGuaranteed

import com.jme3.network.HostedConnection; //导入方法依赖的package包/类
private void serverReadGuaranteed(HostedConnection source,
        Command command) {
    if (command instanceof CmdSelectHero) {
        int playerId =
                source.getAttribute(ServerClientDataStrings.PLAYER_ID);
        common.playerChoseHero(playerId,
                ((CmdSelectHero) command).getHeroName());
        stateManager.getState(ServerSender.class)
                .addCommandForSingle(command, source);
    } else if (command instanceof CmdTopicOnly) {
        common.serverHandleTopicOnlyCommand(source, (CmdTopicOnly) command);
    }
}
 
开发者ID:TripleSnail,项目名称:Arkhados,代码行数:14,代码来源:DeathMatch.java

示例11: saveCommand

import com.jme3.network.HostedConnection; //导入方法依赖的package包/类
private void saveCommand(Command command, HostedConnection connection) {
    if (command instanceof Ack) {
        return;
    }

    Integer playerId
            = connection.getAttribute(ServerClientDataStrings.PLAYER_ID);

    if (playerId == null) {
        return;
    }

    replayData.addCommand(command, playerId, world.getWorldTime());
}
 
开发者ID:TripleSnail,项目名称:Arkhados,代码行数:15,代码来源:RecordingServerSender.java

示例12: applyOnServer

import com.jme3.network.HostedConnection; //导入方法依赖的package包/类
@Override
    public void applyOnServer(GameServer gameServer, HostedConnection source) {
        super.applyOnServer(gameServer, source);
        
        // remove20161121
//        PlayService playService = Factory.get(PlayService.class);
//        ActorNetwork actorNetwork = Factory.get(ActorNetwork.class);
//        ActionService actionService = Factory.get(ActionService.class);
//        
//        Entity actor = (Actor) playService.getEntity(actorId);
//        if (actor == null) 
//            return;
//
//        ConnData cd = source.getAttribute(ConnData.CONN_ATTRIBUTE_KEY);
//        Long uniqueActorId = cd != null ? cd.getEntityId() : null;
//        
//        if (uniqueActorId != actor.getData().getUniqueId()) {
//            return; // 不允许控制别人的角色
//        }
//        
//        // remove20151229服务端以后一直打开AI
////        actorService.setAutoAi(actor, false);
//   
//        // remove20161103
////        // 必须清除跟随
////        actorNetwork.setFollow(actor, -1);
//        
//        // 走向目标,action不需要广播
//        actionService.playRun(actor, pos);

        // 角色必须存在
        Entity actor = (Actor) Factory.get(PlayService.class).getEntity(actorId);
        if (actor == null) 
            return;

        // 不允许控制别人的角色
        ConnData cd = source.getAttribute(ConnData.CONN_ATTRIBUTE_KEY);
        long uniqueActorId = cd != null ? cd.getEntityId() : -1;
        if (uniqueActorId != actor.getData().getUniqueId()) {
            return; 
        }
        
        // 走向目标,action不需要广播
        GameNetwork gameNetwork = Factory.get(GameNetwork.class);
        gameNetwork.playRunToPos(actor, pos);
    }
 
开发者ID:huliqing,项目名称:LuoYing,代码行数:47,代码来源:ActionRunMess.java

示例13: processGameMess

import com.jme3.network.HostedConnection; //导入方法依赖的package包/类
/**
 * 处理来自服务端的肖息
 * @param gameServer
 * @param source
 * @param m
 */
protected void processGameMess(GameServer gameServer, HostedConnection source, GameMess m) {
    // 客户端告诉服务端,要选择哪一个角色进行游戏.
    // 在必要时可以对接收到的ActorSelectMess进行一些验证,比如确保选择的角色数据没有异常。
    // 名称不会重复等。
    if (m instanceof ActorSelectMess) {

        // 选择玩家角色
        ActorSelectMess mess = (ActorSelectMess) m;
        Entity actor = Loader.load(mess.getEntityData());

        // 默认情况下,不管是在Story模式或是在Lan模式,玩家选择后的角色都为1级.但是在某些情况下会有一些不同,比如:
        // 1.在Lan模式下玩家的初始属性可能会受Game逻辑的影响.参考:gameState.getGame().onPlayerSelected(actor);
        // 2.在Story模式下,如果客户端的资料已经存档在服务端,则连接时直接使用存档进行游戏,而不需要重新选择角色。
        gameService.setLevel(actor, 1);
        
        // 记住客户端所选择的角色,要放在addPlayer之前,因为在gameServer.broadcast(new MessSCClientList(gameServer.getClients()));
        // 之前要先更新ConnData,否则gameServer.getClients()获取不到实时的角色资料更新
        ConnData cd = source.getAttribute(ConnData.CONN_ATTRIBUTE_KEY);
        cd.setEntityId(actor.getData().getUniqueId());
        cd.setEntityName(gameService.getName(actor));
        
        // 添加到场景
        onAddClientPlayer(cd, actor);
        
        // 返回消息给客户端,让客户端知道所选择的角色成功。
        ActorSelectResultMess result = new ActorSelectResultMess();
        result.setActorId(actor.getData().getUniqueId());
        result.setSuccess(true);
        gameServer.send(source, result);
        
        return;
    } 

    // 当服务端接收到客户端退出游戏的消息时,这里什么也不处理。与故事模式不同。故事模式要保存客户端资料.
    // 服务端暂时不需要处理任何逻辑
    if (m instanceof ClientExitMess) {
        return;
    }
    
    m.applyOnServer(gameServer, source);
}
 
开发者ID:huliqing,项目名称:LuoYing,代码行数:48,代码来源:ServerNetworkRpgGame.java


注:本文中的com.jme3.network.HostedConnection.getAttribute方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。