using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System;                         // Niezbdne dla klasy String.
using System.EnterpriseServices;      // Niezbdne dla transakcji.
using System.Collections;             // Niezbdne dla obiektu ArrayLists.
using System.Data;                    // Niezbdne dla obiekt DataSet.
using System.Data.SqlClient;          // Niezbdne dla obiektu DataSet.

[WebService (Description="Program pobierania kursw akcji, napisany w jzyku C#.",
   Name="StockTicker",
   Namespace="www.LibertyAssociates.com")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1,
   EmitConformanceClaims = true)]
[WebServiceBinding(Name = "OverloadedGetValue",
   ConformsTo = WsiProfiles.BasicProfile1_1,
   EmitConformanceClaims = true)]

public class Service : System.Web.Services.WebService
{
   // Konstruujemy i wypeniamy tablic symboli giedowych oraz ich cen.
   // Uwaga: ceny dotycz giedy w USA z  dnia 01/5/2005.
   string[,] stocks =
   {
      {"MSFT","Microsoft","25.30"},
      {"DELL","Dell Computers","34.83"},
      {"HPQ","Hewlett Packard","20.47"},
      {"YHOO","Yahoo!","34.50"},
      {"GE","General Electric","36.20"},
      {"IBM","International Business Machine","76.38"},
      {"GM","General Motors","26.68"},
      {"F","Ford Motor Company","9.11"}
   };

   [WebMethod(Description="Zwraca cen waloru dla podanego symbolu giedowego.")]
   public double GetPrice(string StockSymbol)
   // Podajemy symbol giedowy, otrzymujemy cen waloru.
   {
      // Przeszukujemy kolejno elementy tablicy w poszukiwaniu symbolu.
      for (int i = 0; i < stocks.GetLength(0); i++)
      {
         // Przeprowadzamy porwnanie cigw tekstowych bez rozrniania maych i duych liter.
         if (String.Compare(StockSymbol, stocks[i,0], true) == 0)
            return Convert.ToDouble(stocks[i,2]);
      }
      return 0;
   }

   [WebMethod(Description="Zwraca histori notowa giedowych " +
      "na podstawie podanego symbolu giedowego.")]
   public Stock GetHistory(string StockSymbol)
   {

      Stock stock = new Stock();

      // Przeszukujemy kolejno elementy tablicy w poszukiwaniu podanego symbolu.
      for (int i = 0; i < stocks.GetLength(0); i++)
      {
         // Przeprowadzamy porwnanie cigw tekstowych, bez rozrniania wielkoci liter.
         if (String.Compare(StockSymbol, stocks[i,0], true) == 0)
         {
            stock.StockSymbol = StockSymbol;
            stock.StockName = stocks[i,1];
            stock.Price = Convert.ToDouble(stocks[i,2]);

            // Wypeniamy dane StockHistory.
            stock.History[0] = new StockHistory();
            stock.History[0].TradeDate = Convert.ToDateTime("01/5/2005");
            stock.History[0].Price = Convert.ToDouble(23.25);

            stock.History[1] = new StockHistory();
            stock.History[1].TradeDate = Convert.ToDateTime("01/6/2005");
            stock.History[1].Price = Convert.ToDouble(28.75);

            return stock;
         }
      }
      stock.StockSymbol = StockSymbol;
      stock.StockName = "Walor nie zosta znaleziony.";
      return stock;
   }
} // Koniec klasy Service.

public class Stock
{
   public string StockSymbol;
   public string StockName;
   public double Price;
   public StockHistory[] History =
         new StockHistory[2];
}

public class StockHistory
{
   public DateTime TradeDate;
   public double Price;
}
