Esempio n. 1
0
        private static void Msocket_MessageReceived(object sender, MessageReceivedEventArgs e)
        {
            try
            {
                SocketCmd cmd = e.GetSocketCmd();
                switch (cmd)
                {
                case SocketCmd.IpLimit:
                    Logger.Write("(IpLimit) " + e.GetSocketData().First(), LogLevel.Service, ConsoleColor.Red);
                    break;

                case SocketCmd.ServerLimit:
                    Logger.Write("(ServerLimit) " + e.GetSocketData().First(), LogLevel.Service, ConsoleColor.Red);
                    break;

                case SocketCmd.Identity:                //first request
                    UserUniequeId = e.GetSocketData().First();
                    SendToMSniperServer(UserUniequeId); //confirm
                    Logger.Write($"(Identity) [ {UserUniequeId} ] connection establisted", LogLevel.Service);
                    break;

                case SocketCmd.PokemonCount:    //server asks what is in your hand (every 3 minutes)
                    RefreshLocationQueue();
                    var x = LocationQueue.GroupBy(p => p.PokemonId)
                            .Select(s => new PokemonCount {
                        PokemonId = s.First().PokemonId, Count = s.Count()
                    })
                            .ToList();
                    SendToMSniperServer(JsonConvert.SerializeObject(x));
                    break;

                case SocketCmd.SendPokemon:    //sending encounters
                    RefreshLocationQueue();
                    LocationQueue = LocationQueue.OrderByDescending(p => p.Iv).ToList();
                    int rq = 1;
                    if (LocationQueue.Count < int.Parse(e.GetSocketData().First()))
                    {
                        rq = LocationQueue.Count;
                    }
                    else
                    {
                        rq = int.Parse(e.GetSocketData().First());
                    }
                    var selected = LocationQueue.GetRange(0, rq);
                    SendToMSniperServer(JsonConvert.SerializeObject(selected));
                    AddToVisited(selected.Select(p => p.EncounterId).ToList());
                    LocationQueue.RemoveRange(0, rq);
                    break;

                case SocketCmd.SendOneSpecies:    //server needs one type pokemon
                    RefreshLocationQueue();
                    PokemonId speciesId    = (PokemonId)Enum.Parse(typeof(PokemonId), e.GetSocketData().First());
                    int       requestCount = int.Parse(e.GetSocketData()[1]);
                    var       onespecies   = LocationQueue.Where(p => p.PokemonId == speciesId).ToList();
                    onespecies = onespecies.OrderByDescending(p => p.Iv).ToList();
                    if (onespecies.Count > 0)
                    {
                        List <EncounterInfo> oneType;
                        if (onespecies.Count > requestCount)
                        {
                            oneType = LocationQueue.GetRange(0, requestCount);
                            AddToVisited(oneType.Select(p => p.EncounterId).ToList());
                            LocationQueue.RemoveRange(0, requestCount);
                        }
                        else
                        {
                            oneType = LocationQueue.GetRange(0, LocationQueue.Count);
                            LocationQueue.Clear();
                        }
                        SendToMSniperServer(JsonConvert.SerializeObject(oneType));
                    }
                    break;

                case SocketCmd.Brodcaster:    //receiving encounter information from server

                    //// disabled fornow
                    //var xcoming = JsonConvert.DeserializeObject<List<EncounterInfo>>(e.GetSocketData().First());
                    //xcoming = FindNew(xcoming);
                    //ReceivedPokemons.AddRange(xcoming);
                    //
                    //RefreshReceivedPokemons();
                    //TimeSpan ts = DateTime.Now - lastNotify;
                    //if (ts.TotalMinutes >= 5)
                    //{
                    //    Logger.Write($"total active spawns:[ {ReceivedPokemons.Count} ]", LogLevel.Service);
                    //    lastNotify = DateTime.Now;
                    //}
                    break;

                case SocketCmd.None:
                    Logger.Write("UNKNOWN ERROR", LogLevel.Service, ConsoleColor.Red);
                    //throw Exception
                    break;
                }
            }
            catch (Exception ex)
            {
                socket.Close();
                Logger.Write(ex.Message, LogLevel.Service, ConsoleColor.Red);
                //throw ex;
            }
        }
 public SocketCmdMessage(SocketCmd tp)
 {
     cmdType = tp;
 }