예제 #1
0
 bool RegisterID(int clientID)
 {
     if (Clients.Count == 30 || Clients.FirstOrDefault(a => a.ID == clientID) != null)
     {
         return(false);
     }
     else
     {
         var d = new SafeClientAdd(AddClient);
         this.Invoke(d, clientID);
         return(true);
     }
 }
예제 #2
0
        private void OnClientRequest(object sender, SimpleTCP.Message e)
        {
            if (e != null)
            {
                string response = "default";
                string msg      = e.MessageString;
                if (msg.Length > 3)
                {
                    switch (msg)
                    {
                    case "checkID": response = GetEmptyClientID().ToString(); break;

                    default:
                        ClientRequest req    = new ClientRequest(msg);
                        var           client = Clients.FirstOrDefault(a => a.ID == req.ClientID);
                        if (client != null)
                        {
                            client.LastRequest = DateTime.Now.ToShortTimeString();
                        }
                        switch (req.Message)
                        {
                        case "register":         // add client to the list
                            response = RegisterID(req.ClientID) ? "true" : "false";
                            break;

                        case "main":         // get state
                            if (client == null)
                            {
                                response = RegisterID(req.ClientID) ? GetClientState(req.ClientID).ToString() : "no_response";
                            }
                            else
                            {
                                response        = GetClientState(req.ClientID).ToString();
                                client.LastInfo = req.Argument;         // set last info
                                Task.Run(async() => await HttpSimpleClient.SendRequestAsync(req.ClientID, response, req.Argument));
                            }
                            break;

                        case "account":         // get account data
                            if (client != null && client.LoadedAccount != null)
                            {
                                client.State = ClientStates.Login;
                                response     = client.LoadedAccount.Username + ":" + client.LoadedAccount.Password;
                                Task.Run(async() => await HttpSimpleClient.SendRequestAsync(req.ClientID, "account", client.LoadedAccount.Username));
                            }
                            else
                            {
                                response = "no_account";
                            }
                            break;

                        case "state":         // get account data
                            if (client != null)
                            {
                                switch (req.Argument)
                                {
                                case "ingame": client.State = ClientStates.InGame; break;

                                case "queue": client.State = ClientStates.Queue; break;
                                }
                                response = "no_response";
                            }
                            break;

                        case "shutdown":         // shutting down the client
                        {
                            if (Clients.Count == 0 || client == null)
                            {
                                response = "no_response";
                            }
                            else
                            {
                                var d = new SafeClientAdd(RemoveClient);
                                this.Invoke(d, req.ClientID);
                                response = "no_response";
                            }
                        }
                        break;

                        case "event": break;
                        }
                        break;
                    }
                }
                if (response != "no_response")
                {
                    e.ReplyLine(response);
                }
            }
        }