public int Assign(int portIn = -1) { //Setup the socket and message buffer udpSock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); bool fileFound = false; List <string> fileNameVec = FileSystem.ListFilesInDirectory(Globals.IpcPath); foreach (string fileNameCurrent in fileNameVec) { if (fileNameCurrent == "udp_port") { fileFound = true; break; } } int portCurrent; if (fileFound) { string udpPortStr = FileSystem.ReadTextFile(Globals.IpcPath + "\\udp_port")[0]; int.TryParse(udpPortStr, out portCurrent); endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), portCurrent); } else { if (portIn == -1) { endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 0); } else { endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), portIn); } } udpSock.Bind(endPoint); int.TryParse(udpSock.LocalEndPoint.ToString().Split(':')[1], out portCurrent); FileSystem.WriteStringToFile(Globals.IpcPath + "\\" + "udp_port", portCurrent.ToString()); buffer = new byte[1024]; //Start listening for a new message. udpSock.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref endPoint, DoReceiveFrom, udpSock); return(portCurrent); }
public void Update() { if (!IPC.Updated) { return; } IPC.Updated = false; List <string> fileNameVec = FileSystem.ListFilesInDirectory(Globals.IpcPath); foreach (string fileNameCurrent in fileNameVec) { string fileNameEveryone = ""; if (fileNameCurrent.Length >= 8) { fileNameEveryone = fileNameCurrent.Substring(0, 8); } if (fileNameCurrent.Length > selfName.Length || fileNameEveryone == "everyone") { if (IPC.FileNameProcessedMap.ContainsKey(fileNameCurrent) && IPC.FileNameProcessedMap[fileNameCurrent] == true) { continue; } else { IPC.FileNameProcessedMap[fileNameCurrent] = true; } string fileName = ""; string fileNameID = ""; if (fileNameEveryone != "everyone") { fileName = fileNameCurrent.Substring(0, selfName.Length); fileNameID = fileNameCurrent.Substring(selfName.Length, fileNameCurrent.Length - selfName.Length); } if (fileName == selfName || fileNameEveryone == "everyone") { Thread.Sleep(20); List <string> lines = FileSystem.ReadTextFile(Globals.IpcPath + "\\" + fileNameCurrent); // FileSystem.DeleteFile(Globals.IpcPath + "\\" + fileNameCurrent); string[] messageVec = lines[0].Split('!'); string messageHead = messageVec[0]; string messageBody = messageVec[1]; Console.WriteLine("message received " + " " + messageHead + " " + messageBody + " " + fileNameCurrent); if (!responseMap.ContainsKey(messageHead)) { if (commandMap.ContainsKey(messageHead)) { commandMap[messageHead](messageBody); } } else { Func <string, int> func = responseMap[messageHead]; responseMap.Remove(messageHead); func(messageBody); } } } } IPC.Updated = true; }