public virtual void logic_rpc_Handle(GetZonesInfoRequest req, OnRpcReturn <GetZonesInfoResponse> cb) { GetZonesInfoResponse rsp = new GetZonesInfoResponse(); //指定场景的所有线. var lt = GetZoneList(req.servergroupID, req.mapID); if (lt != null) { List <ZoneInfoSnap> snaps = new List <ZoneInfoSnap>(); rsp.snaps = snaps; ZoneInfoSnap snap = null; ZoneInfo info = null; for (int i = 0; i < lt.Count; i++) { //获取所有线的信息. info = lt[i]; if (info != null && info.close == false) { snap = new ZoneInfoSnap(); snap.curPlayerCount = info.currentRoleCount; snap.playerMaxCount = info.map_data.max_players; snap.lineIndex = info.lineIndex; snap.playerFullCount = info.map_data.full_players; snap.uuid = info.uuid; snaps.Add(snap); } } } cb(rsp); }
public virtual void logic_rpc_Handle(ISerializable msg, OnRpcReturn <ISerializable> cb) { if (mRpcHandleCall != null) { mRpcHandleCall(msg, (rsp, err) => { cb(rsp as ISerializable, err); }); } }
public void rpc_PlayGame(PlayGameRequest req, OnRpcReturn <PlayGameResponse> callback) { // <--- 此处如果不加锁,假如同时两个PlayGameRequest过来,则可能会导致coinCount为负数 this.coinLocker.LockAsync().ContinueWith((_lock) => { //判断硬币数量够不够 if (coinCount > req.count) { //异步调用,消耗硬币 machine.Call <PlayGameResponse>(req, new OnRpcReturn <PlayGameResponse>((rsp, err) => { //消耗硬币 coinCount -= rsp.usedCoin; //返回结果 callback(rsp); _lock.Dispose(); })); } else { //返回失败结果 callback(new PlayGameResponse() { s2c_code = Response.CODE_ERROR }); _lock.Dispose(); } }); }
public virtual void logic_rpc_Handle(GetAllRoleRequest req, OnRpcReturn <GetAllRoleResponse> cb) { RoleInfo[] roleList = GetAllRoles(); HashMap <string, OnlinePlayerData> uuidMap = new HashMap <string, OnlinePlayerData>(); for (int i = 0; i < roleList.Length; ++i) { var rold = roleList[i]; uuidMap.Add(rold.uuid, new OnlinePlayerData() { name = rold.enter.roleDisplayName, serverGroupId = rold.enter.servergroupID }); } cb(new GetAllRoleResponse() { uuidMap = uuidMap }); }
public virtual void logic_rpc_Handle(GetBatchZonesInfoRequest req, OnRpcReturn <GetBatchZonesInfoResponse> cb) { GetBatchZonesInfoResponse rsp = new GetBatchZonesInfoResponse(); rsp.snapDic = new HashMap <int, List <ZoneInfoSnap> >(); foreach (var item in req.mapIDList) { var lt = GetZoneList(req.servergroupID, item); if (lt != null) { ZoneInfoSnap snap = null; ZoneInfo info = null; List <ZoneInfoSnap> snaps = new List <ZoneInfoSnap>(); for (int i = 0; i < lt.Count; i++) { //获取所有线的信息. info = lt[i]; if (info != null && info.close == false) { snap = new ZoneInfoSnap(); snap.curPlayerCount = info.currentRoleCount; snap.playerMaxCount = info.map_data.max_players; snap.lineIndex = info.lineIndex; snap.playerFullCount = info.map_data.full_players; snap.uuid = info.uuid; snaps.Add(snap); } } rsp.snapDic.Add(item, snaps); } } cb(rsp); }
public virtual void logic_rpc_Call(ISerializable msg, OnRpcReturn <ISerializable> cb) { this.remote_logic?.Call <ISerializable>(msg, cb); }
public virtual void rpc_Call(ISerializable msg, OnRpcReturn <ISerializable> cb) { }
public virtual void rpc_Handle(ISerializable msg, OnRpcReturn <ISerializable> cb) { zone_rpc_call_handler?.Invoke(msg, (rsp, err) => { cb(rsp as ISerializable, err); }); }