public OperationResponse HandleFindFriends(OperationRequest operationRequest, SendParameters sendParameters) { // validate the operation request OperationResponse response; var operation = new FindFriendsRequest(this.Protocol, operationRequest); if (OperationHelper.ValidateOperation(operation, log, out response) == false) { return(response); } // check if player online cache is available for the application var playerCache = this.Application.PlayerOnlineCache; if (playerCache == null) { return(new OperationResponse((byte)OperationCode.FindFriends) { ReturnCode = (short)ErrorCode.InternalServerError, DebugMessage = "PlayerOnlineCache is not set!" }); } playerCache.FiendFriends(this, operation, sendParameters); return(null); }
private void HandleFiendFriends(PeerBase peer, FindFriendsRequest request, SendParameters sendParameters) { try { var onlineList = new bool[request.UserList.Length]; var gameIds = new string[request.UserList.Length]; for (int i = 0; i < request.UserList.Length; i++) { gameIds[i] = string.Empty; PlayerState playerState; if (this.playerDict.TryGetValue(request.UserList[i], out playerState)) { onlineList[i] = true; if (playerState.ActiveGame != null) { if ((request.OperationOptions & FindFriendsOptions.CreatedOnGS) == FindFriendsOptions.CreatedOnGS) { if (!playerState.ActiveGame.HasBeenCreatedOnGameServer) { continue; } } if ((request.OperationOptions & FindFriendsOptions.Visible) == FindFriendsOptions.Visible) { if (!playerState.ActiveGame.IsVisible) { continue; } } if ((request.OperationOptions & FindFriendsOptions.Open) == FindFriendsOptions.Open) { if (!playerState.ActiveGame.IsOpen) { continue; } } gameIds[i] = playerState.ActiveGame.Id; } } } var response = new FindFriendsResponse { IsOnline = onlineList, UserStates = gameIds }; var opResponse = new OperationResponse((byte)OperationCode.FindFriends, response); peer.SendOperationResponse(opResponse, sendParameters); } catch (Exception ex) { log.Error(ex); } }
private void HandleFiendFriends(PeerBase peer, FindFriendsRequest request, SendParameters sendParameters) { try { var onlineList = new bool[request.UserList.Length]; var gameIds = new string[request.UserList.Length]; for (int i = 0; i < request.UserList.Length; i++) { PlayerState playerState; if (this.playerDict.TryGetValue(request.UserList[i], out playerState)) { onlineList[i] = true; if (playerState.Game != null) { gameIds[i] = playerState.Game.Id; } else { gameIds[i] = string.Empty; } } else { gameIds[i] = string.Empty; } } var response = new FindFriendsResponse { IsOnline = onlineList, UserStates = gameIds }; var opResponse = new OperationResponse((byte)OperationCode.FiendFriends, response); peer.SendOperationResponse(opResponse, sendParameters); } catch (Exception ex) { log.Error(ex); } }
public void FiendFriends(PeerBase peer, FindFriendsRequest request, SendParameters sendParameters) { this.fiber.Enqueue(() => this.HandleFiendFriends(peer, request, sendParameters)); }