public void accessCriticalSection() { if (!(wantsToEnterCriticalSection() && isReady())) { return; } if (requestToCriticalSectionSend) { return; } requestToCriticalSectionSend = true; writeToLog("I want enter Critical Section"); if (clients.Count == 0) { writeToLog("Entering critical section because no nodes to notify"); enteredCriticalSection(); return; } foreach (var client in clients) { client.Value.ackCriticalSection = false; } CriticalRequest newRequest = new CriticalRequest(++lamportCounter, stringId); newRequest.ackSend = true; addRequestToQueue(newRequest); MessageLIS message = new MessageLIS('L', ""); message.setLamportCounter(lamportCounter); sendMessageToAll(message); }
public void sendMessageToAll(MessageLIS message) { foreach (var client in clients) { client.Value.sendMessage(message); } }
public void sendMessage(char messageType, String data) { MessageLIS message = new MessageLIS(); message.messageData = data; message.messageType = messageType; Send(message.buildMessage()); }
private void parseRecData(byte symbol) { if (state == 0 && symbol == '\\') { message = new MessageLIS(); message.idSource = this.id; message.stringId = this.stringId; receivedSize = 0; state++; } else if (state == 1) { message.messageType = (char)symbol; state++; } else if (state == 2) { expectedSize = symbol; state++; } else if (state == 3) { expectedSize = expectedSize * 256 + symbol; state++; message.messageDataOrig = new byte[expectedSize]; if (expectedSize == 0) { MainWindow.self.receivedMessage(message); state = 0; } } else { //message.messageData += (char)symbol; message.messageDataOrig[receivedSize] = symbol; receivedSize++; if (receivedSize == expectedSize) { message.setMessageDataFromOrig(); MainWindow.self.receivedMessage(message); state = 0; } } }
public void accessCriticalSection() { if (!(wantsToEnterCriticalSection() && isReady())) return; if (requestToCriticalSectionSend) return; requestToCriticalSectionSend = true; writeToLog("I want enter Critical Section"); if(clients.Count == 0) { writeToLog("Entering critical section because no nodes to notify"); enteredCriticalSection(); return; } foreach (var client in clients) { client.Value.ackCriticalSection = false; } CriticalRequest newRequest = new CriticalRequest(++lamportCounter, stringId); newRequest.ackSend = true; addRequestToQueue(newRequest); MessageLIS message = new MessageLIS('L', ""); message.setLamportCounter(lamportCounter); sendMessageToAll(message); }
public void sendMessageToAll(MessageLIS message) { foreach (var client in clients){ client.Value.sendMessage(message); } }
/* Lamport A = Ack CS F = Release CS L = Lamport Request CS Nodes manipulation C = Conf recieved D = Remove node K = Connect to known node J = Join request N = new client to connect Files manipulation T = file request */ public void receivedMessage(MessageLIS message) { System.Windows.Application.Current.Dispatcher.Invoke(new Action(() => { //writeToLog("Recieved message:" + message.messageType); ClientConnection client; if (clients.ContainsKey(message.stringId)) client = clients[message.stringId]; else if (clientsToConnect.ContainsKey(message.stringId)) client = clientsToConnect[message.stringId]; else { writeToLog("Recieved message from unknown node !!!" + message.stringId); return; } if (message.messageType == 'J') // RequestJoin { writeToLog("New client wants to join " + message.messageData); client.requestedToJoin = true; client.stringId = message.messageData; } else if (message.messageType == 'K') { writeToLog("New clients wants to only connect " + message.messageData); client.stringId = message.messageData; clientsToConnect.Remove(message.stringId); addClient(client); waitingForConnectionsNumber--; } else if (message.messageType == 'C') // Configuration { writeToLog("Recieved configuration - "+ message.messageData); var configs = message.messageData.Split('|'); lamportCounter = int.Parse(configs[0]); waitingForConnectionsNumber += configs[1].Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).Length; } else if (message.messageType == 'N') // New client to connect { var connectionInfo = message.messageData.Split(':'); writeToLog("Connecting to NODE " + message.messageData); addNewClientConnection(connectionInfo[0], int.Parse(connectionInfo[1]), true); } else if (message.messageType == 'D') { writeToLog("Removing NODE (D) " + message.messageData); removeClient(message.messageData); } else if (message.messageType == 'L') // Lamport Request CS { writeToLog(string.Format("CS Requested {0} ({1})", message.stringId, message.getLamportCounter())); CriticalRequest newRequest = new CriticalRequest(message.getLamportCounter(), message.stringId); addRequestToQueue(newRequest); lamportCounter = Math.Max(lamportCounter, message.getLamportCounter()); } else if (message.messageType == 'A') // Acknowledged CS { writeToLog(string.Format("CS Access granted to me from {0}", message.stringId)); client.ackCriticalSection = true; //criticalRequests.Find() } else if (message.messageType == 'F') // Release CS { writeToLog(string.Format("CS Released {0} ", message.stringId)); criticalRequests.RemoveAll(c => c.stringId == message.stringId); /*int requestIndex = criticalRequests.FindIndex(c => c.stringId == message.stringId); if(requestIndex >= 0) { criticalRequests.RemoveAt(requestIndex); }*/ } else if (message.messageType == 'T') // Transfer File (Text Only) { writeToLog(string.Format("File recieved " + message.messageData)); string[] conf = message.messageData.Split(new char[] { '|' }, 3); var path = Path.Combine(folderPath, conf[1]); try { if (conf[0] == "D") { //Delete file File.Move(path, path + myExtension); File.Delete(path + myExtension); } else { //watcher.EnableRaisingEvents = false; if (File.Exists(path)) File.Delete(path + myExtension); File.WriteAllText(path+myExtension, conf[2]); if(File.Exists(path)) { File.Move(path, path + ".todelete" + myExtension); File.Delete(path + ".todelete" + myExtension); } File.Move(path + myExtension, path); //watcher.EnableRaisingEvents = true; } } catch (Exception ex) { writeToLog(ex.ToString()); } } checkActions(); })); }
private void parseRecData(byte symbol) { if (state == 0 && symbol == '\\') { message = new MessageLIS(); message.idSource = this.id; message.stringId = this.stringId; receivedSize = 0; state++; } else if (state == 1) { message.messageType = (char)symbol; state++; } else if (state == 2) { expectedSize = symbol; state++; } else if (state == 3) { expectedSize = expectedSize * 256 + symbol; state++; message.messageDataOrig = new byte[expectedSize]; if(expectedSize == 0) { MainWindow.self.receivedMessage(message); state = 0; } } else { //message.messageData += (char)symbol; message.messageDataOrig[receivedSize] = symbol; receivedSize++; if (receivedSize == expectedSize) { message.setMessageDataFromOrig(); MainWindow.self.receivedMessage(message); state = 0; } } }
public void sendMessage(char messageType, String data) { MessageLIS message = new MessageLIS(); message.messageData = data; message.messageType = messageType; Send(message.buildMessage()); }
public void sendMessage(MessageLIS message) { Send(message.buildMessage()); }
public void sendMessage(MessageLIS message) { Send(message.buildMessage()); }
/* * Lamport * A = Ack CS * F = Release CS * L = Lamport Request CS * * * Nodes manipulation * C = Conf recieved * D = Remove node * K = Connect to known node * J = Join request * N = new client to connect * * Files manipulation * T = file request */ public void receivedMessage(MessageLIS message) { System.Windows.Application.Current.Dispatcher.Invoke(new Action(() => { //writeToLog("Recieved message:" + message.messageType); ClientConnection client; if (clients.ContainsKey(message.stringId)) { client = clients[message.stringId]; } else if (clientsToConnect.ContainsKey(message.stringId)) { client = clientsToConnect[message.stringId]; } else { writeToLog("Recieved message from unknown node !!!" + message.stringId); return; } if (message.messageType == 'J') // RequestJoin { writeToLog("New client wants to join " + message.messageData); client.requestedToJoin = true; client.stringId = message.messageData; } else if (message.messageType == 'K') { writeToLog("New clients wants to only connect " + message.messageData); client.stringId = message.messageData; clientsToConnect.Remove(message.stringId); addClient(client); waitingForConnectionsNumber--; } else if (message.messageType == 'C') // Configuration { writeToLog("Recieved configuration - " + message.messageData); var configs = message.messageData.Split('|'); lamportCounter = int.Parse(configs[0]); waitingForConnectionsNumber += configs[1].Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).Length; } else if (message.messageType == 'N') // New client to connect { var connectionInfo = message.messageData.Split(':'); writeToLog("Connecting to NODE " + message.messageData); addNewClientConnection(connectionInfo[0], int.Parse(connectionInfo[1]), true); } else if (message.messageType == 'D') { writeToLog("Removing NODE (D) " + message.messageData); removeClient(message.messageData); } else if (message.messageType == 'L') // Lamport Request CS { writeToLog(string.Format("CS Requested {0} ({1})", message.stringId, message.getLamportCounter())); CriticalRequest newRequest = new CriticalRequest(message.getLamportCounter(), message.stringId); addRequestToQueue(newRequest); lamportCounter = Math.Max(lamportCounter, message.getLamportCounter()); } else if (message.messageType == 'A') // Acknowledged CS { writeToLog(string.Format("CS Access granted to me from {0}", message.stringId)); client.ackCriticalSection = true; //criticalRequests.Find() } else if (message.messageType == 'F') // Release CS { writeToLog(string.Format("CS Released {0} ", message.stringId)); criticalRequests.RemoveAll(c => c.stringId == message.stringId); /*int requestIndex = criticalRequests.FindIndex(c => c.stringId == message.stringId); * if(requestIndex >= 0) * { * criticalRequests.RemoveAt(requestIndex); * }*/ } else if (message.messageType == 'T') // Transfer File (Text Only) { writeToLog(string.Format("File recieved " + message.messageData)); string[] conf = message.messageData.Split(new char[] { '|' }, 3); var path = Path.Combine(folderPath, conf[1]); try { if (conf[0] == "D") { //Delete file File.Move(path, path + myExtension); File.Delete(path + myExtension); } else { //watcher.EnableRaisingEvents = false; if (File.Exists(path)) { File.Delete(path + myExtension); } File.WriteAllText(path + myExtension, conf[2]); if (File.Exists(path)) { File.Move(path, path + ".todelete" + myExtension); File.Delete(path + ".todelete" + myExtension); } File.Move(path + myExtension, path); //watcher.EnableRaisingEvents = true; } } catch (Exception ex) { writeToLog(ex.ToString()); } } checkActions(); })); }