Source Code

for file S06_AJAXForms/OpenAjaxChat.asmx

<%@ WebService Language="C#" Class="OpenAjaxChat" %>
// OpenAjaxChat.asmx
// This is the webservice for the OpenAjax hub extender sample.
// Copyright (c) by Matthias Hertel, http://www.mathertel.de
// This work is licensed under a BSD style license. See http://www.mathertel.de/License.aspx
// - - - - - 
// 13.08.2007 created by Matthias Hertel
using System;
using System.Collections.Specialized;
using System.Text;

using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class OpenAjaxChat : System.Web.Services.WebService
{

  private static long globalMarker = DateTime.Now.Ticks;

  private static StringCollection serverMark = new StringCollection();
  private static StringCollection serverData = new StringCollection();
  

  [WebMethod]
  public void Publish(string eventName, string eventData)
  {
    long nowMarker = DateTime.Now.Ticks;
    // calculate the next marker
    globalMarker++;
    if (globalMarker < nowMarker)
      globalMarker = nowMarker;

    // clear out oldest message if there are too many
    if (serverMark.Count > 20)
      serverMark.RemoveAt(0);
    if (serverData.Count > 20)
      serverData.RemoveAt(0);
    
    serverMark.Add(nowMarker.ToString());
    serverData.Add(eventName + ":" + eventData);
  } // publish


  [WebMethod]
  public string PullEvents(string marker)
  {
    StringBuilder ret = new StringBuilder();
    
    if ((marker == null) || (marker.Length == 0)) {
      marker = "0";
    } // if
        
    for (int n = 0; n < serverMark.Count; n++) {
      if (serverMark[n].CompareTo(marker) > 0)
        ret.AppendLine(serverData[n]);
    } // for
    ret.Append(globalMarker.ToString());
    return (ret.ToString());
  } // pullevents

}



This page is part of the http://www.mathertel.de/ web site.

For updates and discussions see http://ajaxaspects.blogspot.com/.