public static void Main(string[] args) { Console.WriteLine ("MyATM Server - Signed off by Andrew As Active Object - Signed off as Application."); int test = 0; bool debug = false; //To allow Prompts on the Server set this to true try { Console.WriteLine("\n\nInput: MyATM Server\n 0 - DEBUG = TRUE \t|\n 1 - DEBUG = FALSE \t|\n"); test = int.Parse(Console.ReadLine()); if(test == 0) { debug = true; Console.WriteLine("Debug is set to true - You will see the Server program checking items"); } else if(test == 1) { debug = false; Console.WriteLine("Debug is set to False - You will NOT see the Server program checking items"); } else { Console.WriteLine("Exiting Program"); Thread.Sleep(5000); System.Environment.Exit(1); } Console.WriteLine("\n\n"); } catch (Exception) { Console.WriteLine("Unknown Input - Exiting in 5s"); Thread.Sleep(5000); System.Environment.Exit(1); } //Input to allow Connection Over Putty ArrayList m_workerSocketList = ArrayList.Synchronized(new ArrayList()); List<Account> Accounts = new List<Account>(); char[] delimiterChars = { ',', '.' }; int m_clientCount = 0; Socket m_mainSocket = null; AsyncCallback pfnWorkerCallBack = null; //End Connection Variables //Channels Used Channel<String> CapInToProcingMess = new Channel<String> (); Channel<String> OutputToClient = new Channel<String>(); //End Channel Used //Reader Writer for account Editing ReaderWriter AccountManager = new ReaderWriter(); //Active Objects Used ProcessMessage Logic = new ProcessMessage(CapInToProcingMess, OutputToClient,Accounts, delimiterChars, debug,AccountManager); ClientListener WaitingForClient = new ClientListener(CapInToProcingMess, m_workerSocketList, m_clientCount, m_mainSocket, pfnWorkerCallBack); OutputMessage Feedback = new OutputMessage(OutputToClient, m_workerSocketList, delimiterChars); //Start Active Objects WaitingForClient.Start (); Logic.Start (); Feedback.Start (); }
public void Add(string path, MessageBase message) { var outputMessage = new OutputMessage(path, message); lock (this) { _messagesDictionary.Add(outputMessage.Message.MessageNo, outputMessage); _messages.AddLast(outputMessage); } }
/// <summary> /// Send an Update to all Clients of the Status Connection of a Player /// </summary> /// <remarks> /// Order: /// String UserName /// bool ConnectedStatus /// float ServerTime /// </remarks> /// <param name="UserName"></param> /// <param name="connectedStatus"></param> /// <param name="ServerTime"></param> public void PlayerStatusUpdate(String UserName, bool connectedStatus, float ServerTime) { NetworkWriter data = new NetworkWriter(); data.Write((ushort)Subjects.PlayerStatusUpdate); data.Write(UserName); data.Write(connectedStatus); data.Write(ServerTime); OutputMessage output = new OutputMessage(data); GameServer.LLApiServer.addOutPutMessageToQueue(output); }
public long SendRawMessage(OutputMessage message) { if (message == null) throw new ArgumentNullException(nameof(message)); message.Id = Interlocked.Increment(ref this.outgoingMessageId); this.outputMessageQueue.Add(message); return message.Id; }
/// <summary> /// Return Information of the Server /// </summary> /// <remarks> /// Order: /// bool success /// float ServerTime /// string detailMessage /// ushort ConnetedUserCount -> UserNames Length /// string[] UserNames /// </remarks> /// <param name="connectionID"></param> /// <param name="success"></param> /// <param name="detailMessage"></param> private void ServerInfoResponse(int connectionID, bool success, string detailMessage) { NetworkWriter data = new NetworkWriter(); data.Write((ushort)Subjects.ServerInfoResponse); data.Write(success); if (success) { data.Write(GameServer.getServerTime()); } else { data.Write((float)0); } data.Write(detailMessage); if (!success) { data.Write((ushort)0); } else { List<string> UserNames = GameServer.UserManager.getConnectedUserNames(); data.Write((ushort)UserNames.Count); foreach(string userName in UserNames) { data.Write(userName); } } OutputMessage output = new OutputMessage(data, connectionID); GameServer.LLApiServer.addOutPutMessageToQueue(output); }
/// <summary> /// Return the DisconnectResponse to the client /// </summary> /// <remarks> /// Order: /// String success /// String detailMessage /// float serverTime /// </remarks> /// <param name="connectionID"></param> /// <param name="success"></param> /// <param name="detailMessage"></param> private void DisconnectResponse(int connectionID, bool success, string detailMessage) { NetworkWriter data = new NetworkWriter(); data.Write((ushort)Subjects.LogOutResponse); data.Write(success); data.Write(detailMessage); data.Write(GameServer.getServerTime()); OutputMessage output = new OutputMessage(data, connectionID); GameServer.LLApiServer.addOutPutMessageToQueue(output); }
public void SerializeValidMessage() { var message = new OutputMessage { Id = 1, Channel = "CHANID", Text = "MSG" }; var parser = new ResponseParser(); var result = parser.SerializeMessage(message); var expected = @"{""id"":1,""type"":""message"",""channel"":""CHANID"",""text"":""MSG""}"; Assert.Equal(expected, result); }
// This function is run in a seperate thread, it allows a reconnection to a validator to happen in the // background. private void ReconnectValidator() { OutputMessage m = new OutputMessage(AppendToTextBox); // setup delegate while (!validatorRunning) { if (CHelpers.Shutdown) return; // Check for cross-thread access if (textBox1.InvokeRequired) textBox1.Invoke(m, new object[] { "Attempting to reconnect to note validator...\r\n" }); else textBox1.AppendText("Attempting to reconnect to note validator...\r\n"); // Attempt reconnect (can't pass text box across for output as the class does not // deal with threading issues). ConnectToNoteValidator(); CHelpers.Pause(1000); } if (textBox1.InvokeRequired) textBox1.Invoke(m, new object[] { "Reconnected to note validator\r\n" }); else textBox1.AppendText("Reconnected to note validator\r\n"); Validator.EnableValidator(); }
// See above commenting private void ReconnectHopper() { OutputMessage m = new OutputMessage(AppendToTextBox); while (!hopperRunning) { if (CHelpers.Shutdown) return; if (textBox1.InvokeRequired) textBox1.Invoke(m, new object[] { "Attempting to reconnect to SMART Hopper...\r\n" }); else textBox1.AppendText("Attempting to reconnect to SMART Hopper...\r\n"); ConnectToHopper(); Hopper.EnableValidator(); } if (textBox1.InvokeRequired) textBox1.Invoke(m, new object[] { "Reconnected to SMART Hopper\r\n" }); else textBox1.AppendText("Reconnected to SMART Hopper\r\n"); }
public static void DisplayMessage(OutputMessage message) { Console.WriteLine(message.ToDescription()); }
private void CheckAndSendMessage(OutputMessage message, WebSocket webSocket) { var serializedMessage = this.ResponseParser.SerializeMessage(message); var maxByteCount = Encoding.UTF8.GetByteCount(serializedMessage) + 2; if (maxByteCount > 16000) { this.Logger.Error($"Message exceeded 16kb size limit and was ignored: {serializedMessage.Substring(0, 16000)}"); return; } webSocket.Send(serializedMessage); this.Logger.Debug($"Output: {serializedMessage}"); }
private ushort ManageOutputMessage(OutputMessage message) { NetworkError error; ushort messagesSended = 0; switch (message.Type) { case OutputMessage.MessageType.Reply: SendMessage(message.ConnectionID, message.Data, message.ChannelID, out error); messagesSended = 1; break; case OutputMessage.MessageType.All: List<int> connectionIDS = GameServer.UserManager.getConnectedUsersConnectionsID(); foreach (int connectionID in connectionIDS) { SendMessage(connectionID, message.Data, message.ChannelID, out error); } messagesSended = (ushort)connectionIDS.Count; break; } return messagesSended; }
public void addOutPutMessageToQueue(OutputMessage message) { lock (lockOutputObject) { OutputMessagesQueue.Enqueue(message); } }
private void ReconnectNV11() { OutputMessage m = new OutputMessage(AppendToTextBox); NV11Connecting = true; while (!NV11Running) { if (textBox1.InvokeRequired) textBox1.Invoke(m, new object[] { "Attempting to reconnect to NV11...\r\n" }); else textBox1.AppendText("Attempting to reconnect to NV11...\r\n"); ConnectToNV11(null); // Have to pass null as can't update text box from a different thread without invoking CHelpers.Pause(1000); if (CHelpers.Shutdown) return; } if (textBox1.InvokeRequired) textBox1.Invoke(m, new object[] { "Reconnected to NV11\r\n" }); else textBox1.AppendText("Reconnected to NV11\r\n"); NV11.EnableValidator(); NV11Connecting = false; }