Beispiel #1
0
        private void OpenModuleConnectionCallback(IAsyncResult asyncConnect)
        {
            ModuleSocket moduleSocket = (ModuleSocket)asyncConnect.AsyncState;
            Socket       clientSocket = moduleSocket.Socket;

            clientSocket.EndConnect(asyncConnect);

            if (clientSocket.Connected)
            {
                // message that we are connected

                openModuleSockets.Add(moduleSocket);

                FormsMessenger.Instance.Send(new ModuleConnectedMessage(
                                                 new VassalConnection
                {
                    Module = moduleSocket.Module
                }));

                // join the chat room

                var msg = Encoding.ASCII.GetBytes($"REG\t{moduleSocket.Password}.{moduleSocket.Timestamp}\t{moduleSocket.Module}/Main Room\tname=chatter|id={moduleSocket.Password}.{moduleSocket.Timestamp}|moduleVersion=10.12|looking=false|profile=|client=3.2.17|away=true|crc=1b732b83\n");
                clientSocket.BeginSend(msg, 0, msg.Length, SocketFlags.None, new AsyncCallback(ModuleSocketSendCallback), moduleSocket);

                clientSocket.BeginReceive(moduleSocket.sBuffer, 0, moduleSocket.sBuffer.Length, SocketFlags.None, new AsyncCallback(ModuleSocketReceiveCallback), moduleSocket);
            }
        }
Beispiel #2
0
        private void ModuleSocketSendCallback(IAsyncResult asyncResult)
        {
            ModuleSocket moduleSocket = (ModuleSocket)asyncResult.AsyncState;
            Socket       clientSocket = moduleSocket.Socket;
            int          bytesSent    = clientSocket.EndSend(asyncResult);

            Console.WriteLine($"Sent {bytesSent} bytes to server");
        }
Beispiel #3
0
 protected JsonSettings()
 {
     Modulation = new ModuleSocket(this);
     _childtype = GetType();
     if (!_childtype.HasDefaultConstructor())
     {
         throw new JsonSettingsException($"Can't initiate a settings object with class that doesn't have empty public constructor.");
     }
 }
Beispiel #4
0
        public void OpenModuleConnection(string module)
        {
            var host = NodeAddress.RequestHostAddress();

            Socket       clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            ModuleSocket moduleSocket = new ModuleSocket(16384, clientSocket, module);

            clientSocket.BeginConnect(host.GetIPEndPoint(), new AsyncCallback(OpenModuleConnectionCallback), moduleSocket);
        }
Beispiel #5
0
        public void CloseModuleConnection(string module)
        {
            ModuleSocket socket = openModuleSockets.First((arg) => arg.Module == module);

            if (socket != null)
            {
                socket.Socket.Send(Encoding.ASCII.GetBytes("!BYE\n"));
            }
        }
Beispiel #6
0
        public void SendChatMessage(string module, string room, string message)
        {
            ModuleSocket socket = openModuleSockets.First((arg) => arg.Module == module);

            if (socket != null)
            {
                Console.WriteLine($"Sending chat message to {module}: {room} = {message}");
                // TODO: chat identity
                socket.Socket.Send(Encoding.ASCII.GetBytes($"FWD\t{module}/{room}/~{socket.Password}.{socket.Timestamp}\tCHAT{message}\n"));
            }
        }
Beispiel #7
0
        private void RemoveModuleSocket(ModuleSocket moduleSocket)
        {
            FormsMessenger.Instance.Send(new ModuleDisconnectedMessage(moduleSocket.Module));

            try
            {
                moduleSocket.Socket?.Shutdown(SocketShutdown.Both);
            }
            catch (SocketException)
            {
            }
            moduleSocket.Socket?.Close();

            openModuleSockets.Remove(moduleSocket);
        }
Beispiel #8
0
        private void ModuleSocketReceiveCallback(IAsyncResult asyncResult)
        {
            ModuleSocket moduleSocket = (ModuleSocket)asyncResult.AsyncState;

            try
            {
                Socket clientSocket = moduleSocket.Socket;

                int bytesReceived = moduleSocket.Socket.EndReceive(asyncResult);

                Console.WriteLine($"Received {bytesReceived} bytes from server");

                if (bytesReceived == 0)
                {
                    // server has disconnected us
                    RemoveModuleSocket(moduleSocket);

                    return;
                }

                var received = Encoding.ASCII.GetString(moduleSocket.sBuffer, 0, bytesReceived);

                Console.WriteLine(".{0} bytes received: {1}{2}{2}", bytesReceived.ToString(), received, Environment.NewLine);

                FormsMessenger.Instance.Send(new DataReceivedMessage(moduleSocket.Module, received));

                //if (received.StartsWith("PRIV_CHAT", StringComparison.Ordinal))
                //{
                //	Console.WriteLine("Sending shutdown.");

                //	clientSocket.Send(Encoding.ASCII.GetBytes("!BYE\n"));

                //	RemoveModuleSocket(moduleSocket);
                //}
                //else
                //{
                asyncResult = clientSocket.BeginReceive(moduleSocket.sBuffer, 0, moduleSocket.sBuffer.Length, SocketFlags.None, new AsyncCallback(ModuleSocketReceiveCallback), moduleSocket);

                Console.Write("Receiving response...");
                //}
            }
            catch (Exception ex)
            {
                Console.WriteLine($"EXCEPTION IN RECEIVE {ex.GetType()} {ex.Message}");

                RemoveModuleSocket(moduleSocket);
            }
        }
Beispiel #9
0
        protected JsonSettings(string fileName)
        {
            #pragma warning restore 8618
            _childtype = GetType();
            if (_childtype.GetCustomAttribute <ProxyGeneratedAttribute>() == null)
            {
                Modulation = new ModuleSocket(this);
                // ReSharper disable once VirtualMemberCallInConstructor
                // ReSharper disable once ConditionIsAlwaysTrueOrFalse
                if (fileName != null)
                {
                    FileName = fileName;
                }

                if (!_childtype.HasDefaultConstructor())
                {
                    throw new JsonSettingsException($"Can't initiate a settings object with class that doesn't have empty public constructor.");
                }
            }
        }