コード例 #1
0
        //GameDataPacket
        private static void HandlePacket(GameDataPacket packet)
        {
            foreach (var pkt in packet.GameObjects)
            {
                HandlePacket((dynamic)pkt);
            }

            CustomColors.Load(packet.ColorsJson);
            Globals.HasGameData = true;
        }
コード例 #2
0
 public void SendPacket(int clientId, GameDataPacket packet)
 {
     if (killServer && Thread.CurrentThread == game.MainThread)
     {
         throw new GameOverException()
               {
                   EveryoneQuits = true
               };
     }
     Gamers[clientId].SendAsync(packet);
 }
コード例 #3
0
 public bool Send(GameDataPacket packet)
 {
     try
     {
         Serializer.SerializeWithLengthPrefix<GameDataPacket>(DataStream, packet, PrefixStyle.Base128);
         return true;
     }
     catch (Exception)
     {
         return false;
     }
 }
コード例 #4
0
 public bool Send(GameDataPacket packet)
 {
     try
     {
         Serializer.SerializeWithLengthPrefix <GameDataPacket>(DataStream, packet, PrefixStyle.Base128);
         return(true);
     }
     catch (Exception)
     {
         return(false);
     }
 }
コード例 #5
0
        private void HandleGameData(GameDataPacket packet)
        {
            ParseGameData(packet);

            if (IsInitialized)
            {
                Save();
            }

            if (!Moving)
            {
                Module.SendPacketToAll(packet);
            }
            else
            {
                Module.OnPosition(this);
            }

            SendPacket(GetDataPacket());


            // We assume that if we get a GameData, it's a client that wanna play
            if (FirstGameData)
            {
                return;
            }
            FirstGameData = true;

            if (!Module.AssignID(this))
            {
                return;
            }

            SendPacket(new IDPacket {
                Origin = Origin.Server, PlayerID = ID
            });
            SendPacket(new WorldDataPacket {
                Origin = Origin.Server, DataItems = Module.World.GenerateDataItems()
            });

            if (!IsGameJoltPlayer)
            {
                SendServerMessage("Please use /login %PASSWORD% for logging in or registering");
                SendServerMessage("Please note that chat data  isn't sended secure to server");
                SendServerMessage("So it can be seen via traffic sniffing");
                SendServerMessage("Don't use your regular passwords");
                SendServerMessage("On server it's stored fully secure via SHA-512");
            }
            else
            {
                Initialize();
            }
        }
コード例 #6
0
        //GameDataPacket
        private static void HandlePacket(GameDataPacket packet)
        {
            foreach (var obj in packet.GameObjects)
            {
                HandlePacket((dynamic)obj);
            }

            Globals.HasGameData = true;
            if (!Globals.InEditor && Globals.HasGameData && Globals.CurrentMap != null)
            {
                Globals.LoginForm.BeginInvoke(Globals.LoginForm.EditorLoopDelegate);
            }

            GameContentManager.LoadTilesets();
        }
コード例 #7
0
ファイル: ServerGamer.cs プロジェクト: kradchen/sgs
        private void ReceiveLoop()
        {
            Game.RegisterCurrentThread();
            while (true)
            {
                GameDataPacket packet = Receive();
                if (packet == null)
                {
                    break;
                }
                try
                {
                    if (packet is GameResponse)
                    {
                        semaPakArrival.WaitOne();
                    }
                    var handler2 = OnGameDataPacketReceived;
                    if (handler2 != null)
                    {
                        handler2(packet);
                    }
                }
                catch (Exception e)
                {
                    while (e.InnerException != null)
                    {
                        e = e.InnerException;
                    }

                    Trace.TraceError(e.StackTrace);
                    Trace.Assert(false, e.StackTrace);

                    var crashReport = new StreamWriter(FileRotator.CreateFile("./Crash", "crash", ".dmp", 1000));
                    crashReport.WriteLine(e);
                    crashReport.Close();
                    break;
                }
            }
            receiveThread = null;
        }
コード例 #8
0
ファイル: ServerGamer.cs プロジェクト: kradchen/sgs
 public void Send(GameDataPacket packet, bool doRecord = true)
 {
     lock (senderLock)
     {
         DataStream.IsRecordEnabled = doRecord;
         Trace.TraceInformation("ServerGamer : Send {0}({1}) to client {2}", packet.GetType().Name, packet.GetHashCode(), this.GetHashCode());
         Serializer.SerializeWithLengthPrefix <GameDataPacket>(DataStream, packet, PrefixStyle.Base128);
         DataStream.Flush();
     }
     if (!DataStream.IsLastWriteSuccessful && !IsSpectator)
     {
         OnlineStatus = OnlineStatus.Offline;
         var handler = OnDisconnected;
         if (handler != null)
         {
             try
             {
                 OnDisconnected(this);
             }
             catch (Exception) { }
         }
     }
 }
コード例 #9
0
ファイル: ClientGamer.cs プロジェクト: kradchen/sgs
 public void Send(GameDataPacket packet)
 {
     Serializer.SerializeWithLengthPrefix<GameDataPacket>(DataStream, packet, PrefixStyle.Base128);
 }
コード例 #10
0
ファイル: ServerGamer.cs プロジェクト: kradchen/sgs
 public void SendAsync(GameDataPacket packet)
 {
     sendQueue.Add(packet);
 }
コード例 #11
0
ファイル: ServerGamer.cs プロジェクト: kradchen/sgs
 public void Send(GameDataPacket packet, bool doRecord = true)
 {
     lock (senderLock)
     {
         DataStream.IsRecordEnabled = doRecord;
         Trace.TraceInformation("ServerGamer : Send {0}({1}) to client {2}", packet.GetType().Name, packet.GetHashCode(), this.GetHashCode());
         Serializer.SerializeWithLengthPrefix<GameDataPacket>(DataStream, packet, PrefixStyle.Base128);
         DataStream.Flush();
     }
     if (!DataStream.IsLastWriteSuccessful && !IsSpectator)
     {
         OnlineStatus = OnlineStatus.Offline;
         var handler = OnDisconnected;
         if (handler != null)
         {
             try
             {
                 OnDisconnected(this);
             }
             catch (Exception) { }
         }
     }
 }
コード例 #12
0
ファイル: Client.cs プロジェクト: kradchen/sgs
 public void Send(GameDataPacket p)
 {
     networkService.Send(p);
 }
コード例 #13
0
ファイル: Server.cs プロジェクト: RagingBigFemaleBird/sgs
 public void SendPacket(int clientId, GameDataPacket packet)
 {
     if (killServer && Thread.CurrentThread == game.MainThread)
     {
         throw new GameOverException() { EveryoneQuits = true };
     }
     Gamers[clientId].SendAsync(packet);
 }
コード例 #14
0
 public void Send(GameDataPacket p)
 {
     networkService.Send(p);
 }
コード例 #15
0
 public void Send(GameDataPacket packet)
 {
     Serializer.SerializeWithLengthPrefix <GameDataPacket>(DataStream, packet, PrefixStyle.Base128);
 }
コード例 #16
0
        private void OnGameDataPacketReceived(GameDataPacket packet)
        {
            lock (receiveInProcess)
            {
                if (packet is GameResponse)
                {
                    if (CurrentQuestionState == QuestionState.None)
                    {
                        return;
                    }
                    Game.CurrentGame.HandCardSwitcher.HandleHandCardMovements();
                    var state = CurrentQuestionState;
                    switch (state)
                    {
                    case QuestionState.AskForCardUsage:
                        var response = packet as AskForCardUsageResponse;
                        if (response == null || response.Id != QuestionId)
                        {
                            Gamer.ReceiveAsync();
                            break;
                        }
                        ISkill        skill;
                        List <Card>   cards;
                        List <Player> players;
                        response.ToAnswer(out skill, out cards, out players, PlayerId);
                        CurrentQuestionState = QuestionState.None;
                        AnswerCardUsage(skill, cards, players);
                        break;

                    case QuestionState.AskForCardChoice:
                        var response2 = packet as AskForCardChoiceResponse;
                        if (response2 == null || response2.Id != QuestionId)
                        {
                            Gamer.ReceiveAsync();
                            break;
                        }
                        int opt;
                        var result = response2.ToAnswer(PlayerId, out opt);
                        if (currentChoiceOptions != null)
                        {
                            currentChoiceOptions.OptionResult = opt;
                        }
                        CurrentQuestionState = QuestionState.None;
                        AnswerCardChoice(result);
                        break;

                    case QuestionState.AskForMultipleChoice:
                        var response3 = packet as AskForMultipleChoiceResponse;
                        if (response3 == null || response3.Id != QuestionId)
                        {
                            Gamer.ReceiveAsync();
                            break;
                        }
                        CurrentQuestionState = QuestionState.None;
                        AnswerMultipleChoice(response3.ChoiceIndex);
                        break;
                    }
                }
                else if (packet is CardRearrangementNotification)
                {
                    for (int i = 0; i < Game.CurrentGame.GameServer.MaxClients; i++)
                    {
                        if (i != PlayerId)
                        {
                            Game.CurrentGame.GameServer.SendPacket(i, packet);
                        }
                    }
                }
                else if (packet is HandCardMovementNotification)
                {
                    var notif = packet as HandCardMovementNotification;
                    Game.CurrentGame.HandCardSwitcher.QueueHandCardMovement(notif);
                }
            }
        }
コード例 #17
0
ファイル: ServerGamer.cs プロジェクト: kradchen/sgs
 public void SendAsync(GameDataPacket packet)
 {
     sendQueue.Add(packet);
 }
コード例 #18
0
        private void ParseGameData(GameDataPacket packet)
        {
            if (packet.DataItems != null)
            {
                var strArray = packet.DataItems.ToArray();
                if (strArray.Length >= 14)
                {
                    for (var index = 0; index < strArray.Length; index++)
                    {
                        var dataItem = strArray[index];

                        if (string.IsNullOrEmpty(dataItem))
                        {
                            continue;
                        }

                        switch (index)
                        {
                        case 0:
                            GameMode = packet.GameMode;
                            break;

                        case 1:
                            IsGameJoltPlayer = packet.IsGameJoltPlayer;
                            break;

                        case 2:
                            GameJoltID = packet.GameJoltID;
                            break;

                        case 3:
                            DecimalSeparator = packet.DecimalSeparator;
                            break;

                        case 4:
                            Nickname = packet.Name;
                            break;

                        case 5:
                            LevelFile = packet.LevelFile;
                            break;

                        case 6:
                            Position = packet.GetPosition(DecimalSeparator);
                            //if (packet.GetPokemonPosition(DecimalSeparator) != Vector3.Zero)
                            //{
                            //    LastPosition = Position;
                            //
                            //    Position = packet.GetPosition(DecimalSeparator);
                            //
                            //    IsMoving = LastPosition != Position;
                            //}
                            break;

                        case 7:
                            Facing = packet.Facing;
                            break;

                        case 8:
                            Moving = packet.Moving;
                            break;

                        case 9:
                            Skin = packet.Skin;
                            break;

                        case 10:
                            BusyType = packet.BusyType;
                            //Basic.ServersManager.UpdatePlayerList();
                            break;

                        case 11:
                            PokemonVisible = packet.PokemonVisible;
                            break;

                        case 12:
                            if (packet.GetPokemonPosition(DecimalSeparator) != Vector3.Zero)
                            {
                                PokemonPosition = packet.GetPokemonPosition(DecimalSeparator);
                            }
                            break;

                        case 13:
                            PokemonSkin = packet.PokemonSkin;
                            break;

                        case 14:
                            PokemonFacing = packet.PokemonFacing;
                            break;
                        }
                    }
                }
                else
                {
                    Logger.Log(LogType.Warning, $"P3D Reading Error: ParseGameData DataItems < 14. Packet DataItems {packet.DataItems}.");
                }
            }
            else
            {
                Logger.Log(LogType.Warning, "P3D Reading Error: ParseGameData DataItems is null.");
            }
        }
コード例 #19
0
 private void OnGameDataPacketReceived(GameDataPacket packet)
 {
     lock (receiveInProcess)
     {
         if (packet is GameResponse)
         {
             if (CurrentQuestionState == QuestionState.None) return;
             Game.CurrentGame.HandCardSwitcher.HandleHandCardMovements();
             var state = CurrentQuestionState;
             switch (state)
             {
                 case QuestionState.AskForCardUsage:
                     var response = packet as AskForCardUsageResponse;
                     if (response == null || response.Id != QuestionId)
                     {
                         Gamer.ReceiveAsync();
                         break;
                     }
                     ISkill skill;
                     List<Card> cards;
                     List<Player> players;
                     response.ToAnswer(out skill, out cards, out players, PlayerId);
                     CurrentQuestionState = QuestionState.None;
                     AnswerCardUsage(skill, cards, players);
                     break;
                 case QuestionState.AskForCardChoice:
                     var response2 = packet as AskForCardChoiceResponse;
                     if (response2 == null || response2.Id != QuestionId)
                     {
                         Gamer.ReceiveAsync();
                         break;
                     }
                     int opt;
                     var result = response2.ToAnswer(PlayerId, out opt);
                     if (currentChoiceOptions != null) currentChoiceOptions.OptionResult = opt;
                     CurrentQuestionState = QuestionState.None;
                     AnswerCardChoice(result);
                     break;
                 case QuestionState.AskForMultipleChoice:
                     var response3 = packet as AskForMultipleChoiceResponse;
                     if (response3 == null || response3.Id != QuestionId)
                     {
                         Gamer.ReceiveAsync();
                         break;
                     }
                     CurrentQuestionState = QuestionState.None;
                     AnswerMultipleChoice(response3.ChoiceIndex);
                     break;
             }
         }
         else if (packet is CardRearrangementNotification)
         {
             for (int i = 0; i < Game.CurrentGame.GameServer.MaxClients; i++)
             {
                 if (i != PlayerId) Game.CurrentGame.GameServer.SendPacket(i, packet);
             }
         }
         else if (packet is HandCardMovementNotification)
         {
             var notif = packet as HandCardMovementNotification;
             Game.CurrentGame.HandCardSwitcher.QueueHandCardMovement(notif);
         }
     }
 }
コード例 #20
0
ファイル: Client.cs プロジェクト: BlueBerryBread/sgs_byCsharp
 public void Send(GameDataPacket p)
 {
     gamer.Send(p);
 }