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 ();
        }
Beispiel #2
0
 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);
        }
Beispiel #8
0
        // 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();
        }
Beispiel #9
0
        // 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");
        }
Beispiel #10
0
 public static void DisplayMessage(OutputMessage message)
 {
     Console.WriteLine(message.ToDescription());
 }
Beispiel #11
0
        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);
     }
 }
Beispiel #14
0
        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;
        }