/// <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); }
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. }
//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); } }
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(); }
// 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(); } }
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()); }
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) { }
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; }
internal virtual void SubmitOnNewServer(CServer server) { if (OnNewServer!=null) OnNewServer(ServerToInterfaceServer(server)); }
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); }
public TableManager(CServer _server) : base(_server) { }
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 * ================== */ }
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 (); }
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); } }
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; }
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); }
public void Init(CServer serv) { }
public ATableActionManager(CServer _server) : base(_server) { }
//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); }
public void ServerIsNull() { _mServer = null; }