コード例 #1
0
        protected override List<IPacketWrapper> DispatchAction(INetworkAction action)
        {
            List<IPacketWrapper> wrappers = base.DispatchAction(action);

            switch (action.ActionType) {
                case NetworkActionType.NetworkTextSay:
                    wrappers.Add(
                        this.WrapPacket(new Packet() {
                            Text = "Chat"
                        })
                    );
                    break;
                case NetworkActionType.NetworkPlayerKick:
                    wrappers.Add(
                        this.WrapPacket(new Packet() {
                            Text = "Kick"
                        })
                    );
                    break;
                case NetworkActionType.NetworkPlayerBan:
                    wrappers.Add(
                        this.WrapPacket(new Packet() {
                            Text = "Ban"
                        })
                    );
                    break;
                case NetworkActionType.NetworkMapAppend:
                    wrappers.Add(
                        this.WrapPacket(new Packet() {
                            Text = "Map"
                        })
                    );
                    break;
                case NetworkActionType.NetworkPlayerKill:
                    wrappers.Add(
                        this.WrapPacket(new Packet() {
                            Text = "Kill"
                        })
                    );
                    break;
                case NetworkActionType.NetworkPlayerMove:
                    wrappers.Add(
                        this.WrapPacket(new Packet() {
                            Text = "Move"
                        })
                    );
                    break;
                case NetworkActionType.NetworkPacketSend:
                    wrappers.Add(
                        this.WrapPacket(new Packet() {
                            Text = "Raw"
                        })
                    );
                    break;
            }

            return wrappers;
        }
コード例 #2
0
ファイル: MedalOfHonorGame.cs プロジェクト: EBassie/Potato
        protected override List<IPacketWrapper> ActionMove(INetworkAction action) {
            List<IPacketWrapper> wrappers = new List<IPacketWrapper>();

            // admin.movePlayer <name: player name> <teamId: Team ID> <squadId: Squad ID> <forceKill: boolean>
            bool forceMove = (action.ActionType == NetworkActionType.NetworkPlayerMoveForce || action.ActionType == NetworkActionType.NetworkPlayerMoveRotateForce);

            MapModel selectedMap = this.State.MapPool.Values.FirstOrDefault(x => String.Compare(x.Name, this.State.Settings.Current.MapNameText, StringComparison.OrdinalIgnoreCase) == 0);

            PlayerModel movePlayer = this.State.Players.Values.First(player => player.Uid == action.Scope.Players.First().Uid);

            if (selectedMap != null) {
                // If they are just looking to rotate the player through the teams
                if (action.ActionType == NetworkActionType.NetworkPlayerMoveRotate || action.ActionType == NetworkActionType.NetworkPlayerMoveRotateForce) {

                    int currentTeamId = -1;

                    int.TryParse(movePlayer.Groups.First(group => group.Type == GroupModel.Team).Uid, out currentTeamId);

                    // Avoid divide by 0 error - shouldn't ever be encountered though.
                    if (selectedMap.GameMode.TeamCount > 0) {
                        int newTeamId = (currentTeamId + 1) % (selectedMap.GameMode.TeamCount + 1);

                        action.Now.Groups.Add(new GroupModel() {
                            Type = GroupModel.Team,
                            Uid = newTeamId == 0 ? "1" : newTeamId.ToString(CultureInfo.InvariantCulture)
                        });
                    }
                }
            }

            wrappers.Add(
                this.CreatePacket(
                    "admin.movePlayer \"{0}\" {1} {2}",
                    movePlayer.Name,
                    action.Now.Groups.First(group => group.Type == GroupModel.Team).Uid,
                    FrostbiteConverter.BoolToString(forceMove)
                )
            );

            return wrappers;
        }
コード例 #3
0
ファイル: Protocol.cs プロジェクト: EBassie/Potato
        /// <summary>
        /// Process a generic network action
        /// </summary>
        /// <param name="action"></param>
        public virtual List<IPacket> Action(INetworkAction action)
        {
            List<IPacket> packets = null;
            List<IPacketWrapper> wrappers = this.DispatchAction(action);

            if (wrappers != null) {
                // Fetch all of the packets that are not null
                packets = wrappers.Where(wrapper => wrapper != null).Select(wrapper => wrapper.Packet).ToList();

                // Defer this completed action for now.
                this.WaitingActions.Wait(action, packets);

                // Now send the packets
                foreach (IPacketWrapper wrapper in wrappers) {
                    this.Send(wrapper);
                }
            }

            return packets;
        }
コード例 #4
0
 public List<IPacket> Action(INetworkAction action)
 {
     return this.SandboxedProtocol != null ? this.SandboxedProtocol.Action(action) : null;
 }
コード例 #5
0
ファイル: TestProtocolEight.cs プロジェクト: EBassie/Potato
 public List<IPacket> Action(INetworkAction action) {
     throw new NotImplementedException();
 }
コード例 #6
0
ファイル: WaitingActions.cs プロジェクト: EBassie/Potato
 /// <summary>
 /// Register a new action to await for responses.
 /// </summary>
 /// <param name="action">The action being taken</param>
 /// <param name="requests">A list of packets sent to the game server to complete this action</param>
 /// <param name="expiration">An optional datetime when this action should expire</param>
 public void Wait(INetworkAction action, List<IPacket> requests, DateTime? expiration = null)
 {
     this.Waiting.TryAdd(action.Uid, new WaitingAction() {
         Action = action,
         Requests = new List<IPacket>(requests),
         Expiration = expiration ?? DateTime.Now.AddSeconds(10)
     });
 }
コード例 #7
0
ファイル: MockGame.cs プロジェクト: EBassie/Potato
 protected override List<IPacketWrapper> DispatchAction(INetworkAction action)
 {
     return new List<IPacketWrapper>();
 }
コード例 #8
0
ファイル: Protocol.cs プロジェクト: EBassie/Potato
        protected virtual List<IPacketWrapper> DispatchAction(INetworkAction action)
        {
            List<IPacketWrapper> wrappers = new List<IPacketWrapper>();

            switch (action.ActionType) {
                case NetworkActionType.NetworkTextSay:
                case NetworkActionType.NetworkTextYell:
                case NetworkActionType.NetworkTextYellOnly:
                    wrappers = this.ActionChat(action);
                    break;

                case NetworkActionType.NetworkPlayerKill:
                    wrappers = this.ActionKill(action);
                    break;

                case NetworkActionType.NetworkPlayerKick:
                    wrappers = this.ActionKick(action);
                    break;

                case NetworkActionType.NetworkPlayerBan:
                case NetworkActionType.NetworkPlayerUnban:
                    wrappers = this.ActionBan(action);
                    break;

                case NetworkActionType.NetworkMapAppend:
                case NetworkActionType.NetworkMapChangeMode:
                case NetworkActionType.NetworkMapClear:
                case NetworkActionType.NetworkMapInsert:
                case NetworkActionType.NetworkMapNext:
                case NetworkActionType.NetworkMapNextIndex:
                case NetworkActionType.NetworkMapRemove:
                case NetworkActionType.NetworkMapRemoveIndex:
                case NetworkActionType.NetworkMapRestart:
                case NetworkActionType.NetworkMapRoundNext:
                case NetworkActionType.NetworkMapRoundRestart:
                    wrappers = this.ActionMap(action);
                    break;

                case NetworkActionType.NetworkPlayerMoveRotate:
                case NetworkActionType.NetworkPlayerMoveRotateForce:
                case NetworkActionType.NetworkPlayerMove:
                case NetworkActionType.NetworkPlayerMoveForce:
                    wrappers = this.ActionMove(action);
                    break;
                case NetworkActionType.NetworkPacketSend:
                    if (action.Now.Content != null) {
                        wrappers.AddRange(action.Now.Content.Select(text => this.CreatePacket(text)));
                    }

                    if (action.Now.Packets != null) {
                        wrappers.AddRange(action.Now.Packets.Select(this.WrapPacket));
                    }
                    break;
            }

            return wrappers;
        }
コード例 #9
0
ファイル: FrostbiteGame.cs プロジェクト: EBassie/Potato
        protected override List<IPacketWrapper> ActionBan(INetworkAction action) {
            List<IPacketWrapper> wrappers = new List<IPacketWrapper>();

            String reason = action.Scope.Content != null ? action.Scope.Content.FirstOrDefault() : String.Empty;
            TimeSubsetModel time = action.Scope.Times != null ? action.Scope.Times.FirstOrDefault() ?? new TimeSubsetModel() : new TimeSubsetModel();

            if (action.ActionType == NetworkActionType.NetworkPlayerBan) {
                if (time.Context == TimeSubsetContext.Permanent) {
                    if (String.IsNullOrEmpty(reason) == true) {
                        wrappers.Add(this.CreatePacket("banList.add guid \"{0}\" perm", action.Scope.Players.First().Uid));
                    }
                    else {
                        wrappers.Add(this.CreatePacket("banList.add guid \"{0}\" perm \"{1}\"", action.Scope.Players.First().Uid, reason));
                    }
                }
                else if (time.Context == TimeSubsetContext.Time && time.Length.HasValue == true) {
                    if (String.IsNullOrEmpty(reason) == true) {
                        wrappers.Add(this.CreatePacket("banList.add guid \"{0}\" seconds {1}", action.Scope.Players.First().Uid, time.Length.Value.TotalSeconds));
                    }
                    else {
                        wrappers.Add(this.CreatePacket("banList.add guid \"{0}\" seconds {1} \"{2}\"", action.Scope.Players.First().Uid, time.Length.Value.TotalSeconds, reason));
                    }
                }
            }
            else if (action.ActionType == NetworkActionType.NetworkPlayerUnban) {
                var player = action.Scope.Players.FirstOrDefault();

                if (player != null) {
                    if (String.IsNullOrEmpty(player.Uid) == false) {
                        wrappers.Add(this.CreatePacket("banList.remove guid \"{0}\"", player.Uid));
                    }
                    else if (String.IsNullOrEmpty(player.Name) == false) {
                        wrappers.Add(this.CreatePacket("banList.remove name \"{0}\"", player.Name));
                    }
                    else if (String.IsNullOrEmpty(player.Ip) == false) {
                        wrappers.Add(this.CreatePacket("banList.remove ip \"{0}\"", player.Ip));
                    }
                }
            }

            wrappers.Add(this.CreatePacket("banList.save"));

            return wrappers;
        }
コード例 #10
0
ファイル: FrostbiteGame.cs プロジェクト: EBassie/Potato
        protected override List<IPacketWrapper> ActionKick(INetworkAction action) {
            List<IPacketWrapper> wrappers = new List<IPacketWrapper>();

            String reason = action.Scope.Content != null ? action.Scope.Content.FirstOrDefault() : String.Empty;

            foreach (PlayerModel player in action.Scope.Players) {
                wrappers.Add(string.IsNullOrEmpty(reason) == false ? this.CreatePacket("admin.kickPlayer \"{0}\" \"{1}\"", player.Name, reason) : this.CreatePacket("admin.kickPlayer \"{0}\"", player.Name));
            }

            return wrappers;
        }
コード例 #11
0
ファイル: FrostbiteGame.cs プロジェクト: EBassie/Potato
        protected override List<IPacketWrapper> ActionKill(INetworkAction action) {
            List<IPacketWrapper> wrappers = new List<IPacketWrapper>();

            String reason = action.Scope.Content != null ? action.Scope.Content.FirstOrDefault() : String.Empty;

            if (action.Scope.Players != null) {
                foreach (PlayerModel target in action.Scope.Players) {
                    wrappers.Add(this.CreatePacket("admin.killPlayer \"{0}\"", target.Name));

                    if (string.IsNullOrEmpty(reason) == false) {
                        wrappers.Add(this.CreatePacket("admin.say \"{0}\" player {1}", reason, target.Name));
                    }
                }
            }

            return wrappers;
        }
コード例 #12
0
ファイル: FrostbiteGame.cs プロジェクト: EBassie/Potato
        protected override List<IPacketWrapper> ActionChat(INetworkAction action) {
            List<IPacketWrapper> wrappers = new List<IPacketWrapper>();

            if (action.Now.Content != null) {
                foreach (String chatMessage in action.Now.Content) {
                    String subset = String.Empty;

                    if (action.Scope.Groups == null && action.Scope.Players == null) {
                        subset = "all";
                    }
                    else if (action.Scope.Players != null && action.Scope.Players.Count > 0) {
                        subset = String.Format(@"player ""{0}""", action.Scope.Players.First().Name);
                    }
                    else if (action.Scope.Groups != null && action.Scope.Groups.Any(group => @group.Type == GroupModel.Team) == true) {
                        subset = String.Format("team {0}", action.Scope.Groups.First(group => @group.Type == GroupModel.Team).Uid);
                    }
                    else if (action.Scope.Groups != null && action.Scope.Groups.Any(group => @group.Type == GroupModel.Team) == true && action.Scope.Groups.Any(group => @group.Type == GroupModel.Squad) == true) {
                        subset = String.Format("squad {0} {1}", action.Scope.Groups.First(group => @group.Type == GroupModel.Team).Uid, action.Scope.Groups.First(group => @group.Type == GroupModel.Squad).Uid);
                    }

                    if (action.ActionType == NetworkActionType.NetworkTextSay) {
                        wrappers.Add(this.CreatePacket("admin.say \"{0}\" {1}", chatMessage, subset));
                    }
                    else if (action.ActionType == NetworkActionType.NetworkTextYell || action.ActionType == NetworkActionType.NetworkTextYellOnly) {
                        wrappers.Add(this.CreatePacket("admin.yell \"{0}\" 8000 {1}", chatMessage, subset));
                    }
                }
            }

            return wrappers;
        }
コード例 #13
0
ファイル: PluginController.cs プロジェクト: EBassie/Potato
 /// <summary>
 /// A helper function for sending proxy network actions to the server.
 /// </summary>
 /// <remarks>
 ///     <para>The action will be executed with no user specified, so it should always be successful, at least from a permissions point of view.</para>
 /// </remarks>
 /// <param name="action">The action to send to the server.</param>
 /// <returns>The result of the command, check the status for a success message.</returns>
 public virtual ICommandResult Action(INetworkAction action) {
     return this.Bubble(new Command() {
         Name = action.ActionType.ToString(),
         Scope = new CommandScopeModel() {
             ConnectionGuid = this.ConnectionGuid
         },
         Parameters = new List<ICommandParameter>() {
             new CommandParameter() {
                 Data = {
                     NetworkActions = new List<INetworkAction>() {
                         action
                     }
                 }
             }
         }
     });
 }
コード例 #14
0
ファイル: MockGame.cs プロジェクト: EBassie/Potato
 protected override List<IPacketWrapper> ActionKick(INetworkAction action) {
     throw new NotImplementedException();
 }
コード例 #15
0
ファイル: Protocol.cs プロジェクト: EBassie/Potato
 protected abstract List<IPacketWrapper> ActionMove(INetworkAction action);
コード例 #16
0
ファイル: FrostbiteGame.cs プロジェクト: EBassie/Potato
        protected override List<IPacketWrapper> ActionMove(INetworkAction action) {
            List<IPacketWrapper> wrappers = new List<IPacketWrapper>();

            if (action.Now.Groups == null) {
                action.Now.Groups = new List<GroupModel>();
            }

            if (action.Scope.Players != null) {
                // admin.movePlayer <name: player name> <teamId: Team ID> <squadId: Squad ID> <forceKill: boolean>
                bool forceMove = (action.ActionType == NetworkActionType.NetworkPlayerMoveForce || action.ActionType == NetworkActionType.NetworkPlayerMoveRotateForce);

                MapModel selectedMap = this.State.MapPool.Select(m => m.Value).FirstOrDefault(map => String.Compare(map.Name, this.State.Settings.Current.MapNameText, StringComparison.OrdinalIgnoreCase) == 0 && map.GameMode != null && String.Compare(map.GameMode.Name, this.State.Settings.Current.GameModeNameText, StringComparison.OrdinalIgnoreCase) == 0);

                foreach (var movePlayer in action.Scope.Players) {
                    // Lookup the player from the state. The command may only include basic information, or just include
                    // the Uid and nothing more.
                    PlayerModel stateMovePlayer;
                    this.State.Players.TryGetValue(movePlayer.Uid, out stateMovePlayer);

                    if (stateMovePlayer != null) {
                        if (selectedMap != null) {
                            // If they are just looking to rotate the player through the teams
                            if (action.ActionType == NetworkActionType.NetworkPlayerMoveRotate || action.ActionType == NetworkActionType.NetworkPlayerMoveRotateForce) {

                                int currentTeamId = -1;

                                int.TryParse(stateMovePlayer.Groups.First(group => @group.Type == GroupModel.Team).Uid, out currentTeamId);

                                var teams = selectedMap.Groups.Count(group => @group.Type == GroupModel.Team);

                                // Avoid divide by 0 error - shouldn't ever be encountered though.
                                if (selectedMap.GameMode != null && teams > 0) {
                                    int newTeamId = (currentTeamId + 1) % (teams + 1);

                                    action.Now.Groups.Add(new GroupModel() {
                                        Type = GroupModel.Team,
                                        Uid = newTeamId == 0 ? "1" : newTeamId.ToString(CultureInfo.InvariantCulture)
                                    });
                                }
                            }

                            // Now check if the destination squad is supported.
                            if (selectedMap.GameMode != null && (selectedMap.GameMode.Name == "SQDM" || selectedMap.GameMode.Name == "SQRUSH")) {
                                if (selectedMap.GameMode.DefaultGroups.Find(group => @group.Type == GroupModel.Squad) != null) {
                                    action.Now.Groups.Add(selectedMap.GameMode.DefaultGroups.Find(group => @group.Type == GroupModel.Squad));
                                }
                            }
                        }

                        // Fix up the team uid
                        if (action.Now.Groups.FirstOrDefault(group => @group.Type == GroupModel.Team) == null) {
                            if (stateMovePlayer.Groups.FirstOrDefault(group => @group.Type == GroupModel.Team) != null) {
                                // No destination team set, use the players current team.
                                action.Now.Groups.Add(stateMovePlayer.Groups.First(group => @group.Type == GroupModel.Team));
                            }
                            else {
                                // Panic, set team uid to 1.
                                action.Now.Groups.Add(new GroupModel() {
                                    Uid = "1"
                                });
                            }
                        }

                        // Fix up the squad uid
                        if (action.Now.Groups.FirstOrDefault(group => @group.Type == GroupModel.Squad) == null) {
                            if (selectedMap != null && selectedMap.GameMode != null && selectedMap.GameMode.DefaultGroups.FirstOrDefault(group => @group.Type == GroupModel.Squad) != null) {
                                action.Now.Groups.Add(selectedMap.GameMode.DefaultGroups.First(group => @group.Type == GroupModel.Squad));
                            }
                            else {
                                action.Now.Groups.Add(new GroupModel() {
                                    Uid = "0"
                                });
                            }
                        }

                        wrappers.Add(this.CreatePacket(
                            "admin.movePlayer \"{0}\" {1} {2} {3}",
                            stateMovePlayer.Name,
                            action.Now.Groups.First(group => @group.Type == GroupModel.Team).Uid,
                            action.Now.Groups.First(group => @group.Type == GroupModel.Squad).Uid,
                            FrostbiteConverter.BoolToString(forceMove)
                        ));
                    }
                }
            }

            return wrappers;
        }
コード例 #17
0
ファイル: Protocol.cs プロジェクト: EBassie/Potato
        protected virtual List<IPacketWrapper> ActionRaw(INetworkAction action)
        {
            List<IPacketWrapper> wrappers = new List<IPacketWrapper>();

            wrappers.AddRange(action.Now.Content.Select(text => this.CreatePacket(text)));

            wrappers.AddRange(action.Now.Packets.Select(this.WrapPacket));

            return wrappers;
        }
コード例 #18
0
ファイル: FrostbiteGame.cs プロジェクト: EBassie/Potato
        protected override List<IPacketWrapper> ActionMap(INetworkAction action) {
            List<IPacketWrapper> wrappers = new List<IPacketWrapper>();

            foreach (MapModel map in action.Now.Maps) {
                var closureMap = map;

                if (action.ActionType == NetworkActionType.NetworkMapAppend) {
                    wrappers.Add(this.CreatePacket("mapList.append \"{0}\" {1}", map.Name, map.Rounds));

                    wrappers.Add(this.CreatePacket("mapList.save"));

                    wrappers.Add(this.CreatePacket("mapList.list rounds"));
                }
                else if (action.ActionType == NetworkActionType.NetworkMapChangeMode) {
                    if (map.GameMode != null) {
                        wrappers.Add(this.CreatePacket("admin.setPlaylist \"{0}\"", map.GameMode.Name));
                    }
                }
                else if (action.ActionType == NetworkActionType.NetworkMapInsert) {
                    wrappers.Add(this.CreatePacket("mapList.insert {0} \"{1}\" {2}", map.Index, map.Name, map.Rounds));

                    wrappers.Add(this.CreatePacket("mapList.save"));

                    wrappers.Add(this.CreatePacket("mapList.list rounds"));
                }
                else if (action.ActionType == NetworkActionType.NetworkMapRemove) {
                    var matchingMaps = this.State.Maps.Where(m => m.Value.Name == closureMap.Name).OrderByDescending(m => m.Value.Index);

                    wrappers.AddRange(matchingMaps.Select(match => this.CreatePacket("mapList.remove {0}", match.Value.Index)));

                    wrappers.Add(this.CreatePacket("mapList.save"));

                    wrappers.Add(this.CreatePacket("mapList.list rounds"));
                }
                else if (action.ActionType == NetworkActionType.NetworkMapRemoveIndex) {
                    wrappers.Add(this.CreatePacket("mapList.remove {0}", map.Index));

                    wrappers.Add(this.CreatePacket("mapList.list rounds"));
                }
                else if (action.ActionType == NetworkActionType.NetworkMapNextIndex) {
                    wrappers.Add(this.CreatePacket("mapList.nextLevelIndex {0}", map.Index));
                }
                else if (action.ActionType == NetworkActionType.NetworkMapRestart || action.ActionType == NetworkActionType.NetworkMapRoundRestart) {
                    wrappers.Add(this.CreatePacket("admin.restartRound"));
                }
                else if (action.ActionType == NetworkActionType.NetworkMapNext || action.ActionType == NetworkActionType.NetworkMapRoundNext) {
                    wrappers.Add(this.CreatePacket("admin.runNextRound"));
                }
                else if (action.ActionType == NetworkActionType.NetworkMapClear) {
                    wrappers.Add(this.CreatePacket("mapList.clear"));

                    wrappers.Add(this.CreatePacket("mapList.save"));
                }
            }

            return wrappers;
        }
コード例 #19
0
ファイル: MockGame.cs プロジェクト: EBassie/Potato
 protected override List<IPacketWrapper> ActionMove(INetworkAction action)
 {
     throw new System.NotImplementedException();
 }
コード例 #20
0
ファイル: MockProtocol.cs プロジェクト: EBassie/Potato
 public List<IPacket> Action(INetworkAction action) {
     return null;
 }
コード例 #21
0
ファイル: SecondGame.cs プロジェクト: EBassie/Potato
        protected override List<IPacketWrapper> ActionMap(INetworkAction action) {
            List<IPacketWrapper> wrappers = new List<IPacketWrapper>();

            // If it's centered around a list of maps (adding, removing etc)
            if (action.Now.Maps != null && action.Now.Maps.Count > 0) {
                foreach (MapModel map in action.Now.Maps) {
                    var closureMap = map;

                    if (action.ActionType == NetworkActionType.NetworkMapAppend) {
                        // mapList.add <map: string> <gamemode: string> <rounds: integer> [index: integer]
                        wrappers.Add(this.CreatePacket("mapList.add \"{0}\" \"{1}\" {2}", map.Name, closureMap.GameMode.Name, map.Rounds));

                        wrappers.Add(this.CreatePacket("mapList.save"));

                        wrappers.Add(this.CreatePacket("mapList.list"));
                    }
                    // Added by Imisnew2 - You should check this phogue!
                    else if (action.ActionType == NetworkActionType.NetworkMapChangeMode) {
                        if (map.GameMode != null) {
                            wrappers.Add(this.CreatePacket("admin.setPlaylist \"{0}\"", map.GameMode.Name));
                        }
                    }
                    else if (action.ActionType == NetworkActionType.NetworkMapInsert) {
                        // mapList.add <map: string> <gamemode: string> <rounds: integer> [index: integer]
                        wrappers.Add(this.CreatePacket("mapList.add \"{0}\" \"{1}\" {2} {3}", map.Name, closureMap.GameMode.Name, map.Rounds, map.Index));

                        wrappers.Add(this.CreatePacket("mapList.save"));

                        wrappers.Add(this.CreatePacket("mapList.list"));
                    }
                    else if (action.ActionType == NetworkActionType.NetworkMapRemove) {
                        var matchingMaps = this.State.Maps.Where(m => m.Value.Name == closureMap.Name).OrderByDescending(m => m.Value.Index);

                        wrappers.AddRange(matchingMaps.Select(match => this.CreatePacket("mapList.remove {0}", match.Value.Index)));

                        wrappers.Add(this.CreatePacket("mapList.save"));

                        wrappers.Add(this.CreatePacket("mapList.list"));
                    }
                    else if (action.ActionType == NetworkActionType.NetworkMapRemoveIndex) {
                        wrappers.Add(this.CreatePacket("mapList.remove {0}", map.Index));

                        wrappers.Add(this.CreatePacket("mapList.list"));
                    }
                    else if (action.ActionType == NetworkActionType.NetworkMapNextIndex) {
                        wrappers.Add(this.CreatePacket("mapList.setNextMapIndex {0}", map.Index));
                    }
                }
            }
            else {
                // The action does not need a map to function
                if (action.ActionType == NetworkActionType.NetworkMapRestart || action.ActionType == NetworkActionType.NetworkMapRoundRestart) {
                    wrappers.Add(this.CreatePacket("mapList.restartRound"));
                }
                else if (action.ActionType == NetworkActionType.NetworkMapNext || action.ActionType == NetworkActionType.NetworkMapRoundNext) {
                    wrappers.Add(this.CreatePacket("mapList.runNextRound"));
                }
                else if (action.ActionType == NetworkActionType.NetworkMapClear) {
                    wrappers.Add(this.CreatePacket("mapList.clear"));

                    wrappers.Add(this.CreatePacket("mapList.save"));
                }
            }

            return wrappers;
        }
コード例 #22
0
 public List<IPacket> Action(INetworkAction action) {
     return this.OnActionHandler != null ? this.OnActionHandler(action) : null;
 }
コード例 #23
0
ファイル: WaitingActions.cs プロジェクト: EBassie/Potato
 protected virtual void OnExpired(INetworkAction action, List<IPacket> requests, List<IPacket> responses)
 {
     Action<INetworkAction, List<IPacket>, List<IPacket>> handler = Expired;
     if (handler != null) {
         handler(action, requests, responses);
     }
 }
コード例 #24
0
 public void PlayerActionRequest(INetworkAction action)
 {
     action.SenRequest(); // TODO put game id here
 }