public void Handle(object bindedArgs, PacketStream stream, INetworkThread thread) { CommunityManager communityManager = (CommunityManager)bindedArgs; Community addedCommunity = communityManager.AddNewCommunity(); NetworkManager.SendPacketToAllClients("addCommunityResponse", addedCommunity); }
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); }
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)); }
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); } }
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(); }
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); }
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(); }
public static void RecievePacketFromThread(string packetName, PacketStream stream, INetworkThread threadRecieved) { handlers[packetName].Handle(handlersArgs.ContainsKey(packetName) ? handlersArgs[packetName] : null, stream, threadRecieved); }
public static void InitializeClient(INetworkThread clientThread) { isServer = false; NetworkManager.clientThread = clientThread; }
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); }