Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include "Server.h"
- #include <cstdlib>
- #include <cstdio>
- #include <ctime>
- int main()
- {
- srand(time(NULL));
- Server S;
- S.main();
- return 0;
- }
- void Server::main() {
- std::cout << "Nasluchiwanie.." << std::endl;
- //------------------------------------------Laczenie
- ip = sf::IpAddress::IpAddress("127.0.0.1");
- listener.listen(2000);
- listener.accept(socket);
- std::cout << "Polaczono" << std::endl;
- //------------------------------------------Laczenie
- Prep_ID();
- socket.send(msg, 64);
- ClearPacket();
- std::cout << "Wyslano IP" << std::endl;
- ShowPacket();
- std::cout << std::endl;
- //------------------------------------------Praca
- while (Status != "Stop_") {
- Odbior_pakietu();
- std::cout << "Odebrano pakiet" << std::endl;
- ShowPacket();
- std::cout << std::endl;
- if (Status == "Stop_") {
- socket.disconnect();
- return;
- }
- else {
- Wyluskanie_dzialania();
- }
- }
- }
- void Server::Prep_ID() {
- int r = rand() % 9 + 1;
- Odp = "Witaj";
- Status = "dajID";
- ID = "0";
- Czas = datowanie();
- Dane = "000000000" + std::to_string(r);
- Packing();
- }
- void Server::Prep_result() {
- ID = "0";
- Czas = datowanie();
- std::string temp;
- temp = std::to_string(wynik);
- Dane = "";
- if (wynik > 0) {
- if (temp.size() <= 10) {
- int ilosc_zer = 10 - temp.size();
- for (int i = ilosc_zer; i > 0; i--) {
- Dane += "0";
- }
- Dane += temp;
- Status = "Wynik";
- }
- else {
- Status = "Error";
- Dane = " ";
- }
- }
- else {
- if (temp.size() <= 9) {
- int ilosc_zer = 9 - temp.size();
- for (int i = ilosc_zer; i > 0; i--) {
- Dane += "0";
- }
- Dane += temp;
- Status = "Wynik";
- }
- else {
- Status = "Error";
- Dane = " ";
- }
- }
- Packing();
- }
- void Server::Odbior_pakietu() {
- socket.receive(msg, 64, received);
- Unpacking();
- }
- void Server::Wyluskanie_liczb() {
- int cnt = 0;
- for (int i = 0; i < 5; i++) {
- if (Dane[i] == '0') {
- cnt++;
- }
- else { break; }
- }
- l1 = std::stoi(Dane.substr(cnt, 5 - cnt));
- cnt = 0;
- for (int i = 5; i < 10; i++) {
- if (Dane[i] == '0') {
- cnt++;
- }
- else { break; }
- }
- l2 = std::stoi(Dane.substr(5 + cnt, 5 - cnt));
- }
- void Server::Wyluskanie_dzialania() {
- if (Odp == "Dodaj") {
- Wyluskanie_liczb();
- wynik = dodaj(l1, l2);
- Prep_result();
- std::cout << "Wyslano pakiet" << std::endl;
- ShowPacket();
- std::cout << std::endl;
- socket.send(msg, 64);
- ClearPacket();
- }
- else if (Odp == "odejm") {
- Wyluskanie_liczb();
- wynik = odej(l1, l2);
- Prep_result();
- std::cout << "Wyslano pakiet" << std::endl;
- ShowPacket();
- socket.send(msg, 64);
- ClearPacket();
- }
- else if (Odp == "pomno") {
- Wyluskanie_liczb();
- wynik = mnoz(l1, l2);
- Prep_result();
- std::cout << "Wyslano pakiet" << std::endl;
- ShowPacket();
- socket.send(msg, 64);
- ClearPacket();
- }
- else if (Odp == "dziel") {
- Wyluskanie_liczb();
- wynik = dziel(l1, l2);
- Prep_result();
- std::cout << "Wyslano pakiet" << std::endl;
- ShowPacket();
- socket.send(msg, 64);
- ClearPacket();
- }
- else if (Odp == "poteg") {
- Wyluskanie_liczb();
- wynik = poteg(l1, l2);
- Prep_result();
- std::cout << "Wyslano pakiet" << std::endl;
- ShowPacket();
- socket.send(msg, 64);
- ClearPacket();
- }
- else if (Odp == "pierw") {
- Wyluskanie_liczb();
- wynik = pierw(l1, l2);
- Prep_result();
- std::cout << "Wyslano pakiet" << std::endl;
- ShowPacket();
- socket.send(msg, 64);
- ClearPacket();
- }
- else if (Odp == "modul") {
- Wyluskanie_liczb();
- wynik = mod(l1, l2);
- Prep_result();
- std::cout << "Wyslano pakiet" << std::endl;
- ShowPacket();
- socket.send(msg, 64);
- ClearPacket();
- }
- else if (Odp == "Nwd__") {
- Wyluskanie_liczb();
- wynik = NWD(l1, l2);
- Prep_result();
- std::cout << "Wyslano pakiet" << std::endl;
- ShowPacket();
- socket.send(msg, 64);
- ClearPacket();
- }
- else if (Odp == "Silni") {
- l1 = std::stoi(Dane.substr(0, 4));
- wynik = silnia(l1);
- Prep_result();
- std::cout << "Wyslano pakiet" << std::endl;
- ShowPacket();
- socket.send(msg, 64);
- ClearPacket();
- }
- }
- void Server::Packing() {
- std::string temp;
- temp += "#1:O=" + Odp + "+";
- temp += "#2:S=" + Status + "+";
- temp += "#3:I=" + ID + "+";
- temp += "#4:C=" + Czas + "+";
- temp += "#5:D=" + Dane + "+";
- std::rotate(temp.begin(), temp.begin() + 1, temp.end());
- for (int i = 0; i <64; i++) {
- msg[i] = temp[i];
- }
- }
- void Server::Unpacking() {
- std::string temp;
- for (int i = 0; i<64; i++) {
- temp += msg[i];
- }
- Odp = temp.substr(12, 5);
- Status = temp.substr(28, 5);
- ID = temp.substr(51, 1);
- Czas = temp.substr(61, 14);
- Dane = temp.substr(84, 10);
- }
- void Server::ClearPacket() {
- Odp = " ";
- Status = " ";
- ID = "0";
- Czas = " ";
- Dane = " ";
- }
- void Server::ShowPacket() {
- for (int i = 0; i <64; i++) {
- std::cout << msg[i];
- }
- std::cout << std::endl;
- }
- int Server::dodaj(int x, int y)
- {
- return x + y;
- }
- int Server::odej(int x, int y)
- {
- return x - y;
- }
- int Server::mnoz(int x, int y)
- {
- return x * y;
- }
- int Server::dziel(int x, int y)
- {
- return x / y;
- }
- int Server::poteg(int x, int y)
- {
- return pow(x, y);
- }
- int Server::pierw(int x, int y)
- {
- return pow(x, 1 / y);
- }
- int Server::mod(int x, int y)
- {
- return x%y;
- }
- int Server::NWD(int x, int y)
- {
- do
- {
- if (x>y) x = x - y;
- else y = y - x;
- } while (x != y);
- return x;
- }
- std::string Server::datowanie() {
- SYSTEMTIME st;
- GetLocalTime(&st);
- std::string temp;
- int godzina = st.wHour;
- int minuta = st.wMinute;
- int sekunda = st.wSecond;
- int dzien = st.wDay;
- int miesiac = st.wMonth;
- int rok = st.wYear;
- temp = std::to_string(rok);
- if (miesiac > 9) {
- temp += std::to_string(miesiac);
- }
- else if (miesiac < 10) {
- temp += "0";
- temp += std::to_string(miesiac);
- }
- if (dzien > 9) {
- temp += std::to_string(dzien);
- }
- else if (dzien < 10) {
- temp += "0";
- temp += std::to_string(dzien);
- }
- if (godzina > 9) {
- temp += std::to_string(godzina);
- }
- else if (godzina < 10) {
- temp += "0";
- temp += std::to_string(godzina);
- }
- if (minuta > 9) {
- temp += std::to_string(minuta);
- }
- else if (minuta < 10) {
- temp += "0";
- temp += std::to_string(minuta);
- }
- if (sekunda > 9) {
- temp += std::to_string(sekunda);
- }
- else if (sekunda < 10) {
- temp += "0";
- temp += std::to_string(sekunda);
- }
- return temp;
- }
- int Server::silnia(int x) {
- if (x<2) return x;
- return x*silnia(x - 1);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement