Пример #1
0
 public void AddOutputData(ServerCore.Data outputData)
 {
     lock (outputBuffer)
     {
         outputBuffer.Add(outputData);
         dataForSending.Set();
     }
 }
Пример #2
0
        public IWorldActionExecutor GetWorld(ServerCore.Data data)
        {
            int index = -1;

            if (!IsUserLogged(data.clientSocket, out index))
            {
                return(null);
            }

            return(loggedBuffer[index].wold);
        }
Пример #3
0
        public bool ExecuteAction(ref ServerCore.Data inputdata)
        {
            int action = inputdata.action[1] * 257 + inputdata.action[2];

            Actions act = (Actions)action;

            #region SetPosition
            if (act == Actions.SetPosition)
            {
                Vector3 pos = new Vector3();
                if (AreCoordinates(inputdata.parameters, out pos))
                {
                    this.position = pos;
                }
            }
            #endregion

            #region GetPosition
            else if (act == Actions.GetPosition)
            {
                inputdata.parameters = position.ToString();
                return(true);
            }
            #endregion

            #region GetPlayersPosition
            else if (act == Actions.GetPlayersPosition)
            {
                int           index   = -1;
                String[]      users   = Accounts.GetInstance().GetLoggedUsers(Accounts.GetInstance().SocketToUsername(inputdata.clientSocket), out index);
                List <String> players = new List <String>();

                for (int t = 0; t < users.Length; t++)
                {
                    IWorldActionExecutor world = Accounts.GetInstance().GetWorld(users[t]);

                    if (world != null && t != index)
                    {
                        players.AddRange(world.GetPosition().ToString());
                    }
                }

                inputdata.parameters = players.ToArray();

                return(true);
            }
            #endregion

            return(false);
        }
Пример #4
0
        private void SendDataToClient(ServerCore.Data od)
        {
            if (od.clientSocket.Connected)
            {
                NetworkStream networkStream = new NetworkStream(od.clientSocket, false);
                StreamWriter  streamWriter  = new StreamWriter(networkStream);

                List <char> packet = new List <char>();

                packet.Add(od.priority);
                packet.Add(od.action[0]);
                packet.Add(od.action[1]);
                packet.Add(od.action[2]);
                packet.Add(od.flags);

                for (int t = 0; t < od.parameters.Length; t++)
                {
                    char[] par = od.parameters[t].ToCharArray();

                    for (int u = 0; u < par.Length; u++)
                    {
                        packet.Add(par[u]);
                    }

                    packet.Add('$');
                }

                try
                {
                    streamWriter.WriteLine(packet.ToArray());
                    streamWriter.Flush();

                    streamWriter.Close();
                }
                catch
                {
                    //uzivatel se odpojil, data se zahodi ...
                }
            }
        }
Пример #5
0
        private void AcceptClient(IAsyncResult asyn)
        {
            allDone.Set();

            Socket listener     = (Socket)asyn.AsyncState;
            Socket clientsocket = listener.EndAccept(asyn);

            ServerCore.Data data = new ServerCore.Data();
            data.clientSocket = clientsocket;

            while (clientsocket.Connected)
            {
                NetworkStream networkStream = new NetworkStream(clientsocket, false);
                StreamReader  streamReader  = new StreamReader(networkStream);

                try
                {
                    if (streamReader.EndOfStream)
                    {
                        break;
                    }
                }
                catch
                {
                    break;
                }

                string line = streamReader.ReadLine();

                #region parsing packet
                if (line.Length > 4)
                {
                    data.priority = line[0];
                    data.action   = new char[3] {
                        line[1], line[2], line[3]
                    };
                    data.flags = line[4];

                    line = line.Substring(5);

                    List <String> parameters = new List <string>();
                    while (true)
                    {
                        int parindex = line.IndexOf("$");

                        if (parindex == -1)
                        {
                            break;
                        }

                        parameters.Add(line.Substring(0, parindex));
                        line = line.Substring(parindex + 1);
                    }

                    data.parameters = parameters.ToArray();
                    lock (dataBuffer)
                    {
                        dataBuffer.Add(data);
                    }
                }
                #endregion
            }

            users--;
            clientsocket.Close();
        }
Пример #6
0
        public bool ExecuteAction(ref ServerCore.Data inputdata)
        {
            Actions action = (Actions)(inputdata.action[1] * 257 + inputdata.action[2]);

            #region GetLoggedUsers
            if (action == Actions.GetLoggedUsers)
            {
                inputdata.parameters = GetLoggedUsers(SocketToUsername(inputdata.clientSocket));
            }
            #endregion

            #region GetAllChat
            else if (action == Actions.GetAllChat)
            {
                inputdata.parameters = GetAllChat(GetIndexOfUser(inputdata.clientSocket));
            }
            #endregion

            #region SendChatMessage
            else if (action == Actions.SendChatMessage)
            {
                if (inputdata.parameters.Length >= 1)
                {
                    SendChatMessage(SocketToUsername(inputdata.clientSocket), inputdata.parameters[0]);
                    return(false);
                }
                else
                {
                    inputdata.parameters = ServerCore.Data.NOT_SUPPORTED;
                }
            }
            #endregion

            #region Logout
            else if (action == Actions.Logout)
            {
                inputdata.parameters = Logout(inputdata.clientSocket);
                inputdata.flags      = 'T';
            }
            #endregion

            #region Login
            else if (action == Actions.Login)
            {
                if (inputdata.parameters.Length >= 2)
                {
                    inputdata.parameters = Login(inputdata.clientSocket, inputdata.parameters[0], inputdata.parameters[1]);
                }
                else
                {
                    inputdata.parameters = ServerCore.Data.NOT_SUPPORTED;
                }
            }
            #endregion

            #region SendMessage
            else if (action == Actions.SendMessage)
            {
                if (inputdata.parameters.Length >= 2)
                {
                    if (SendMessage(SocketToUsername(inputdata.clientSocket), inputdata.parameters[0], inputdata.parameters[1]))
                    {
                        return(false);
                    }
                    else
                    {
                        inputdata.parameters = new string[] { "NotLogged" };
                    }
                }
            }
            #endregion

            return(true);
        }