Example #1
0
        public void Handle(object bindedArgs, PacketStream stream, INetworkThread thread)
        {
            CommunityManager communityManager = (CommunityManager)bindedArgs;
            Community        addedCommunity   = communityManager.AddNewCommunity();

            NetworkManager.SendPacketToAllClients("addCommunityResponse", addedCommunity);
        }
Example #2
0
        public void Handle(object bindedArgs, PacketStream stream, INetworkThread thread)
        {
            CommunityManager communityManager = (CommunityManager)bindedArgs;
            long             idToRemove       = stream.ReadLong();

            communityManager.RemoveCommunity(idToRemove);
            NetworkManager.SendPacketToAllClients("removeCommunityResponse", idToRemove);
        }
        public void Handle(object bindedArgs, PacketStream stream, INetworkThread thread)
        {
            ApplicationViewModel viewModel    = (ApplicationViewModel)bindedArgs;
            Community            newCommunity = new Community(viewModel);

            newCommunity.Deserialize(stream.ReadStringList());
            viewModel.Communities.Add(newCommunity);
        }
Example #4
0
        public void Handle(object bindedArgs, PacketStream stream, INetworkThread thread)
        {
            ApplicationViewModel viewModel = (ApplicationViewModel)bindedArgs;
            long          idToEdit         = stream.ReadLong();
            List <string> newData          = stream.ReadStringList();
            Community     editedCommunity  = viewModel.Communities.FirstOrDefault(c => c.Id == idToEdit);

            editedCommunity?.Deserialize(newData);
        }
        public void Handle(object bindedArgs, PacketStream stream, INetworkThread thread)
        {
            CommunityManager communityManager = (CommunityManager)bindedArgs;
            long             idToEdit         = stream.ReadLong();
            List <string>    newData          = stream.ReadStringList();

            communityManager.EditCommunity(idToEdit, newData);
            NetworkManager.SendPacketToAllClients("editCommunityResponse", (idToEdit, newData));
        }
Example #6
0
        public void Handle(object bindedArgs, PacketStream stream, INetworkThread thread)
        {
            ApplicationViewModel viewModel = (ApplicationViewModel)bindedArgs;
            long      idToRemove           = stream.ReadLong();
            Community toRemove             = viewModel.Communities.FirstOrDefault(c => c.Id == idToRemove);

            if (toRemove != null)
            {
                viewModel.Communities.Remove(toRemove);
            }
        }
        public void Handle(object bindedArgs, PacketStream stream, INetworkThread thread)
        {
            ApplicationViewModel viewModel = (ApplicationViewModel)bindedArgs;
            int count = stream.ReadInt();

            for (int i = 0; i < count; i++)
            {
                Community community = new Community(viewModel);
                community.Deserialize(stream.ReadStringList());
                viewModel.Communities.Add(community);
            }
        }
Example #8
0
        private static void ServerPipeThread(object data)
        {
            NamedPipeServerStream pipeServer = new NamedPipeServerStream("cityExplorerPipe", PipeDirection.InOut, maxClients, PipeTransmissionMode.Byte, PipeOptions.Asynchronous);
            int            threadId          = Thread.CurrentThread.ManagedThreadId;
            INetworkThread networkThread     = (INetworkThread)data;

            networkThread.SetStream(pipeServer);

            while (true)
            {
                pipeServer.WaitForConnection();
                Console.WriteLine("Client connected on thread[{0}].", threadId);
                networkThread.OnConnected();

                try
                {
                    Thread readThread = new Thread(() =>
                    {
                        while (true)
                        {
                            networkThread.HandleStreamRead();
                        }
                    });
                    readThread.Start();

                    while (true)
                    {
                        bool result = networkThread.HandleStreamWrite();
                        if (!result)
                        {
                            readThread.Abort();
                            break;
                        }
                    }
                }
                catch (IOException e)
                {
                    Trace.WriteLine("ERROR: {0}", e.Message);
                }

                pipeServer.Disconnect();
                networkThread.OnDisconnected();
                Trace.WriteLine("disconnected");
            }

            pipeServer.Close();
        }
Example #9
0
        public static void SendPacketToClient(string packetName, object args, INetworkThread clientFor)
        {
            if (clientFor == null)
            {
                throw new IOException("Client is null");
            }

            if (!isServer && clientThread != null)
            {
                throw new IOException("You cant send packets from client to other client");
            }

            if (!clientFor.IsConnected())
            {
                throw new IOException("Client what you try to send packet is disconnected");
            }

            clientFor.AddToSendQueue(packetName, args);
        }
Example #10
0
        private static void ServerSocketThread(object data)
        {
            (NetworkStream, INetworkThread)args = ((NetworkStream, INetworkThread))data;
            INetworkThread networkThread = args.Item2;
            NetworkStream  stream        = args.Item1;

            networkThread.SetStream(stream);
            networkThread.OnConnected();

            try
            {
                Thread readThread = new Thread(() =>
                {
                    while (true)
                    {
                        networkThread.HandleStreamRead();
                    }
                });
                readThread.Start();

                while (true)
                {
                    bool result = networkThread.HandleStreamWrite();
                    if (!result)
                    {
                        readThread.Abort();
                        break;
                    }
                }
            }
            catch (IOException e)
            {
                Trace.WriteLine("ERROR: {0}", e.Message);
            }

            networkThread.OnDisconnected();
            stream.Close();
        }
Example #11
0
 public static void RecievePacketFromThread(string packetName, PacketStream stream, INetworkThread threadRecieved)
 {
     handlers[packetName].Handle(handlersArgs.ContainsKey(packetName) ? handlersArgs[packetName] : null, stream, threadRecieved);
 }
Example #12
0
 public static void InitializeClient(INetworkThread clientThread)
 {
     isServer = false;
     NetworkManager.clientThread = clientThread;
 }
Example #13
0
        public static void Main(string[] args)
        {
            // Save data befor closing
            _handler += Handler;
            SetConsoleCtrlHandler(_handler, true);

            // Timer call save every period
            Timer timer = new Timer(obj => { communityManager.SerializeAllData(); }, null, SAVE_PERIOD, SAVE_PERIOD);

            Random           = new Random();
            ServerConfig     = new ServerConfig();
            communityManager = new CommunityManager(new FileDataSerializer(AppDomain.CurrentDomain.BaseDirectory + ServerConfig["saveFileName"]));

            string serverType = ServerConfig["serverType"];

            maxClients    = int.Parse(ServerConfig["maxClients"]);
            serverThreads = new INetworkThread[maxClients];
            for (int i = 0; i < serverThreads.Length; i++)
            {
                serverThreads[i] = new NetworkThread();
            }

            // Setup NetworkManager
            NetworkManager.InitializeServer(serverThreads);

            foreach (IPacket packet in packetsToRegister)
            {
                NetworkManager.RegisterPacket(packet);
            }

            foreach (IPacketHandler handler in handlersToRegister)
            {
                NetworkManager.RegisterHandler(handler);
            }

            NetworkManager.BindArgsToAllRegisteredHandlers(communityManager);

            if (serverType.Equals("socket"))
            {
                IPAddress   localAddr = IPAddress.Parse("127.0.0.1");
                TcpListener server    = new TcpListener(localAddr, int.Parse(ServerConfig["tcpPort"]));
                server.Start();

                while (true)
                {
                    TcpClient      client    = server.AcceptTcpClient();
                    INetworkThread firstFree = serverThreads.FirstOrDefault(t => !t.IsConnected());

                    if (firstFree != null)
                    {
                        new Thread(ServerSocketThread).Start((client.GetStream(), firstFree));
                    }
                }
            }
            else
            {
                int      i;
                Thread[] servers = new Thread[maxClients];
                Console.WriteLine("Named pipe server");
                Console.WriteLine("Waiting for client connect...\n");

                for (i = 0; i < maxClients; i++)
                {
                    servers[i] = new Thread(ServerPipeThread);
                    servers[i].Start(serverThreads[i]);
                }

                Thread.Sleep(250);
                while (i > 0)
                {
                    for (int j = 0; j < maxClients; j++)
                    {
                        if (servers[j] != null)
                        {
                            if (servers[j].Join(250))
                            {
                                Console.WriteLine("Server thread[{0}] finished.", servers[j].ManagedThreadId);
                                servers[j] = null;
                                i--;
                            }
                        }
                    }
                }

                Console.WriteLine("\nServer threads exhausted, exiting.");
            }
        }
 public void Handle(object bindedArgs, PacketStream stream, INetworkThread thread)
 {
     NetworkManager.SendPacketToClient("getAllDataResponse", bindedArgs, thread);
 }