/// <summary>
        /// Login to the server
        /// </summary>
        /// <returns>Info of valid log in</returns>
        public LoginInfo Login()
        {
            string currentToken = "";

            if (LoginInfo != null)
            {
                currentToken = LoginInfo.Token;
            }

            if (IsCServer)
            {
                // Now call the login method on the server, and get the loginInfo class (provide old token for next re-login)
                _loginInfo_CServer = CServer.Login(_thisInstance, currentToken);
            }
            else
            {
                // Now call the login method on the server, and get the loginInfo class (provide old token for next re-login)
                _loginInfo_EServer = _eServer.Login(_thisInstance, currentToken);
            }

            // React 30 seconds before token expires. (Never faster than 30 seconds after last renewal, but that ought not occur).
            // E-code's default timeout is 4 minutes, C-code's is 1 hour.
            double ms = LoginInfo.TimeToLive.TotalMilliseconds;

            ms = ms > 60000 ? ms - 30000 : ms;

            _tokenExpireTimer = new Timer(TokenExpireTimer_Callback, null, (int)ms, Timeout.Infinite);

            return(LoginInfo);
        }
Пример #2
0
 int SelectNewServer(  )
 {
     //Check the conditions to become the new server.
     //If a server has been chosen, return that ID, else, return this client's ID.
     m_iServerID = GetLowestID(); //Note that the ServerIP is also set in the GetLowestID function.
     if (m_iServerID == m_iID)
     {
         if (m_pServer != null) //need to check for null, so it doesn't add more than one.
         {
             Debug.LogError("ERROR, tried to start a server when there's already in this client's machine.");
             return(-1);//exit this function.
         }
         //Start a server in this machine.
         Debug.LogWarning("This machine will now host the server. Initializing.");
         gameObject.AddComponent <CServer>();                                      //Add a CServer component to this gameObject, so a new Server starts.
         m_szServerIP = m_szClientIP;                                              //Make the IP of the server the same as this client's IP.
         gameObject.GetComponent <CServer>().StartServer(this, m_dicKnownClients); //Send this client's set of known clients to the new server.
         m_pServer = gameObject.GetComponent <CServer>();
         //This parameter is used to be able to use the same function for two very similar things., for first time and for instant re-election.
         if (m_dicKnownClients.ContainsKey(m_szClientIP) == false)
         {
             SendUDPMessage('Y', "Begin_Con", m_dtBeginDateTime.ToString("MM/dd/yyyy hh:mm:ss.fff tt"), IPAddress.Broadcast.ToString(), 10000);
         }
         //bDisconnected = false; //JUST FOR TESTING.
     }
     else
     {
         //Wait some time and then try to connect to the new leader.
         Debug.LogWarning("Another machine will host the server, it's ID is: " + m_szServerIP);
         //NOTE::: MAKE THE M_SZsERVERIP equal to the IP of the new server machine.
         bDisconnected            = false; //??
         m_fTimeSinceLastResponse = 0.0f;  // so it doesn't try many times while waiting for the other user to become the server.
     }
     return(m_iServerID);                  //Default value.
 }
Пример #3
0
    //CServer m_ServerReference:

    // Use this for initialization
    void Start()
    {
        //Found this trick to get the initial IP Address, not sure if it works without connection.
        //http://stackoverflow.com/questions/6803073/get-local-ip-address
        using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 0))
        {
            socket.Connect("8.8.8.8", 65530);
            IPEndPoint endPoint = socket.LocalEndPoint as IPEndPoint;
            m_szClientIP = endPoint.Address.ToString();
            Debug.Log(m_szClientIP + " is this client's IP address");
        }

        Debug.LogWarning(CGlobals.GetNistTime().ToString("MM/dd/yyyy hh:mm:ss.fff tt"));
        //CGlobals.GetNISTTime();

        //Client uses as receive udp client
        m_udpClient = new UdpClient(10000);
        m_udpClient.EnableBroadcast   = true;
        m_udpClient.MulticastLoopback = true; //Necessary so it receives its own messages in the multicast.
        //Debug.Log("The updClients ExclusiveAddressUse value is: " + m_udpClient.ExclusiveAddressUse.ToString());// it must false;
        m_pServer = null;
        try
        {
            m_fTimeSinceLastResponse = 0.0f;
            Debug.Log("Beginning to receive: ");
            m_udpClient.BeginReceive(new AsyncCallback(recv), null);
            m_dtBeginDateTime = GetGlobalTime();
            SendUDPMessage('Y', "Begin_Con", m_dtBeginDateTime.ToString("MM/dd/yyyy hh:mm:ss.fff tt"), IPAddress.Broadcast.ToString(), 10000);
        }
        catch (Exception e)
        {
            Debug.Log("caught exception : " + e.ToString());
        }
    }
        /// <summary>
        /// Gets the version of the server
        /// </summary>
        /// <returns>The version as an int</returns>
        public int GetVersion()
        {
            if (IsCServer)
            {
                return(CServer.GetVersion());
            }

            return(_eServer.GetVersion());
        }
 /// <summary>
 /// Gets the configuration from the server.
 /// Automatically determines if the SOAP interface or the XML file should be used
 /// </summary>
 /// <param name="token">Valid token (only used with C servers)</param>
 public void GetConfiguration(String token = "")
 {
     if (IsCServer)
     {
         ConfigurationInfo_CServer = CServer.GetConfiguration(token);
     }
     else
     {
         Configuration_EServer = GetConfigurationFromXmlFile(false);
     }
 }
Пример #6
0
 public Oview()
 {
     if (m_Server == null)
     {
         m_Server = new CServer();
         Environment.SetEnvironmentVariable("PATH", Environment.GetEnvironmentVariable("PATH") + ";" + @"C:\Program Files\PilotGaea\TileMap");
         if (m_Server.Init(8080, @"C:\ProgramData\PilotGaea\PGMaps\地圖伺服器#01\Map.TMPX", @"C:\Program Files\PilotGaea\TileMap\plugins"))
         {
             m_Server.Start();
         }
     }
 }
        /// <summary>
        /// Logout from the server
        /// </summary>
        public void Logout()
        {
            if (IsCServer)
            {
                CServer.Logout(_thisInstance, LoginInfo.Token);
            }
            else
            {
                _eServer.Logout(_thisInstance, LoginInfo.Token);
            }


            _loginInfo_CServer = null;
            _loginInfo_EServer = null;

            CancelCallbackTimer();
        }
Пример #8
0
    // Update is called once per frame
    void Update()
    {
        //Check if a new message has arrived.
        //If it has, process it.
        m_fTimeSinceLastResponse += Time.deltaTime;

        if (m_fTimeSinceLastResponse >= m_fMaxTimeSinceLastResponse && bDisconnected == false && m_MessagesList.Count == 0) //Check if it has no more messages to be processed.
        {
            bDisconnected = true;
            //Now, we intend to disconnect, and try to select a new leader.
            Debug.LogWarning("The time since a response last came has exceeded the limit, disconnecting.");

            Debug.LogWarning("Trying to select a new leader/host.");
            //here, this client must check if it meets the requirements to be the new leader, such as if it has a table of other candidates or something else.

            if (SelectNewServer() == m_iID)
            {
                if (m_pServer != null) //need to check for null, so it doesnt add more than one.
                {
                    Debug.LogError("ERROR, tried to start a server when there's already in this client's machine.");
                    return;//exit this function.
                }
                //Start a server in this machine.
                Debug.LogWarning("This machine will now host the server. Initializing.");
                gameObject.AddComponent <CServer>();                                      //Add a CServer component to this gameObject, so a new Server starts.
                m_szServerIP = m_szClientIP;                                              //Make the IP of the server the same as this client's IP.
                gameObject.GetComponent <CServer>().StartServer(this, m_dicKnownClients); //Send this client's set of known clients to the new server.
                m_pServer = gameObject.GetComponent <CServer>();
                SendUDPMessage('Y', "Begin_Con", m_dtBeginDateTime.ToString(), IPAddress.Broadcast.ToString(), 10000);
                //bDisconnected = false; //JUST FOR TESTING.
            }
            else
            {
                //Wait some time and then try to connect to the new leader.
                Debug.LogWarning("Another machine will host the server, it's ID is: " + m_szServerIP);
                //NOTE::: MAKE THE M_SZsERVERIP equal to the IP of the new server machine.
                bDisconnected            = false; //??
                m_fTimeSinceLastResponse = 0.0f;  // so it doesn't try many times while waiting for the other user to become the server.
            }
        }
        else
        {
            ProcessMessage();
        }
    }
Пример #9
0
        public static void HandleCityTokenRequest(NetworkClient Client, ProcessedPacket P)
        {
            string AccountName = P.ReadPascalString();
            string CityGUID    = P.ReadPascalString();
            string CharGUID    = P.ReadPascalString();
            string Token       = new Guid().ToString();

            foreach (CityServerClient CServer in NetworkFacade.CServerListener.CityServers)
            {
                if (CityGUID == CServer.ServerInfo.UUID)
                {
                    using (var db = DataAccess.Get())
                    {
                        Account Acc = db.Accounts.GetByUsername(AccountName);

                        PacketStream CServerPacket = new PacketStream(0x01, 0);
                        CServerPacket.WriteHeader();

                        ushort PacketLength = (ushort)(PacketHeaders.UNENCRYPTED + 4 + (Client.RemoteIP.Length + 1)
                                                       + (CharGUID.ToString().Length + 1) + (Token.ToString().Length + 1));
                        CServerPacket.WriteUInt16(PacketLength);

                        CServerPacket.WriteInt32(Acc.AccountID);
                        CServerPacket.WritePascalString(Client.RemoteIP);
                        CServerPacket.WritePascalString(CharGUID.ToString());
                        CServerPacket.WritePascalString(Token.ToString());
                        CServer.Send(CServerPacket.ToArray());

                        break;
                    }
                }
            }

            PacketStream Packet = new PacketStream((byte)PacketType.REQUEST_CITY_TOKEN, 0);

            Packet.WritePascalString(Token);
            Client.SendEncrypted((byte)PacketType.REQUEST_CITY_TOKEN, Packet.ToArray());
        }
Пример #10
0
 public ATableRootManager(CServer _server)
 {
     server = _server;
     player = new List <Player>();
     deck   = new Deck();
     team   = new List <Team>();
     team.Add(new Team {
         Name = "Red"
     });
     team.Add(new Team {
         Name = "Blue"
     });
     handStack = new Deck();
     RoundDeck = new Round(team);
     bet       = new Bet
     {
         points = 0,
         suit   = "diamond"
     };
     tourBet         = 0;
     tourPlayingCard = 0;
     betHasraised    = false;
     MaxBet          = 180;
 }
 public ATableEventManager(CServer _server) : base(_server)
 {
 }
Пример #12
0
 internal InterfaceServer ServerToInterfaceServer(CServer server)
 {
     InterfaceServer response=new InterfaceServer();
     response.Name=server.Name;
     response.IP=new IPAddress(server.IP).ToString();
     response.Files=server.Files;
     response.Port=server.Port;
     response.LastConnection=new DateTime(server.LastConnection);
     response.Users=server.Users;
     response.FailedConnections=(byte)server.Fails;
     response.Priority=server.Priority;
     return response;
 }
Пример #13
0
 internal virtual void SubmitOnNewServer(CServer server)
 {
     if (OnNewServer!=null) OnNewServer(ServerToInterfaceServer(server));
 }
Пример #14
0
        public static void HandleCharacterCreate(NetworkClient Client, ProcessedPacket P)
        {
            Logger.LogInfo("Received CharacterCreate!");

            string AccountName = SanitizeAccount(P.ReadPascalString());

            using (var db = DataAccess.Get())
            {
                Account Acc = db.Accounts.GetByUsername(AccountName);

                //TODO: Send GUID to client...
                Sim Char = new Sim(Guid.NewGuid());
                Char.Timestamp    = P.ReadPascalString();
                Char.Name         = P.ReadPascalString();
                Char.Sex          = P.ReadPascalString();
                Char.Description  = P.ReadPascalString();
                Char.HeadOutfitID = P.ReadUInt64();
                Char.BodyOutfitID = P.ReadUInt64();
                Char.Appearance   = (AppearanceType)P.ReadByte();
                Char.ResidingCity = new CityInfo(P.ReadPascalString(), "", P.ReadUInt64(), P.ReadPascalString(),
                                                 P.ReadUInt64(), P.ReadPascalString(), P.ReadInt32());
                Char.CreatedThisSession = true;

                var characterModel = new Character();
                characterModel.Name           = Char.Name;
                characterModel.Sex            = Char.Sex;
                characterModel.Description    = Char.Description;
                characterModel.LastCached     = Char.Timestamp;
                characterModel.GUID           = Char.GUID;
                characterModel.HeadOutfitID   = (long)Char.HeadOutfitID;
                characterModel.BodyOutfitID   = (long)Char.BodyOutfitID;
                characterModel.AccountID      = Acc.AccountID;
                characterModel.AppearanceType = (int)Char.Appearance;
                characterModel.City           = Char.ResidingCity.UUID;
                characterModel.CityName       = Char.ResidingCity.Name;
                characterModel.CityThumb      = (long)Char.ResidingCity.Thumbnail;
                characterModel.CityMap        = (long)Char.ResidingCity.Map;
                characterModel.CityIp         = Char.ResidingCity.IP;
                characterModel.CityPort       = Char.ResidingCity.Port;

                var status = db.Characters.CreateCharacter(characterModel);
                //Need to be variable length, because the success packet contains a token.
                PacketStream CCStatusPacket = new PacketStream((byte)PacketType.CHARACTER_CREATION_STATUS, 0);

                switch (status)
                {
                case LoginDataModel.Entities.CharacterCreationStatus.NameAlreadyExisted:
                    CCStatusPacket.WriteByte((int)LoginDataModel.Entities.CharacterCreationStatus.NameAlreadyExisted);
                    Client.SendEncrypted(CCStatusPacket.PacketID, CCStatusPacket.ToArray());
                    break;

                case LoginDataModel.Entities.CharacterCreationStatus.ExceededCharacterLimit:
                    CCStatusPacket.WriteByte((int)LoginDataModel.Entities.CharacterCreationStatus.ExceededCharacterLimit);
                    Client.SendEncrypted(CCStatusPacket.PacketID, CCStatusPacket.ToArray());
                    break;

                case LoginDataModel.Entities.CharacterCreationStatus.Success:
                    CCStatusPacket.WriteByte((int)LoginDataModel.Entities.CharacterCreationStatus.Success);
                    CCStatusPacket.WritePascalString(Char.GUID.ToString());
                    Guid Token = Guid.NewGuid();
                    CCStatusPacket.WritePascalString(Token.ToString());
                    Client.SendEncrypted(CCStatusPacket.PacketID, CCStatusPacket.ToArray());

                    foreach (CityServerClient CServer in NetworkFacade.CServerListener.CityServers)
                    {
                        if (CServer.ServerInfo.UUID == Char.ResidingCity.UUID)
                        {
                            PacketStream CServerPacket = new PacketStream(0x01, 0);
                            CServerPacket.WriteHeader();

                            ushort PacketLength = (ushort)(PacketHeaders.UNENCRYPTED + 4 + (Client.RemoteIP.Length + 1)
                                                           + (Char.GUID.ToString().Length + 1) + (Token.ToString().Length + 1));
                            CServerPacket.WriteUInt16(PacketLength);

                            CServerPacket.WriteInt32(Acc.AccountID);
                            CServerPacket.WritePascalString(Client.RemoteIP);
                            CServerPacket.WritePascalString(Char.GUID.ToString());
                            CServerPacket.WritePascalString(Token.ToString());
                            CServer.Send(CServerPacket.ToArray());

                            break;
                        }
                    }

                    break;
                }
            }

            //Client was modified, so update it.
            NetworkFacade.ClientListener.UpdateClient(Client);
        }
Пример #15
0
 public TableManager(CServer _server) : base(_server)
 {
 }
Пример #16
0
    private void build_popups()
    {
        /** ====================
         * DO SERVER MENU
         * ====================
         */

        mnu_add_server.ButtonReleaseEvent += delegate(object o, ButtonReleaseEventArgs args) {

            clear_server_settings();
            c_current_server = new CServer();
            c_current_server.Update = false;
            nbFrames.CurrentPage = (int)nb_Notebook_Pages.SERVER_SETTINGS;

        };

        mnu_del_server.ButtonReleaseEvent += delegate(object o, ButtonReleaseEventArgs args) {

            mnu_server.Popdown();

            MessageDialog dlg = new MessageDialog(this,DialogFlags.DestroyWithParent, MessageType.Question, ButtonsType.YesNo,
                "Are you sure you want to delete the Server \n" +
                "and all it's data?", 0);
            ResponseType res = (ResponseType)dlg.Run();
            dlg.Destroy();

            if (res == ResponseType.Yes) {
                ListStore store = (ListStore) ivServerBrowser.Model;
                TreePath[] path = ivServerBrowser.SelectedItems;
                TreeIter iter;

                store.GetIter (out iter, path[0]);

                if (curTreePathItem.value != null) {
                    csql.CSQL_DeleteServer (curTreePathItem.value);
                    store.Remove(ref iter);
                }
            }

        };

        mnu_edit_server.ButtonReleaseEvent += delegate(object o, ButtonReleaseEventArgs args) {
            populate_server_settings();
        };

        mnu_server.Add (mnu_server_menu_title);
        mnu_server.Add (new SeparatorMenuItem());
        mnu_server.Add (mnu_add_server);
        mnu_server.Add (mnu_del_server);
        mnu_server.Add (mnu_edit_server);

        mnu_server.ShowAll ();

        mnu_del_server.Visible = false;
        mnu_edit_server.Visible = false;

        /*
         * ==============
         * DO DEVICE MENU
         * ==============
         */

        mnu_add_device.ButtonReleaseEvent += delegate(object o, ButtonReleaseEventArgs args) {
            clear_device_settings();
            populate_server_combo();
            populate_log_file_columns();
            c_current_device = new CDevice();
            c_current_device.Update = false;

            nbFrames.CurrentPage = (int)nb_Notebook_Pages.DEVICE_SETTINGS;
        };

        mnu_del_device.ButtonReleaseEvent += delegate(object o, ButtonReleaseEventArgs args) {

            mnu_device.Popdown();

            MessageDialog dlg = new MessageDialog (this, DialogFlags.DestroyWithParent, MessageType.Question,
                ButtonsType.YesNo, "Are you woud like to delete the device and all it's records?", 0);

            ResponseType res = (ResponseType)dlg.Run();

            if (res == ResponseType.Yes) {
                ListStore store = (ListStore)ivDeviceBrowser.Model;
                TreePath[] path = ivDeviceBrowser.SelectedItems;
                TreeIter iter;

                store.GetIter (out iter, path[0]);

                if (curTreePathItem.value != null) {
                    if (csql.CSQL_DeleteDevice (curTreePathItem.value))
                        store.Remove (ref iter);
                }
            }

            dlg.Destroy();
        };

        mnu_edit_device.ButtonReleaseEvent += delegate(object o, ButtonReleaseEventArgs args) {
            edit_device();
        };

        mnu_device_menu_title.CanDefault = false;
        mnu_device_menu_title.CanFocus = false;
        mnu_device.Add (mnu_device_menu_title);
        mnu_device.Add (new SeparatorMenuItem ());
        mnu_device.Add (mnu_add_device);
        mnu_device.Add (mnu_del_device);
        mnu_device.Add (mnu_edit_device);

        mnu_device.ShowAll ();
        mnu_del_device.Visible = false;
        mnu_edit_device.Visible = false;

        /*
         * ====================
         * DO LOGFILE MENU
         * ==================
         */
    }
Пример #17
0
    private void OnBtnSettingsBrowseClick(object o, EventArgs e)
    {
        string _server_subfolder = null;
        string _server_string = null;
        string _server_protocol = null;

        int _server_string_length = 0;
        int _dlg_uri_length = 0;
        int _url_diff = 0;

        int _response = -1;

        FileChooserDialog dlg = new FileChooserDialog (
            "Device Sub Folder",
            this,
            FileChooserAction.SelectFolder,
            "Cancel", ResponseType.Cancel,
            "Choose", ResponseType.Accept
        );

        c_current_server = csql.CSQL_GetServer (c_current_device.DeviceServer );
        _server_string = c_current_server.ServerAddr + c_current_server.ServerBaseDir;
        _server_string_length = _server_string.Length;
        _server_protocol = c_current_server.ServerProtocol;

        if (_server_protocol == "file://") {
            dlg.LocalOnly = false;
            _response = dlg.Run ();

            if (_response == (int)ResponseType.Accept) {

                if (dlg.Uri.StartsWith("file://")) {
                    entDeviceServerSubDir.Text = dlg.Uri.Substring("file://".Length);

                    if (entDeviceServerSubDir.Text.EndsWith (System.IO.Path.DirectorySeparatorChar.ToString()) == false )
                        entDeviceServerSubDir.Text += System.IO.Path.DirectorySeparatorChar.ToString();

                    c_current_device.DeviceServerSubDir = entDeviceServerSubDir.Text;
                } else {
                    entDeviceServerSubDir.Text = dlg.Uri + System.IO.Path.DirectorySeparatorChar;
                    c_current_device.DeviceServerSubDir = dlg.Uri + System.IO.Path.DirectorySeparatorChar;
                }

            } else {

            }

        } else {

            dlg.LocalOnly = false;
            dlg.SetUri (_server_string);
            _response = dlg.Run ();

            if (_response == (int)ResponseType.Accept) {

                string s = dlg.Uri;
                _dlg_uri_length = s.Length;
                _url_diff = _dlg_uri_length - _server_string_length;

                if (_url_diff > 0) {

                    _server_subfolder = s.Substring (_server_string_length, _dlg_uri_length - _server_string_length);

                    if (_server_subfolder.EndsWith ("/") != true)
                        _server_subfolder += "/";

                } else {

                }

                entDeviceServerSubDir.Text = _server_subfolder;
                c_current_device.DeviceServerSubDir = _server_subfolder;

            } else {

            }
        }
        dlg.Destroy ();
    }
Пример #18
0
    protected void OnIvDeviceBrowserItemActivated(object o, ItemActivatedArgs args)
    {
        //TODO: Implement device browser item activated for Ftp.

        /**
         * - Get item activated from browser model
         * - Get item activated from sqlite
         * - Get Server for selected Device
         * - Get File list
         * - Build file list model for ftp browser.
         */

        // Get device details from model and sqlite.
        TreePath[] path = ivDeviceBrowser.SelectedItems;
        TreeIter iter;
        string _device_key = null;
        ArrayList ftp_file_list = new ArrayList();

            ivDeviceBrowser.Model.GetIter (out iter, path [0]);
            _device_key = (string)ivDeviceBrowser.Model.GetValue (iter, 0);

            c_current_device = csql.CSQL_GetDevice (_device_key);
            c_current_server = csql.CSQL_GetServer (c_current_device.DeviceServer);
            c_current_ftp_session = new CFTP (c_current_server, c_current_device);

        if (c_current_server.ServerProtocol == "file://") {

            string __dir_to_list = c_current_device.DeviceServerSubDir;

            foreach (string s_file in Directory.EnumerateFiles (__dir_to_list)) {

                string c_file = s_file;

                if (c_current_platform == PlatformID.Win32NT)
                    c_file = s_file.Substring (2);

                string[] file_name = c_file.Split (System.IO.Path.DirectorySeparatorChar);
                ftp_file_list.Add (file_name[(file_name.Length - 1)]);

            }

        } else {

            try {

                ftp_file_list = c_current_ftp_session.CFTP_GetFileList ();

            } catch (WebException e) {

                if (e.Status == WebExceptionStatus.ProtocolError) {

                    string msg = "Please check you Server and Device directory settings.";

                    new Gtk.MessageDialog (null, Gtk.DialogFlags.Modal, Gtk.MessageType.Error,
                        Gtk.ButtonsType.Ok, e.Message + "\n" + msg, 0).Run ();

                } else {

                    Console.WriteLine (e.Status + "\n" + e.Message + "\n" + e.Source);
                }

                return;
            }
        }

        if (ftp_file_list != null) {
            populate_FtpFileBrowser (ftp_file_list);
        }
    }
Пример #19
0
    private void populate_server_settings()
    {
        mnu_server.Popdown ();

        string server = get_BrowserItem_Value ( ivServerBrowser );

        c_current_server = csql.CSQL_GetServer (server);

        if (c_current_server != null) {
            entServer.Text = c_current_server.ServerAddr;
            entPort.Text = Convert.ToString (c_current_server.ServerPort);
            entFriendlyName.Text = c_current_server.ServerFriendName;
            entBaseDir.Text = c_current_server.ServerBaseDir;
            cbAuth.Active = Convert.ToBoolean (c_current_server.ServerAuthRequired);
            entUname.Text = c_current_server.ServerUserName;
            entPword.Text = c_current_server.ServerPassword;
        }

        //============================================================
        //		POPULATE PROTOCOL COMBO
        //============================================================

        string proto = null;
        TreeIter iter;
        ListStore model = (ListStore)cboProtocol.Model;

        cboProtocol.Model.GetIterFirst (out iter);

        while ( (proto = (string)model.GetValue (iter, 0)) != null) {

            if ( proto == c_current_server.ServerProtocol )
                break;

            model.IterNext (ref iter);
        }

        cboProtocol.SetActiveIter (iter);

        //=============================================================

        c_current_server.Update = true;
        nbFrames.CurrentPage = (int)nb_Notebook_Pages.SERVER_SETTINGS;
    }
Пример #20
0
        public void TestMethod1()
        {
            CClient clientA = new CClient("Client A");
            CClient clientB = new CClient("Client B");
            CClient clientC = new CClient("Client C");

            CBroker1 broker1 = new CBroker1();
            CBroker2 broker2 = new CBroker2();

            CServer.Brokers[0] = broker1;
            CServer.Brokers[1] = broker2;

            //1)
            CTransaction transac1 = new CTransaction
            {
                Quantity        = 10,
                Client          = clientA,
                TransactionType = ETransactionType.BUYS
            };
            CTransactionsInvoice transacExec1 = CServer.ExecuteTransaction(transac1);

            Assert.AreEqual(15.645M, transacExec1.TotalRealMonneyExchanged.Amount);


            //2)
            CTransaction transac2 = new CTransaction
            {
                Quantity        = 40,
                Client          = clientB,
                TransactionType = ETransactionType.BUYS
            };
            CTransactionsInvoice transacExec2 = CServer.ExecuteTransaction(transac2);

            Assert.AreEqual(62.58M, transacExec2.TotalRealMonneyExchanged.Amount);


            //3)
            CTransaction transac3 = new CTransaction
            {
                Quantity        = 50,
                Client          = clientA,
                TransactionType = ETransactionType.BUYS
            };
            CTransactionsInvoice transacExec3 = CServer.ExecuteTransaction(transac3);

            Assert.AreEqual(77.9M, transacExec3.TotalRealMonneyExchanged.Amount);


            //4)
            CTransaction transac4 = new CTransaction
            {
                Quantity        = 100,
                Client          = clientB,
                TransactionType = ETransactionType.BUYS
            };
            CTransactionsInvoice transacExec4 = CServer.ExecuteTransaction(transac4);

            Assert.AreEqual(155.04M, transacExec4.TotalRealMonneyExchanged.Amount);

            //5)
            CTransaction transac5 = new CTransaction
            {
                Quantity        = 80,
                Client          = clientB,
                TransactionType = ETransactionType.SELLS
            };
            CTransactionsInvoice transacExec5 = CServer.ExecuteTransaction(transac5);

            //Assert.AreEqual(124.64M, transacExec5.TotalRealMonneyExchanged.Amount);
            //TODO : Change assertions if commission rule changed in the case where client sells Digicoins
            //Broker1 : 80 DIGICOINS * 1.49 = 119.20 'REAL_MONNEY', Removal of commission of 5% : 119.20 * 0.95 = 113.24 'REAL_MONNEY'
            //Broker2 : 80 DIGICOINS * 1.52 = 121.60 'REAL_MONNEY', Removal of commission of 2.5% : 121.60 * 0.975 = 118.56 'REAL_MONNEY' => best choice
            Assert.AreEqual(118.56M, transacExec5.TotalRealMonneyExchanged.Amount);

            //6)
            CTransaction transac6 = new CTransaction
            {
                Quantity        = 70,
                Client          = clientC,
                TransactionType = ETransactionType.SELLS
            };
            CTransactionsInvoice transacExec6 = CServer.ExecuteTransaction(transac6);

            //Assert.AreEqual(109.06M, transacExec6.TotalRealMonneyExchanged.Amount);
            Assert.AreEqual(103.74M, transacExec6.TotalRealMonneyExchanged.Amount);

            //7)
            CTransaction transac7 = new CTransaction
            {
                Quantity        = 130,
                Client          = clientA,
                TransactionType = ETransactionType.BUYS
            };
            CTransactionsInvoice transacExec7 = CServer.ExecuteTransaction(transac7);

            Assert.AreEqual(201.975M, transacExec7.TotalRealMonneyExchanged.Amount);

            //8)
            CTransaction transac8 = new CTransaction
            {
                Quantity        = 60,
                Client          = clientB,
                TransactionType = ETransactionType.SELLS
            };
            CTransactionsInvoice transacExec8 = CServer.ExecuteTransaction(transac8);

            //Assert.AreEqual(93.48M, transacExec8.TotalRealMonneyExchanged.Amount);
            Assert.AreEqual(88.92M, transacExec8.TotalRealMonneyExchanged.Amount);

            //9)
            //TODO : Selling commission rule changes the net position of client
            //Assert.AreEqual(296.56M, clientA.NetPosition);
            //Assert.AreEqual(0M, clientB.NetPosition);
            //Assert.AreEqual(-109.06M, clientC.NetPosition);
            Assert.AreEqual(295.520M, clientA.NetPosition);
            Assert.AreEqual(10.14M, clientB.NetPosition);
            Assert.AreEqual(-103.74, clientC.NetPosition);

            //10)
            Assert.AreEqual(80M, broker1.DigicoinsProcessed.Amount);
            Assert.AreEqual(460M, broker2.DigicoinsProcessed.Amount);
        }
Пример #21
0
 public void Init(CServer serv)
 {
 }
 public ATableActionManager(CServer _server) : base(_server)
 {
 }
Пример #23
0
 //private byte opcode;
 public CSendHello(bool response, MemoryStream buffer, CServer server, bool sendCompatOptions, bool allowPartner)
 {
     DonkeyHeader header;
     BinaryWriter writer = new BinaryWriter(buffer);
     if (response)
         header = new DonkeyHeader((byte)Protocol.ClientCommand.HelloAnswer, writer);
     else
     {
         header = new DonkeyHeader((byte)Protocol.ClientCommand.Hello, writer);
         writer.Write((byte)CKernel.Preferences.GetByteArray("UserHash").Length);
     }
     writer.Write(CKernel.Preferences.GetByteArray("UserHash"));
     writer.Write(CKernel.Preferences.GetUInt("ID"));
     writer.Write(CKernel.Preferences.GetUShort("TCPPort"));
     uint nParametros = 5;
     if (sendCompatOptions) nParametros++;
     writer.Write(nParametros);
     // username
     new ParameterWriter((byte)Protocol.ClientParameter.Name, CKernel.Preferences.GetString("UserName"), writer);
     // version
     new ParameterWriter((byte)Protocol.ClientParameter.Version, Protocol.EDONKEYVERSION, writer);
     //ParameterNumericNumeric port=new ParameterWriter((byte)Protocol.ClientParameter.Port,(uint)CKernel.Preferences.GetUShort("TCPPort"),writer);
     // emule version
     new ParameterWriter((byte)Protocol.ClientParameter.EmuleVersion, Protocol.EMULE_VERSION_COMPLEX, writer);
     // upd port
     new ParameterWriter((byte)Protocol.ClientParameter.EmuleUDPPort, (uint)CKernel.Preferences.GetUShort("UDPPort"), writer);
     // emule flags
     new ParameterWriter((byte)Protocol.ClientParameter.Emule_MiscOptions1,
         //              (                       << 4*7) |
                                             (Protocol.EMULE_VERSION_UDP << 4 * 6) |
                                             (Protocol.EMULE_VERSION_COMPRESION << 4 * 5) |
                                             (0 /*secureID */                        << 4 * 4) |
                                             (Protocol.EMULE_VERSION_SOURCEEXCHANGE << 4 * 3) |
                                             (Protocol.EMULE_VERSION_EXTENDEDREQUEST << 4 * 2) |
                                             (Protocol.EMULE_VERSION_COMMENTS << 4 * 1) |
         //              (                                       << 1*3) |
                                             ((((Types.Constants.AllowViewShared)CKernel.Preferences.GetEnum("AllowViewShared", Types.Constants.AllowViewShared.Nobody) == Types.Constants.AllowViewShared.Nobody) ? (uint)1 : (uint)0) << 1 * 2) |
                                             (0 /*uMultiPacket*/                     << 1 * 1) |
                                             (0 /*uSupportPreview*/                  << 1 * 0)
                                             , writer);
     uint compatValue = 1;
     if (sendCompatOptions)
     {
         if (allowPartner) compatValue = 3;
         //CLog.Log(Types.Constants.Log.Verbose,"Sent partner flag "+compatValue.ToString());
         new ParameterWriter((byte)Protocol.ClientParameter.EmuleCompatOptions, compatValue, writer);
     }
     if (server == null)
     {
         writer.Write((uint)0);
         writer.Write((ushort)0);
     }
     else
     {
         writer.Write(server.IP);
         writer.Write(server.MainPort);
     }
     header.Packetlength = (uint)writer.BaseStream.Length - header.Packetlength + 1;
     writer.Seek(0, SeekOrigin.Begin);
     header.Serialize(writer);
 }
Пример #24
0
 public void ServerIsNull()
 {
     _mServer = null;
 }